Erro "O parágrafo terminou antes de ..." no TeX

Erro "O parágrafo terminou antes de ..." no TeX

Enquanto brincava com o TeX, me deparei com um erro estranho. Este é o meu arquivo de entrada:

\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

Quando compilo isso com pdftex, recebo este erro:

(./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!

Se eu remover a linha \twice{Hello World.\par}, a compilação será bem-sucedida e obterei a saída esperada.

Por que \twice{\hello}funciona, mas \twice{Hello World.\par}não funciona?

A técnica geral de mudar \someMacro{someText\par}para \def\defText{someText\par} \def\someMacro{\defText}sempre funcionará? Existe alguma alternativa que possa me ajudar a não definir uma macro para cada parágrafo que desejo usar como parâmetro para alguma macro?

Responder1

Para evitar }que todo o seu documento seja engolido procurando pelo final de um argumento, por padrão \par(ou uma linha em branco) não é permitido em um argumento de macro. Se você quiser definir um comando que permita vários parágrafos no argumento, use \long\defem vez de \def.

informação relacionada