使用 \newcount 后我看到了意外的字符

使用 \newcount 后我看到了意外的字符

我的代码:

\documentclass[a4paper,12pt]{scrartcl}
\begin{document}

\newcount\tmpc
\def\modul#1#2{\tmpc=#1 \divide\tmpc by #2 \multiply \tmpc by #2 \multiply \tmpc by -1 \advance \tmpc by #1\relax \the\tmpc}
\def\addpages{%
\newcount\tmpb%
\tmpb=\modul{\thepage}{4}%
\multiply\tmpb by -1%
\advance\tmpb by 4%
\loop\ifnum\tmpb>0\advance\tmpb by-1 \vspace*{-5cm}\strut\newpage\repeat%
}
hello
\section[123\hbox to \textwidth{} {\rm\small 456}]{test}
\tableofcontents
\addpages
buggy
\addpages
test
\end{document}

我在第一页上看到“=1 1”。为什么?

答案1

解释很简单。让我们检查一下调用

\tmpb=\modul{\thepage}{4}

之后=,TeX 进行扩展以找到<number>,因此它\modul用替换文本替换,我们得到

\tmpb=\tmpc=\thepage \divide\tmpc by 4 \multiply \tmpc by 4 \multiply \tmpc by -1 \advance \tmpc by \thepage\relax \the\tmpc

你能看出问题<number>所在吗? 在那里,但它是\tmpc。因此 TeX 将 的当前值赋给\tmpc\tmpb继续。现在它找到=\thepage并排版它们,因为它不再执行赋值。只有在这之后它才会执行以下赋值。

你可能想看看页面是否以 4 为模?以解决您的问题。

不相关但很重要:永远不要\newcount在宏的替换文本中执行此操作(除非它是专门设计用于分配新计数器但只使用一次的宏),否则每次调用宏时都会浪费一个新的计数器寄存器。

相关内容