存储 \pdfpagewidth 的值

存储 \pdfpagewidth 的值

考虑这个例子(基于在文档中间更改纸张尺寸):

\documentclass{article}
\begin{document}
Normal page
\def\normalpdfpagewidth{\pdfpagewidth}

\eject \pdfpagewidth=17in
Wide page
\eject \pdfpagewidth=\normalpdfpagewidth
Normal page again
\end{document}

在此示例中,我尝试将正常值存储\pdfpagewidth在:

\def\normalpdfpagewidth{\pdfpagewidth}

并在后续页面中重新应用该值。

然而,这一招并没有奏效:

在此处输入图片描述

怎么了?

答案1

当你写\pdfpagewidth=17in\pdfpagewidth=\normalpdfpagewidth分配一个长度或者方面到另一长度或者方面。这是用于此类赋值的语法<lenA>=<lenB>=是可选的),并将的长度复制<lenB>到中<lenA>。如果<lenB>在赋值后发生变化,<lenA>仍保留原来的长度<lenB>

在您的例子中,您正在\def编写一些控制序列(或宏)来表示长度,如\def<csname>{<stuff>}。由于 TeX 不会自然地扩展其控制序列,直到它在纸上设置,所以 中的任何更改<stuff>都会随 一起进行<csname>。您要么想要长度的扩展版本(正如 muzimuzhi 所提到的

\edef\normalpdfpagewidth{\the\pdfpagewidth}

或者以更自然的方式分配长度:

\newlength{\normalpdfpagewidth}
\setlength{\normalpdfpagewidth}{\pdfpagewidth}

在此处输入图片描述

\documentclass{article}

\newlength{\normalpdfpagewidth}

\begin{document}

Normal page

\setlength{\normalpdfpagewidth}{\pdfpagewidth}

\clearpage \setlength{\pdfpagewidth}{17in}

Wide page

\clearpage \setlength{\pdfpagewidth}{\normalpdfpagewidth}

Normal page again

\end{document}

相关内容