如何将一个长度设置为另外两个长度的最小值?

如何将一个长度设置为另外两个长度的最小值?

我在我的文档中声明了几种长度:\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以三个长度作为参数,并将第三个参数设置为前两个参数中的最小值或最大值。上面的链接中有一个完整的示例。

相关内容