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 tikzpicture
entorno, 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 ignore
frases 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 \everypar
para 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 \par
comandos 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}}
\everypar
debe revertirse \everypar{}
antes de ingresar deliberadamente al modo h. En las definiciones anteriores \paragraph
se hará esto implícitamente, pero la definición de \C
tiene 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.
\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}