Я пытаюсь измерить высоту части моей страницы.
Полный титульный лист вместе с той частью страницы, которую я пытаюсь измерить, обведены красным, а код для компиляции страницы показан ниже. Да, мне нужно измерить все сразу.:-(
\documentclass[10pt]{extarticle}
\usepackage{lipsum}
\usepackage{multicol}
\usepackage[a4paper,margin=.9in]{geometry}
\usepackage{xcolor}
\definecolor{palette2}{RGB}{235,249,249}
\usepackage[letterspace=400]{microtype}
\usepackage[english]{babel}
\usepackage{ragged2e}
\usepackage{array}
\usepackage[bitstream-charter]{mathdesign}
\usepackage[T1]{fontenc}
\usepackage{fancyhdr}
\usepackage{etoolbox}
\newcommand{\headrulecolor}[1]{\patchcmd{\headrule}{\hrule}{\color{#1}\hrule}{}{}}
\makeatletter
\fancypagestyle{plain}{
\fancyhf{}
\headrulecolor{lightgray}
\chead{\textit{Some science institution}}
\renewcommand{\headrulewidth}{.5pt}
}
\setlength\parindent\z@
\newcommand*\docparspacing{
\setlength\parindent{16pt}
\setlength\parskip{0pt}
}
\makeatother
\begin{document}
\thispagestyle{plain}
\raisebox{3.5ex}{\hbadness=9999
\colorbox{palette2}{\vrule width 0pt height 5.8ex \begin{tabular}{>{\RaggedRight\arraybackslash}p{\dimexpr.3\linewidth-\tabcolsep} >{\centering\arraybackslash}p{\dimexpr.35\linewidth-2\tabcolsep} >{\RaggedLeft\arraybackslash}p{\dimexpr.35\linewidth-4.4\tabcolsep}}
&
&
\end{tabular}}}
\vskip 2ex
\textcolor{lightgray}{\hrule height .5pt}
\vskip 6ex
\Huge{A title in fontsize Huge}
\vskip .4ex
\large{Doe, J. (John)}
\vskip 2ex
\normalsize
\vskip .5ex
\valign{%
\hsize=\dimexpr.5\linewidth-2\tabcolsep
\vskip 2ex
#\vfil\nointerlineskip
\vskip 1.5ex
\cr
\noindent\textls{\itshape\footnotesize KEYWORDS}
\vskip -1.5ex
\hbox to\hsize{\color{lightgray}\leaders\hrule height .5pt\hfill}
\vskip 1.5ex
\itshape{obituary
linguist
typography}\cr
\noalign{\hfill}
\noindent\textls{\itshape\footnotesize ABSTRACT}
\vskip -1.5ex
\hbox to\hsize{\color{lightgray}\leaders\hrule height .5pt\hfill}
\vskip 1.5ex
\small \lipsum[4] \cr
}\par
\vskip2ex
\hbox to\linewidth{\color{lightgray}\leaders\hrule height .5pt\hfill}
\vskip 3ex
\colorbox{palette2}{%
\begin{minipage}{\dimexpr\textwidth-2\fboxsep}
\lipsum[1-2]
\end{minipage}%
}
\vskip 5ex
\docparspacing
\begin{multicols*}{3}
\section{Document structure}
\lipsum[1-3]
\end{multicols*}
\end{document}
Я попытался измерить это, создав свой собственный блок, который компилируется с восемью ошибками и требует обширного использования \hbox
и \vbox
. Также мне пришлось заменить каждый экземпляр на \hrule
вариант \leaders
, который требует клей (проклятие моего существования). Я сильно подозреваю, что это является виновником неправильного вывода. Однако мой главный вопрос заключается в том, что мой текущий подход кажется особенно громоздким, что заставляет меня думать, что мой подход не является правильным, т. е. существует более гибкий (или «легкий», если хотите) подход. Как мне создать этот блок для измерения и использования в документе наиболее доступным/гибким образом?
\documentclass[10pt]{extarticle}
\usepackage{lipsum}
\usepackage{multicol}
\usepackage[a4paper,margin=.9in]{geometry}
\usepackage{xcolor}
\definecolor{palette2}{RGB}{235,249,249}
\usepackage[letterspace=400]{microtype}
\usepackage[english]{babel}
\usepackage{ragged2e}
\usepackage{array}
\usepackage[bitstream-charter]{mathdesign}
\usepackage[T1]{fontenc}
\usepackage{fancyhdr}
\usepackage{etoolbox}
\newcommand{\headrulecolor}[1]{\patchcmd{\headrule}{\hrule}{\color{#1}\hrule}{}{}}
\makeatletter
\fancypagestyle{plain}{
\fancyhf{}
\headrulecolor{lightgray}
\chead{\textit{Some science institution}}
\renewcommand{\headrulewidth}{.5pt}
}
\setlength\parindent\z@
\newcommand*\docparspacing{
\setlength\parindent{16pt}
\setlength\parskip{0pt}
}
\makeatother
\newsavebox\titlebox
\setbox\titlebox=\vbox{%
\hbox{\raisebox{3.5ex}{\hbadness=9999
\colorbox{palette2}{\vrule width 0pt height 5.8ex \begin{tabular}{>{\RaggedRight\arraybackslash}p{\dimexpr.3\linewidth-\tabcolsep} >{\centering\arraybackslash}p{\dimexpr.35\linewidth-2\tabcolsep} >{\RaggedLeft\arraybackslash}p{\dimexpr.35\linewidth-4.4\tabcolsep}}
&
&
\end{tabular}}}
}
\vskip 2ex
\hbox to \linewidth{\textcolor{lightgray}{\leaders\hrule height .5pt\hfil}}
\vskip 6ex
\hbox{\Huge{A title in fontsize Huge}}
\vskip .4ex
\hbox{\large{Doe, J. (John)}}
\vskip 2ex
\normalsize
\vskip .5ex
\valign{%
\hsize=\dimexpr.5\linewidth-2\tabcolsep
\vskip 2ex
#\vfil\nointerlineskip
\vskip 1.5ex
\cr
\noindent\textls{\itshape\footnotesize KEYWORDS}
\vskip -1.5ex
\hbox to\hsize{\color{lightgray}\leaders\hrule height .5pt\hfil}
\vskip 1.5ex
\itshape{obituary
linguist
typography}\cr
\noalign{\hfill}
\noindent\textls{\itshape\footnotesize ABSTRACT}
\vskip -1.5ex
\hbox to\hsize{\color{lightgray}\leaders\hrule height .5pt\hfil}
\vskip 1.5ex
\small \lipsum[4] \cr
}\par
\vskip2ex
\hbox to\linewidth{\color{lightgray}\leaders\hrule height .5pt\hfil}
\vskip 3ex
\colorbox{palette2}{%
\begin{minipage}{\dimexpr\textwidth-2\fboxsep}
\lipsum[1-2]
\end{minipage}%
}
\vskip 5ex
}
\begin{document}
\thispagestyle{plain}
\usebox\titlebox
\docparspacing
\begin{multicols*}{3}
\section{Document structure}
\lipsum[1-3]
\end{multicols*}
\end{document}
решение1
Вы можете использовать tcolorbox
пакет (версию 3.12 (2014/07/29)
или более новую) для измерения. В моем решении ядро — это среда, measurebox
созданная следующим кодом:
\makeatletter
\newtcolorbox{measurebox}[1][]{blank,parbox=false,
show bounding box,
finish={\node[draw,fill=white,fill opacity=0.85,inner sep=5mm,
rounded corners,align=left,node font=\Large\bfseries]
at (frame.center) { width: \tcb@width,\\ height: \tcb@height};},
#1}
\makeatother
Любой абзац, окруженный этой средой, tcolorbox
измеряется, и его размер записывается на экране или бумаге. Полный код:
\documentclass[10pt]{extarticle}
\usepackage{lipsum}
\usepackage{multicol}
\usepackage[a4paper,margin=.9in]{geometry}
\usepackage{xcolor}
\definecolor{palette2}{RGB}{235,249,249}
\usepackage[letterspace=400]{microtype}
\usepackage[english]{babel}
\usepackage{ragged2e}
\usepackage{array}
\usepackage[bitstream-charter]{mathdesign}
\usepackage[T1]{fontenc}
\usepackage{fancyhdr}
\usepackage{etoolbox}
\usepackage[many]{tcolorbox}% version `3.12 (2014/07/29)` or newer
\makeatletter% construct boxing environment
\newtcolorbox{measurebox}[1][]{blank,parbox=false,
show bounding box,
finish={\node[draw,fill=white,fill opacity=0.85,inner sep=5mm,
rounded corners,align=left,node font=\Large\bfseries]
at (frame.center) { width: \tcb@width,\\ height: \tcb@height};},
#1}
\makeatother% end construction
\newcommand{\headrulecolor}[1]{\patchcmd{\headrule}{\hrule}{\color{#1}\hrule}{}{}}
\makeatletter
\fancypagestyle{plain}{
\fancyhf{}
\headrulecolor{lightgray}
\chead{\textit{Some science institution}}
\renewcommand{\headrulewidth}{.5pt}
}
\setlength\parindent\z@
\newcommand*\docparspacing{
\setlength\parindent{16pt}
\setlength\parskip{0pt}
}
\makeatother
\begin{document}
\thispagestyle{plain}
\begin{measurebox}%----- start measuring -----
\raisebox{3.5ex}{\hbadness=9999
\colorbox{palette2}{\vrule width 0pt height 5.8ex \begin{tabular}{>{\RaggedRight\arraybackslash}p{\dimexpr.3\linewidth-\tabcolsep} >{\centering\arraybackslash}p{\dimexpr.35\linewidth-2\tabcolsep} >{\RaggedLeft\arraybackslash}p{\dimexpr.35\linewidth-4.4\tabcolsep}}
&
&
\end{tabular}}}
\vskip 2ex
\textcolor{lightgray}{\hrule height .5pt}
\vskip 6ex
\Huge{A title in fontsize Huge}
\vskip .4ex
\large{Doe, J. (John)}
\vskip 2ex
\normalsize
\vskip .5ex
\valign{%
\hsize=\dimexpr.5\linewidth-2\tabcolsep
\vskip 2ex
#\vfil\nointerlineskip
\vskip 1.5ex
\cr
\noindent\textls{\itshape\footnotesize KEYWORDS}
\vskip -1.5ex
\hbox to\hsize{\color{lightgray}\leaders\hrule height .5pt\hfill}
\vskip 1.5ex
\itshape{obituary
linguist
typography}\cr
\noalign{\hfill}
\noindent\textls{\itshape\footnotesize ABSTRACT}
\vskip -1.5ex
\hbox to\hsize{\color{lightgray}\leaders\hrule height .5pt\hfill}
\vskip 1.5ex
\small \lipsum[4] \cr
}\par
\vskip2ex
\hbox to\linewidth{\color{lightgray}\leaders\hrule height .5pt\hfill}
\vskip 3ex
\colorbox{palette2}{%
\begin{minipage}{\dimexpr\textwidth-2\fboxsep}
\lipsum[1-2]
\end{minipage}%
}
\vskip 5ex
\end{measurebox}%----- end measuring -----
\docparspacing
\begin{multicols*}{3}
\section{Document structure}
\lipsum[1-3]
\end{multicols*}
\end{document}
Окружение measurebox
принимает необязательный аргумент, который может быть использован для влияния на поле. В этом приложении может быть полезно изменить интервал до или после поля, например,
\begin{measurebox}[before=\par\bigskip,
after=\par\vskip 10ex]
...
Второе решение:
Это вариант первой части. Теперь высота ящика сохраняется в обязательный параметр measurebox
для дальнейшего использования:
\makeatletter
\newtcolorbox{measurebox}[2][]{blank,parbox=false,
overlay={\xdef#2{\tcb@height}},
#1}
\makeatother
Используется следующим образом:
\begin{measurebox}{\myheight}
В целом это:
\documentclass[10pt]{extarticle}
\usepackage{lipsum}
\usepackage{multicol}
\usepackage[a4paper,margin=.9in]{geometry}
\usepackage{xcolor}
\definecolor{palette2}{RGB}{235,249,249}
\usepackage[letterspace=400]{microtype}
\usepackage[english]{babel}
\usepackage{ragged2e}
\usepackage{array}
\usepackage[bitstream-charter]{mathdesign}
\usepackage[T1]{fontenc}
\usepackage{fancyhdr}
\usepackage{etoolbox}
\usepackage[many]{tcolorbox}
\makeatletter
\newtcolorbox{measurebox}[2][]{blank,parbox=false,
overlay={\xdef#2{\tcb@height}},
#1}
\makeatother
\newcommand{\headrulecolor}[1]{\patchcmd{\headrule}{\hrule}{\color{#1}\hrule}{}{}}
\makeatletter
\fancypagestyle{plain}{
\fancyhf{}
\headrulecolor{lightgray}
\chead{\textit{Some science institution}}
\renewcommand{\headrulewidth}{.5pt}
}
\setlength\parindent\z@
\newcommand*\docparspacing{
\setlength\parindent{16pt}
\setlength\parskip{0pt}
}
\makeatother
\begin{document}
\thispagestyle{plain}
\begin{measurebox}{\myheight}
\raisebox{3.5ex}{\hbadness=9999
\colorbox{palette2}{\vrule width 0pt height 5.8ex \begin{tabular}{>{\RaggedRight\arraybackslash}p{\dimexpr.3\linewidth-\tabcolsep} >{\centering\arraybackslash}p{\dimexpr.35\linewidth-2\tabcolsep} >{\RaggedLeft\arraybackslash}p{\dimexpr.35\linewidth-4.4\tabcolsep}}
&
&
\end{tabular}}}
\vskip 2ex
\textcolor{lightgray}{\hrule height .5pt}
\vskip 6ex
\Huge{A title in fontsize Huge}
\vskip .4ex
\large{Doe, J. (John)}
\vskip 2ex
\normalsize
\vskip .5ex
\valign{%
\hsize=\dimexpr.5\linewidth-2\tabcolsep
\vskip 2ex
#\vfil\nointerlineskip
\vskip 1.5ex
\cr
\noindent\textls{\itshape\footnotesize KEYWORDS}
\vskip -1.5ex
\hbox to\hsize{\color{lightgray}\leaders\hrule height .5pt\hfill}
\vskip 1.5ex
\itshape{obituary
linguist
typography}\cr
\noalign{\hfill}
\noindent\textls{\itshape\footnotesize ABSTRACT}
\vskip -1.5ex
\hbox to\hsize{\color{lightgray}\leaders\hrule height .5pt\hfill}
\vskip 1.5ex
\small \lipsum[4] \cr
}\par
\vskip2ex
\hbox to\linewidth{\color{lightgray}\leaders\hrule height .5pt\hfill}
\vskip 3ex
\colorbox{palette2}{%
\begin{minipage}{\dimexpr\textwidth-2\fboxsep}
\lipsum[1-2]
\end{minipage}%
}
\vskip 5ex
\end{measurebox}
\docparspacing
\begin{multicols*}{3}
\section{Document structure}
\textcolor{red}{The box above has a height of \myheight.}\par
\lipsum[1-3]
\end{multicols*}
\end{document}
Третье решение:
Третье решение tcolorbox
полностью исключает. Макрос\measurebox
создается
\newcommand{\measurebox}[4]{%
\sbox{#1}{\begin{minipage}{#2}#4%
\end{minipage}}%
\edef#3{\the\dimexpr\ht#1+\dp#1\relax}%
}
Он принимает четыре параметра: #1
это допустимое имя ящика, #2
это ширина, #3
это имя макроса, который получит общую высоту ящика, #4
это содержимое ящика. Он используется следующим образом:
\newsavebox\titlebox
\measurebox{\titlebox}{\textwidth}{\myheight}{%----- start measuring
...
}%----- end measuring
%
\usebox\titlebox% somewhere
The box above has a height of \myheight.% somewhere
Полный код с тем же выводом, что и выше:
\documentclass[10pt]{extarticle}
\usepackage{lipsum}
\usepackage{multicol}
\usepackage[a4paper,margin=.9in]{geometry}
\usepackage{xcolor}
\definecolor{palette2}{RGB}{235,249,249}
\usepackage[letterspace=400]{microtype}
\usepackage[english]{babel}
\usepackage{ragged2e}
\usepackage{array}
\usepackage[bitstream-charter]{mathdesign}
\usepackage[T1]{fontenc}
\usepackage{fancyhdr}
\usepackage{etoolbox}
\makeatletter
\newcommand{\measurebox}[4]{%
\sbox{#1}{\begin{minipage}{#2}#4%
\end{minipage}}%
\edef#3{\the\dimexpr\ht#1+\dp#1\relax}%
}
\makeatother
\newcommand{\headrulecolor}[1]{\patchcmd{\headrule}{\hrule}{\color{#1}\hrule}{}{}}
\makeatletter
\fancypagestyle{plain}{
\fancyhf{}
\headrulecolor{lightgray}
\chead{\textit{Some science institution}}
\renewcommand{\headrulewidth}{.5pt}
}
\setlength\parindent\z@
\newcommand*\docparspacing{
\setlength\parindent{16pt}
\setlength\parskip{0pt}
}
\makeatother
\begin{document}
\thispagestyle{plain}
\newsavebox\titlebox
\measurebox{\titlebox}{\textwidth}{\myheight}{%----- start measuring
\raisebox{3.5ex}{\hbadness=9999
\colorbox{palette2}{\vrule width 0pt height 5.8ex \begin{tabular}{>{\RaggedRight\arraybackslash}p{\dimexpr.3\linewidth-\tabcolsep} >{\centering\arraybackslash}p{\dimexpr.35\linewidth-2\tabcolsep} >{\RaggedLeft\arraybackslash}p{\dimexpr.35\linewidth-4.4\tabcolsep}}
&
&
\end{tabular}}}
\vskip 2ex
\textcolor{lightgray}{\hrule height .5pt}
\vskip 6ex
\Huge{A title in fontsize Huge}
\vskip .4ex
\large{Doe, J. (John)}
\vskip 2ex
\normalsize
\vskip .5ex
\valign{%
\hsize=\dimexpr.5\linewidth-2\tabcolsep
\vskip 2ex
#\vfil\nointerlineskip
\vskip 1.5ex
\cr
\noindent\textls{\itshape\footnotesize KEYWORDS}
\vskip -1.5ex
\hbox to\hsize{\color{lightgray}\leaders\hrule height .5pt\hfill}
\vskip 1.5ex
\itshape{obituary
linguist
typography}\cr
\noalign{\hfill}
\noindent\textls{\itshape\footnotesize ABSTRACT}
\vskip -1.5ex
\hbox to\hsize{\color{lightgray}\leaders\hrule height .5pt\hfill}
\vskip 1.5ex
\small \lipsum[4] \cr
}\par
\vskip2ex
\hbox to\linewidth{\color{lightgray}\leaders\hrule height .5pt\hfill}
\vskip 3ex
\colorbox{palette2}{%
\begin{minipage}{\dimexpr\textwidth-2\fboxsep}
\lipsum[1-2]
\end{minipage}%
}
\vskip 5ex
}%----- end measuring
%
\usebox\titlebox
\docparspacing
\begin{multicols*}{3}
\section{Document structure}
\textcolor{red}{The box above has a height of \myheight.}\par
\lipsum[1-3]
\end{multicols*}
\end{document}
Обратите внимание, что вам необходимо использовать измерение после\begin{document}
, но вы можете измерить столько коробок, сколько захотите, прежде чем использовать любую из них.