在 \pgfpicture 的定义中,为什么 \pgf@picmaxx 和 \pgf@picmaxy 是负数,并且这个 16000pt 值到底是什么?

在 \pgfpicture 的定义中,为什么 \pgf@picmaxx 和 \pgf@picmaxy 是负数,并且这个 16000pt 值到底是什么?

宏的定义pgfpicture来自pgfcorescopes.code.tex

\def\pgfpicture{%
  \begingroup%
    \pgfpicturetrue%
    \global\advance\pgf@picture@serial@count by1\relax%
    \edef\pgfpictureid{pgfid\the\pgf@picture@serial@count}%
    \let\pgf@nodecallback=\pgfutil@gobble%
    \pgf@picmaxx=-16000pt\relax%
    \pgf@picminx=16000pt\relax%
    \pgf@picmaxy=-16000pt\relax%
    \pgf@picminy=16000pt\relax%
    \pgf@relevantforpicturesizetrue%
    \pgf@resetpathsizes%
    \pgfutil@ifnextchar\bgroup\pgf@oldpicture\pgf@picture}

这个值代表什么16000pt,为什么使用\pgf@picmaxx\pgf@picmaxy负号?

答案1

值 16000 pt 接近 TeX 允许的最大尺寸,2¹⁴ pt = 16384 pt(实际上是 16384 pt − 1 sp = 16383.99998 pt),因此据 TeX 所知,您可以将其算作(接近)无穷大。

在编程中,当尝试逐步确定一组值的最小值或最大值时,通常以 −∞ 开始表示最大值,以 +∞ 开始表示最小值。这是因为,如果您以(例如)零开始表示最大值,而您的数字恰好为负数,那么您将得到错误的结果。从 −∞(或尽可能接近)开始,您肯定可以知道您的数字大于该值,反之亦然。

如果您使用的语言具有max您可以执行的功能curr_max = max(curr_max,<any value>),并且如果curr_max是−∞,那么无论<any value>发生什么都会给出正确的答案。

由于 TeX 没有内置max函数,因此 PGF 具有以下功能:

\ifdim \pgf@x>\pgf@picmaxx
  \pgf@picmaxx=\pgf@x
\fi

这大致就是max函数要做的事情。

相关内容