抱歉大家……又出现了“缺失数字,视为零”的错误。我通常都能找到并修复它,但这次我需要帮助。
我有一个宏 \twoup,用于在 A4 纸上生成由两页 A5 页面组成的输出。它工作正常。
我现在正尝试编写一个宏 \notatable(即,能够被标注……与表格无关),其目的是在 A4 纸张的左侧输出单个 A5 页面,右侧留空用于注释。它有点起作用。运行 TeX 时出现错误,但我仍然得到我想要的输出……但在第 1 页的脚注下方有一条细小的垂直线。
每页的错误似乎都标记在下一页第一个完整段落的开头。
有什么建议吗?实施方法很简单,在文本开头加上 \notatable。代码如下(包括 \twoup 代码供参考,尽管它没有造成问题),以及输出示例 - 注意页码左下方的垂直线。
\newcount\finalpageno \newtoks\normalfootline
\def\nomorepagenumbers{\finalpageno=\pageno \normalfootline=\footline
\footline={\ifnum\pageno>\finalpageno \else \the\normalfootline \fi}}
\newbox\leftpage
\def\twoup{\special{papersize=297mm,210mm}%
\hoffset-6truemm\voffset-7.5truemm\hsize=120truemm\vsize=170truemm%
\let\lr=L
\output={\if L\lr \global\setbox\leftpage=\pagebox
\global\let\lr=R\advancepageno
\else \doubleformat \global\let\lr=L\advancepageno \fi
\ifnum \outputpenalty>-2000\else \dosupereject \fi}%
\def\doubleformat{\setbox1=\hbox to26truecm{\box\leftpage\kern2truecm%
\pagebox\hss}\shipout\box1}%
\def\pagebox{\leftline{\vbox{\makeheadline\pagebody\makefootline}}}}
%
\def\notatable{\special{papersize=297mm,210mm}% like \twoup but leaves right page blank for notes
\hoffset-6truemm\voffset-7.5truemm\hsize=120truemm\vsize=170truemm%
\output={\doubleformat \advancepageno \ifnum \outputpenalty>-2000\else \dosupereject \fi}%
\def\doubleformat{\setbox1=\hbox to26truecm{\box\pagebox\kern14truecm\hss}\shipout\box1}%
\def\pagebox{\leftline{\vbox{\makeheadline\pagebody\makefootline}}}}
答案1
您\box\pagebox
第一次尝试编写代码时,您的代码\pagebox
定义为
\def\pagebox{\leftline{\vbox{\makeheadline\pagebody\makefootline}}}
\leftline
在 Plain TeX 中由 定义。\hbox to\hsize{#1\hss}
宏扩展为
\box\hbox to\hsize{...}
但该原语\box
仅期望数字作为其参数,没有\hbox
。因此出现“缺少数字”错误。
如果你想把盒子构造成这样\hbox to\hsize...
,那么你可以直接把它放进去
\def\doubleformat{\setbox1=\hbox to26truecm{\pagebox\kern14truecm\hss}\shipout\box1}%
\box
也就是说,在 之前没有原语\pagebox
。此外,您的\doubleformat
过于复杂。它只是简单地输出\pagebox
。它被封装到 中是无关紧要的,\hbox to26cm
因为我们看不到 处理的框的正确边界\shipout
。更简单的定义具有相同的功能:
\def\doubleformat{\shipout\pagebox}%
您的代码在更多地方过于复杂,但我不对此进行评论,因为这不是您的问题的主题。
答案2
我认为我已经解决了这个问题。我会留下问题和答案,以防其他人遇到。也许更了解这些事情的人可以确认(或不确认)我的解释。这是我的新代码。
\def\notatable{\special{papersize=297mm,210mm}% like \twoup but leaves right page blank for notes
\hoffset-6truemm\voffset-7.5truemm\hsize=120truemm\vsize=170truemm%
\output={\global\setbox\leftpage=\pagebox \doubleformat \advancepageno \ifnum \outputpenalty>-2000\else \dosupereject \fi}%
\def\doubleformat{\setbox1=\hbox to26truecm{\box\leftpage\kern14truecm\hss}\shipout\box1}%
\def\pagebox{\leftline{\vbox{\makeheadline\pagebody\makefootline}}}}
请注意我已添加\global\setbox\leftpage=\pagebox
和\box\leftpage
。
我猜这意味着当我在之前的代码中设置 \pagebox 时,它没有传达给“外界”。我猜它产生了一个“缺少数字”错误,因为我的 \box 后面跟着一些无法识别的东西,而这些东西被解析为 \box 后面没有数字。