获取可选文本的高度

获取可选文本的高度

我想用乳胶创建一个封面,其中包含可选字段,以便其他字段根据可选字段是否存在来获取其位置。

\savebox我找到了使用和的技巧\ht\mybox,但当框中只有变量时,高度会不一致。高度不能根据变量是文本还是空进行很好的调整,如果是文本,则根据变量有一行或多行进行调整。

这是一个最小的工作示例。通常情况下,“非可选”文本应始终位于页面顶部,但当变量中的文本\texttoprew发生变化时,它会改变位置,而我原本希望负数\vspace能够补偿这些变化。知道为什么吗?

\documentclass[10pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[OT1]{fontenc}
\usepackage{fancyhdr}
\usepackage{geometry}

\makeatletter
\def\texttoprew#1{\def\@texttoprew{#1}}
\def\textbot#1{\def\@textbot{#1}}

\def\maketitle{
    \newsavebox{\titbox}
    \sbox{\titbox}{%
    \begin{minipage}{\textwidth}
    \@texttoprew
    \end{minipage}
    }
    \pagestyle{empty}
    \newgeometry{left=2cm, right=2cm, top=0in, bottom=0in}
    \parskip 0pt
    \parindent 0pt
    \if \@texttoprew\empty
    \else
        \usebox{\titbox}
        \vspace{-\ht\titbox}
    \fi

    \@textbot
}

\makeatother
% changing this variable (texttoprew) between empty {} and one or several line text
% changes the position of the text in textbot
\texttoprew{regreg\\ewfewf\\ewfewfwfe\\ewewfqwf\\ewfewf}
\textbot{Not Optional}

\begin{document}
\maketitle
\end{document}

我知道要让文本停留在页面顶部还有其他选择,我的问题出现在更复杂的情况下,这只是一个 MWE。

感谢您的帮助!

答案1

我猜到了原帖作者的意思,显然成功了。

我使用了[t]op 对齐,minipage这样\texttoprew文本就会一直向下增长。因为它在一个框中,所以我\strut在开头添加了一个,这样它的顶行定位就不会取决于第一行内容的高度(例如xxxvs )。XXX

但是,顶部对齐意味着minipage大多数框的垂直尺寸是深度而不是高度。所以我确保垂直位移是它们的组合,就像这样-\dimexpr\ht\titbox+\dp\titbox

\documentclass[10pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[OT1]{fontenc}
\usepackage{fancyhdr}
\usepackage{geometry}

\makeatletter
\def\texttoprew#1{\def\@texttoprew{#1}}
\def\textbot#1{\def\@textbot{#1}}

\def\maketitle{
    \newsavebox{\titbox}
    \sbox{\titbox}{%
    \begin{minipage}[t]{\textwidth}
    \strut\@texttoprew
    \end{minipage}
    }
    \pagestyle{empty}
    \newgeometry{left=2cm, right=2cm, top=0in, bottom=0in}
    \parskip 0pt
    \parindent 0pt
    \if \@texttoprew\empty
    \else
        \usebox{\titbox}
        \vspace{-\dimexpr\ht\titbox+\dp\titbox}
    \fi

    \@textbot
}

\makeatother
% changing this variable (texttoprew) between empty {} and one or several line text
% changes the position of the text in textbot
\texttoprew{regreg\\ewfewf\\ewfewfwfe\\ewewfqwf\\ewfewf}
\textbot{Not Optional}

\begin{document}
\maketitle
\end{document}

在此处输入图片描述

不确定为什么重叠的线条会有轻微差异。可以手动用 来\vspace补偿-\dimexpr.95\ht\titbox+\dp\titbox

相关内容