在玩 TeX 时,我遇到了一个奇怪的错误。这是我的输入文件:
\def\twice#1{#1#1}
\def\hello{Hello World.\par}
\twice{\hello} % works
\twice{Hello World. } % works
\twice{Hello World.\par} % doesn't work
\end
当我用编译它时pdftex
,出现此错误:
(./hello.tex
Runaway argument?
{Hello World.
! Paragraph ended before \twice was complete.
<to be read again>
\par
l.6 \twice{Hello World.\par
} % doesn't work
! ==> Fatal error occurred, no output PDF file produced!
如果我删除该行\twice{Hello World.\par}
,编译就会成功,并且我会得到预期的输出。
为什么能\twice{\hello}
工作但\twice{Hello World.\par}
不能工作?
\someMacro{someText\par}
更改为的一般技术是否\def\defText{someText\par} \def\someMacro{\defText}
总是有效?有没有其他方法可以帮助我不必为我想用作某些宏的参数的每个段落定义宏?
答案1
为了避免遗漏}
导致整个文档在搜索参数结尾时被吞没,默认情况下,\par
宏参数中不允许出现(或空行)。如果您想定义允许参数中有多个段落的命令,请使用\long\def
而不是\def
。