
在使用 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
。