Fehler "Absatz vor ... beendet" in TeX
Beim Herumspielen mit TeX bin ich auf einen seltsamen Fehler gestoßen. Dies ist meine Eingabedatei:
\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
Wenn ich dies mit kompiliere pdftex, wird folgende Fehlermeldung angezeigt:
(./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!
Wenn ich die Zeile entferne \twice{Hello World.\par}, ist die Kompilierung erfolgreich und ich erhalte die erwartete Ausgabe.
Warum funktioniert \twice{\hello}aber \twice{Hello World.\par}nicht?
Wird die allgemeine Technik des Wechsels \someMacro{someText\par}zu \def\defText{someText\par} \def\someMacro{\defText}immer Arbeit? Gibt es eine Alternative, die mir helfen kann, nicht für jeden Absatz, den ich als Parameter für ein Makro verwenden möchte, ein Makro zu definieren?
Antworten
Um zu vermeiden, }dass bei der Suche nach dem Ende eines Arguments das gesamte Dokument verschluckt wird, ist der Kaufstandard \par(oder eine Leerzeile) in einem Makroargument nicht zulässig. Wenn Sie einen Befehl definieren möchten, der mehrere Absätze im Argument zulässt, verwenden Sie \long\defstatt \def.