我的代码:
\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
在宏的替换文本中执行此操作(除非它是专门设计用于分配新计数器但只使用一次的宏),否则每次调用宏时都会浪费一个新的计数器寄存器。