抱歉,报纸头条标题:P
我有一篇文档,其中我滥用了 LaTeX 的控制结构,即\@for
。当然,其中一些循环的内容包含\par
图形中断。
我添加\usepackage{pstricks}
到我的文档中,得到了大量的Runaway argument
s。\tracingall
这里和那里,我将问题简化为这个 MWE:
\documentclass{article}
% \usepackage{pstricks}
\begin{document}
\makeatletter
\@for\el:=a,b,c\do{%
A long text with \el\par or not so long after all\dots\par}
\end{document}
一旦你取消注释,\usepackage{pstricks}
TeX 就会抛出一个错误,提示:Paragraph ended before \@fornoop was complete.
在第 90 行中pstricks.tex
发现:
% stolen from latex.ltx to make it TeX compatible
\def\@fornoop#1\@@#2#3{}
而 LaTeX 内核有:
\long\def\@fornoop#1\@@#2#3{}
为什么 PSTricks 没有定义\@fornoop
为\long
?这是故意的还是一个错误?如果是故意的,那为什么?
答案1
如果你看看 LaTeX 的文档来源,你会发现这\long
是一个“最近”的改变,而 pstricks 可能复制了一个旧版本,但还没有赶上
% \changes{v1.0g}{1995/08/16}{Made defs long}
% \changes{v1.0h}{2007/08/06}{Really make defs long}
% \begin{macrocode}
\long\def\@fornoop#1\@@#2#3{}