Ich versuche, die Höhe eines Teils meiner Seite zu messen.
Die komplette Titelseite sowie der Teil der Seite, den ich messen möchte, sind rot umrandet, und darunter wird der Code zum Kompilieren der Seite angezeigt. Ja, ich muss alles auf einmal messen.:-(
\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}
Ich habe versucht, dies zu messen, indem ich meine eigene Box erstellt habe, die mit acht Fehlern kompiliert wird und eine umfangreiche Verwendung von \hbox
und erfordert. Außerdem musste ich jede Instanz von durch eine Variante \vbox
ersetzen , die Glue erfordert (der Fluch meines Daseins). Ich vermute stark, dass dies der Grund für die falsche Ausgabe ist. Meine Hauptfrage ist jedoch, dass mein aktueller Ansatz besonders umständlich erscheint, was mich zu der Annahme führt, dass mein Ansatz nicht der richtige ist, d. h. es gibt einen flexibleren (oder „einfacheren“, wenn Sie so wollen) Ansatz. Wie kann ich diese Box zur Messung und Verwendung im Dokument auf die zugänglichste/flexibelste Weise erstellen?\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}
Antwort1
Sie können das tcolorbox
Paket (Version 3.12 (2014/07/29)
oder neuer) zum Messen verwenden. In meiner Lösung ist der Kernel eine Umgebung, die measurebox
mit dem folgenden Code erstellt wird:
\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
Jeder Absatz, der von dieser Umgebung umgeben ist, tcolorbox
wird gemessen und seine Abmessungen werden auf dem Bildschirm oder auf Papier geschrieben. Der vollständige Code lautet:
\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}
Die Umgebung measurebox
akzeptiert ein optionales Argument, mit dem die Box beeinflusst werden kann. In dieser Anwendung kann es nützlich sein, den Abstand vor oder nach der Box zu ändern, z. B. durch
\begin{measurebox}[before=\par\bigskip,
after=\par\vskip 10ex]
...
Zweite Lösung:
Dies ist eine Variante des ersten Teils. Hier wird die Höhe der Box als Pflichtparameter measurebox
für die weitere Verwendung gespeichert:
\makeatletter
\newtcolorbox{measurebox}[2][]{blank,parbox=false,
overlay={\xdef#2{\tcb@height}},
#1}
\makeatother
Es wird wie folgt verwendet:
\begin{measurebox}{\myheight}
Alles in allem ist dies:
\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}
Dritte Lösung:
Die dritte Lösung lässt es tcolorbox
ganz weg. Ein Makro \measurebox
wird erstellt durch
\newcommand{\measurebox}[4]{%
\sbox{#1}{\begin{minipage}{#2}#4%
\end{minipage}}%
\edef#3{\the\dimexpr\ht#1+\dp#1\relax}%
}
Es werden vier Parameter benötigt: #1
ist ein gültiger Boxname, #2
ist eine Breite, #3
ist ein Makroname, der die Gesamthöhe der Box ermittelt, #4
ist der Boxinhalt. Es wird wie folgt verwendet:
\newsavebox\titlebox
\measurebox{\titlebox}{\textwidth}{\myheight}{%----- start measuring
...
}%----- end measuring
%
\usebox\titlebox% somewhere
The box above has a height of \myheight.% somewhere
Der vollständige Code mit der gleichen Ausgabe wie oben lautet:
\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}
Beachten Sie, dass Sie die Messung nach verwenden müssen \begin{document}
, Sie können jedoch beliebig viele Kästchen messen, bevor Sie eines davon verwenden.