我在我的文档中声明了几种长度:\bottomMargin
\topMargin
和\initialPaperHeight
。
现在,我正在做这件事
\AtEndDocument{%
\global\paperheight\dimexpr\pagetotal + \bottomMargin + \topMargin \relax
}
\paperheight
但是,我不想设置为,而是\pagetotal + \bottomMargin + \topMargin
想设置\paperheight
为该值和 的最小值\initialPaperHeight
。在伪代码中,我想这样做
\paperheight = min(\initialPaperHeight, \pagetotal + \bottomMargin + \topMargin)
那么,我的问题是:我该怎么办?
答案1
\AtEndDocument{%
\ifdim\dimexpr \pagetotal + \bottomMargin + \topMargin < \initialPaperHeight \relax
\global\paperheight\dimexpr \pagetotal + \bottomMargin + \topMargin
\else
\global\paperheight\initialPaperHeight
\fi
}
然而,在我看来,您正试图在这里做一些您不需要的复杂的事情。
答案2
LaTeX3 也有一个这样的功能:
\usepackage{expl3}
\ExplSyntaxOn
\global \paperheight = \dim_min:nn { \initialPaperHeight } { \pagetotal + \bottomMargin + \topMargin }
\ExplSyntaxOff
(由于您没有提供 MWE,因此未进行测试……)
答案3
我知道这是一个老问题,但我找到了另一个解决方案这里,它是 LaTeX 风格的,而不是 TeX 风格的。
导入ifthen
包,然后
% Return in #3 the minimum of the two lengths #1 and #2
\newcommand{\MinLength}[3]{%
\ifthenelse{\lengthtest{\the#1<\the#2}}
{\setlength{#3}{#1}}
{\setlength{#3}{#2}}}
% Return in #3 the maximum of the two lengths #1 and #2
\newcommand{\MaxLength}[3]{%
\ifthenelse{\lengthtest{\the#1>\the#2}}
{\setlength{#3}{#1}}
{\setlength{#3}{#2}}}
\MinLength
并\MaxLength
以三个长度作为参数,并将第三个参数设置为前两个参数中的最小值或最大值。上面的链接中有一个完整的示例。