Como ignorar ou sinalizar coisas fora de ambientes e comandos

Como ignorar ou sinalizar coisas fora de ambientes e comandos

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 tikzpictureambiente, 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 ignorefrases 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 \everyparpara 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 \parcomandos 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}}

\everypardeve ser revertido \everypar{}antes que hmode seja inserido deliberadamente. Nas definições acima \paragraphfaremos isso implicitamente, mas a definição de \Ctem 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.

insira a descrição da imagem aqui insira a descrição da imagem aqui

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

informação relacionada