環境やコマンドの外部のものを無視またはフラグ付けする方法

環境やコマンドの外部のものを無視またはフラグ付けする方法

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

Enrico のコメントによると、 に切り替えることで出力を抑制できます\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}}

\everyparhmode に入る前に、意図的に によって元に戻す必要があります\everypar{}。上記の定義では、\paragraph暗黙的にこれを行いますが、 の定義では、\C明示的に行う必要があります。

左の画像は、以下のコードの結果です。環境内の 4 つの ignore-and-complain-lines のそれぞれに対してエラーが発行されます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}

関連情報