Error "El párrafo terminó antes de ..." en TeX

Error "El párrafo terminó antes de ..." en TeX

Mientras jugaba con TeX, encontré un error extraño. Este es mi archivo 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

Cuando compilo esto con pdftex, aparece este error:

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

Si elimino la línea \twice{Hello World.\par}, la compilación se realiza correctamente y obtengo el resultado esperado.

¿Por qué \twice{\hello}funciona pero \twice{Hello World.\par}no funciona?

¿Funcionará la técnica general de cambiar \someMacro{someText\par}para \def\defText{someText\par} \def\someMacro{\defText}siempre? ¿Existe alguna alternativa que me pueda ayudar a no definir una macro para cada párrafo que quiero usar como parámetro de alguna macro?

Respuesta1

Para evitar que una falta }provoque que se trague todo el documento buscando el final de un argumento, de forma predeterminada \par(o una línea en blanco) no se permite en un argumento de macro. Si desea definir un comando que permita varios párrafos en el argumento, utilice \long\defen lugar de \def.

información relacionada