Ошибка «Абзац закончился до ...» в TeX

Ошибка «Абзац закончился до ...» в TeX

Играясь с 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.

Связанный контент