In der Präambel eines LaTeX-Dokuments werden Befehle verarbeitet, aber alles, was zu einer Ausgabe führen würde, führt zum Fehler Missing \begin{document}
.
\documentclass{article}
This leads to an error.
\begin{document}
\end{document}
In einer tikzpicture
Umgebung wird alles ignoriert, was nicht als Tikz-Befehl interpretiert werden kann.
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
Something that is ignored
\node {A};
Something that is ignored
\end{tikzpicture}
\end{document}
Frage:Wie kann man am einfachsten einen ähnlichen Effekt erzielen, beispielsweise in einer dedizierten Umgebung? Das Dokument
\documentclass{article}
\newenvironment{IgnoreOrFlagUnknownStuff}{}{}% ??? to be defined
\newenvironment{A}{\paragraph{A:}}{}
\newcommand\B[1]{\paragraph{B:} #1\par}
\begin{document}
\begin{IgnoreOrFlagUnknownStuff}
Something to ignore or to complain about.
\begin{A}
This is OK.
\end{A}
Something to ignore or to complain about.
\B{This is also OK.}
Something to ignore or to complain about.
\end{IgnoreOrFlagUnknownStuff}
\end{document}
sollte sich entweder über die Something to ignore
Sätze beschweren oder sie ignorieren, während der Rest verarbeitet wird.
Antwort1
Laut Enricos Ausführungen kann man die Ausgabe durch Umschalten auf unterdrücken \nullfont
.
\newenvironment{IgnoreUnknownStuff}{\nullfont}{}
Dies erzeugt Warnungen wie Missing character: There is no S in font nullfont!
in der Protokolldatei, die durch die Einstellung unterdrückt werden können \tracinglostchars=0
. Die ignorierten Dinge können dennoch zu zusätzlichem vertikalen und horizontalen Platz führen, wahrscheinlich aufgrund des Aufrufens und Verlassens des Hmode und des Hinzufügens von Leerzeichen am Ende der Zeilen, sodass die ignorierten Dinge nicht vollständig unsichtbar werden.
Um eine Fehlermeldung für ignorierte Dinge auszugeben, wie es das LaTeX-Format für Zeichen in der Präambel tut, kann man \everypar
durch Setzen von einen Fehler beim Eintritt in den hmode erzeugen \everypar{\ErrorUnknownStuff}
. Man muss sicherstellen, dass TeX im vmode ist, wenn ignorierte Zeichen zu erwarten sind; beachten Sie die \par
folgenden Befehle.
\newenvironment{FlagUnknownStuff}%
{\everypar{\ErrorUnknownStuff}%
\nullfont
\par
\tracinglostchars=0
}{}
\newcommand\ErrorUnknownStuff{\GenericError{}{Unknown Stuff}{}{}}
% Commands and environments that may appear in the environment
\newenvironment{A}{\normalfont\paragraph{A:}}{\par}
\newcommand\B[1]{{\normalfont\paragraph{B:} #1\par}}
\newcommand\C[1]{{\everypar{}\normalfont #1\par}}
\everypar
muss von rückgängig gemacht werden, \everypar{}
bevor der hmode absichtlich aufgerufen wird. In den obigen Definitionen \paragraph
geschieht dies implizit, aber die Definition von \C
muss dies explizit tun.
Das linke Bild ist das Ergebnis des untenstehenden Codes. Für jede der vier Ignorier- und Beschwerdezeilen in der Umgebung wird ein Fehler ausgegeben FlagUnknownStuff
. Das Bild rechts ist die Ausgabe beim Entfernen aller zu ignorierenden Zeilen. Beachten Sie die Unterschiede im Abstand.
\documentclass{article}
\newenvironment{IgnoreUnknownStuff}{\nullfont}{}
\newenvironment{FlagUnknownStuff}%
{\everypar{\ErrorUnknownStuff}%
\nullfont
\par
\tracinglostchars=0
}{}
\newcommand\ErrorUnknownStuff{\GenericError{}{Unknown Stuff}{}{}}
% Commands and environments that may appear in the environment
\newenvironment{A}{\normalfont\paragraph{A:}}{\par}
\newcommand\B[1]{{\normalfont\paragraph{B:} #1\par}}
\newcommand\C[1]{{\everypar{}\normalfont #1\par}}
\begin{document}
Before.
\begin{IgnoreUnknownStuff}
Something to ignore.
\begin{A}
This is OK.
\end{A}
Something to ignore.
\B{This is also OK.}%
Something to ignore.
\C{This also.}
Something to ignore.
\end{IgnoreUnknownStuff}
In-between.
\begin{FlagUnknownStuff}
Something to ignore and to complain about.
\begin{A}
This is OK.
\end{A}
Something to ignore and to complain about.
\B{This is also OK.}
Something to ignore and to complain about.
\C{This also.}
Something to ignore and to complain about.
\end{FlagUnknownStuff}
After.
\end{document}