페이지의 일부 측정

페이지의 일부 측정

내 페이지의 일부 높이를 측정하려고 합니다.

측정하려는 페이지 부분과 함께 전체 제목 페이지는 빨간색 윤곽선으로 표시되어 있으며 페이지를 컴파일하는 코드는 그 아래에 표시됩니다. 네, 한꺼번에 측정해야 해요.:-(

https://i.stack.imgur.com/kXhDH.png

\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, 이는 접착제(내 존재의 골칫거리)가 필요했습니다. 나는 이것이 잘못된 출력의 원인이라고 강력히 의심합니다. 그러나 내 주요 질문은 내 현재 접근 방식이 특히 번거로워 보인다는 것입니다. 이로 인해 내 접근 방식이 올바른 접근 방식이 아니라고 믿게 됩니다. 즉, 더 유연한(또는 원할 경우 "쉬운") 접근 방식이 존재한다고 믿게 됩니다. 가장 접근하기 쉽고 유연한 방식으로 문서에서 측정 및 사용하기 위해 이 상자를 어떻게 만들 수 있습니까?

http://i.imgur.com/o89CdlS.png?1

\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}하지만 사용하기 전에 원하는 만큼 많은 상자를 측정할 수 있습니다.

관련 정보