Cómo ignorar o marcar cosas fuera de entornos y comandos

Cómo ignorar o marcar cosas fuera de entornos y comandos

En el preámbulo de un documento LaTeX, los comandos se procesan pero todo lo que daría como resultado un resultado conduce al error Missing \begin{document}.

\documentclass{article}
This leads to an error.
\begin{document}
\end{document}

En un tikzpictureentorno, se ignora todo lo que no pueda interpretarse como un comando tikz.

\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
  Something that is ignored
  \node {A};
  Something that is ignored
\end{tikzpicture}
\end{document}

Pregunta:¿Cuál es la forma más sencilla de lograr un efecto similar, digamos dentro de un entorno dedicado? Como ejemplo, el documento

\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}

debería quejarse de las Something to ignorefrases o ignorarlas, mientras procesa el resto.

Respuesta1

Según los comentarios de Enrico, se puede suprimir la salida cambiando al archivo \nullfont.

\newenvironment{IgnoreUnknownStuff}{\nullfont}{}

Esto generará advertencias como Missing character: There is no S in font nullfont!en el archivo de registro, que se pueden suprimir configurando \tracinglostchars=0. Las cosas ignoradas aún pueden resultar en espacio vertical y horizontal adicional, probablemente debido a entrar y salir del modo h y agregar espacios al final de las líneas, por lo que las cosas ignoradas no se vuelven completamente invisibles.

Para emitir un mensaje de error para cosas ignoradas como lo hace el formato LaTeX para los caracteres en el preámbulo, se puede usar \everyparpara generar un error al ingresar hmode configurando \everypar{\ErrorUnknownStuff}. Hay que asegurarse de que TeX esté en modo v siempre que se esperen caracteres ignorados; tenga en cuenta los \parcomandos a continuación.

\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}}

\everypardebe revertirse \everypar{}antes de ingresar deliberadamente al modo h. En las definiciones anteriores \paragraphse hará esto implícitamente, pero la definición de \Ctiene que hacerlo explícitamente.

La imagen de la izquierda es el resultado del código siguiente. Se emite un error para cada una de las cuatro líneas de ignorar y quejarse del entorno FlagUnknownStuff. La imagen de la derecha es el resultado al eliminar todas las líneas que se ignorarán; observe las diferencias en el espaciado.

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

\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}

información relacionada