
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
사용하십시오 .