Estoy intentando medir la altura de una parte de mi página.
La página de título completa, junto con la parte de la página que estoy tratando de medir, está delineada en rojo, y el código para compilar la página se muestra debajo. Sí, tengo que medirlo todo de una vez.:-(
\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}
Intenté medir esto creando mi propio cuadro, que se compila con ocho errores y requiere un uso extensivo de \hbox
y \vbox
. También requirió que reemplazara cada instancia de \hrule
con una \leaders
variante, que requiere pegamento (la pesadilla de mi existencia). Sospecho firmemente que este es el culpable de la salida incorrecta. Sin embargo, mi pregunta principal es que mi enfoque actual parece particularmente engorroso, lo que me lleva a creer que mi enfoque no es el correcto, es decir, existe un enfoque más flexible (o "fácil", si lo desea). ¿Cómo puedo crear este cuadro para medición y uso en el documento, de la manera más accesible/flexible?
\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}
Respuesta1
Puede utilizar el tcolorbox
paquete (versión 3.12 (2014/07/29)
o más reciente) para realizar la medición. En mi solución, el kernel es un entorno measurebox
construido con el siguiente código:
\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
Cualquier párrafo rodeado por este entorno tcolorbox
se mide y se escribe su dimensión en la pantalla o en el papel. El código completo es:
\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}
El entorno measurebox
toma un argumento opcional que puede usarse para influir en el cuadro. En esta aplicación, puede resultar útil cambiar el espaciado antes o después del cuadro, por ejemplo,
\begin{measurebox}[before=\par\bigskip,
after=\par\vskip 10ex]
...
Segunda solución:
Esta es una variante de la primera parte. Ahora, la altura del cuadro se guarda en un parámetro obligatorio measurebox
para su uso posterior:
\makeatletter
\newtcolorbox{measurebox}[2][]{blank,parbox=false,
overlay={\xdef#2{\tcb@height}},
#1}
\makeatother
Se utiliza de la siguiente manera:
\begin{measurebox}{\myheight}
En conjunto, esto es:
\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}
Tercera solución:
La tercera solución se omite tcolorbox
por completo. Una macro \measurebox
es creada por
\newcommand{\measurebox}[4]{%
\sbox{#1}{\begin{minipage}{#2}#4%
\end{minipage}}%
\edef#3{\the\dimexpr\ht#1+\dp#1\relax}%
}
Se necesitan cuatro parámetros: #1
es un nombre de cuadro válido, #2
es un ancho, #3
es un nombre de macro que obtendrá la altura total del cuadro, #4
es el contenido del cuadro. Se utiliza de la siguiente manera:
\newsavebox\titlebox
\measurebox{\titlebox}{\textwidth}{\myheight}{%----- start measuring
...
}%----- end measuring
%
\usebox\titlebox% somewhere
The box above has a height of \myheight.% somewhere
El código completo con el mismo resultado que el anterior es:
\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}
Tenga en cuenta que debe usar la medición después \begin{document}
, pero puede medir tantas cajas como desee antes de usar cualquiera de ellas.