В преамбуле документа LaTeX команды обрабатываются, но все, что может привести к выводу, приводит к ошибке Missing \begin{document}
.
\documentclass{article}
This leads to an error.
\begin{document}
\end{document}
В tikzpicture
среде все, что не может быть интерпретировано как команда tikz, игнорируется.
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
Something that is ignored
\node {A};
Something that is ignored
\end{tikzpicture}
\end{document}
Вопрос:Как проще всего добиться подобного эффекта, скажем, в рамках выделенной среды? В качестве примера можно привести документ
\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}
следует либо жаловаться на Something to ignore
предложения, либо игнорировать их, обдумывая остальное.
решение1
Согласно комментариям Энрико, можно отключить вывод, переключившись на \nullfont
.
\newenvironment{IgnoreUnknownStuff}{\nullfont}{}
Это приведет к появлению предупреждений, как Missing character: There is no S in font nullfont!
в файле журнала, которые можно отключить, установив \tracinglostchars=0
. Игнорируемое содержимое может по-прежнему приводить к появлению дополнительного вертикального и горизонтального пространства, вероятно, из-за входа и выхода из hmode и добавления пробелов в конце строк, поэтому игнорируемое содержимое не становится полностью невидимым.
Чтобы выдать сообщение об ошибке для игнорируемых вещей, как это делает формат LaTeX для символов в преамбуле, можно использовать \everypar
для генерации ошибки при входе в hmode, установив \everypar{\ErrorUnknownStuff}
. Необходимо убедиться, что TeX находится в vmode всякий раз, когда ожидаются игнорируемые символы; обратите внимание на \par
команды ниже.
\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
должен быть возвращен \everypar{}
до того, как hmode будет введен намеренно. В определениях выше \paragraph
это будет сделано неявно, но определение \C
должно сделать это явно.
Левое изображение — результат кода ниже. Ошибка выдается для каждой из четырех строк ignore-and-complain в среде FlagUnknownStuff
. Изображение справа — это вывод при удалении всех строк, которые нужно игнорировать; обратите внимание на разницу в интервалах.
\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}