Как игнорировать или отмечать вещи, выходящие за рамки сред и команд

Как игнорировать или отмечать вещи, выходящие за рамки сред и команд

В преамбуле документа 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}

Связанный контент