No preâmbulo de um documento LaTeX, os comandos são processados, mas tudo o que resultaria em saída leva ao erro Missing \begin{document}
.
\documentclass{article}
This leads to an error.
\begin{document}
\end{document}
Num tikzpicture
ambiente, tudo o que não pode ser interpretado como um comando tikz é ignorado.
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
Something that is ignored
\node {A};
Something that is ignored
\end{tikzpicture}
\end{document}
Pergunta:Qual é a maneira mais fácil de obter um efeito semelhante, digamos, em um ambiente dedicado? A título de exemplo, o 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}
deve reclamar das Something to ignore
frases ou ignorá-las, enquanto processa o resto.
Responder1
De acordo com os comentários de Enrico, pode-se suprimir a saída mudando para o arquivo \nullfont
.
\newenvironment{IgnoreUnknownStuff}{\nullfont}{}
Isso gerará avisos como Missing character: There is no S in font nullfont!
no arquivo de log, que podem ser suprimidos configurando \tracinglostchars=0
. O material ignorado ainda pode resultar em espaço vertical e horizontal extra, provavelmente por causa da entrada e saída do hmode e da adição de espaços no final das linhas, para que o material ignorado não se torne completamente invisível.
Para emitir uma mensagem de erro para coisas ignoradas, como o formato LaTeX faz para caracteres no preâmbulo, pode-se usar \everypar
para gerar um erro ao entrar no hmode configurando \everypar{\ErrorUnknownStuff}
. É preciso ter certeza de que o TeX está em vmode sempre que caracteres ignorados forem esperados; observe os \par
comandos abaixo.
\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
deve ser revertido \everypar{}
antes que hmode seja inserido deliberadamente. Nas definições acima \paragraph
faremos isso implicitamente, mas a definição de \C
tem que fazê-lo explicitamente.
A imagem da esquerda é o resultado do código abaixo. Um erro é emitido para cada uma das quatro linhas de ignorar e reclamar no ambiente FlagUnknownStuff
. A imagem à direita é a saída ao remover todas as linhas a serem ignoradas; observe as diferenças no espaçamento.
\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}