내 페이지의 일부 높이를 측정하려고 합니다.
측정하려는 페이지 부분과 함께 전체 제목 페이지는 빨간색 윤곽선으로 표시되어 있으며 페이지를 컴파일하는 코드는 그 아래에 표시됩니다. 네, 한꺼번에 측정해야 해요.:-(
\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
나는 8개의 오류로 컴파일되고 및 의 광범위한 사용이 필요한 나만의 상자를 만들어 이를 측정해 보았습니다 \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}%
}
4개의 매개변수가 필요합니다. #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}
after 측정을 사용해야 \begin{document}
하지만 사용하기 전에 원하는 만큼 많은 상자를 측정할 수 있습니다.