ドキュメント環境内のすべてを無視するにはどうすればよいですか?

ドキュメント環境内のすべてを無視するにはどうすればよいですか?

はい、タイトルを正しく読みました!

無視したいすべてこれはファイル\begin{document}\end{document}の間です\input。これは非常に簡単だと思いました。そのenviron包み:

\RenewEnviron{document}{}

しかし、それはそれほど簡単ではありません。以下の MWE は正しい結果をもたらします。

ここに画像の説明を入力してください

ただし、コメントはそのままです。コメント行のコメントを解除すると、次のようになります。

LaTeX エラー: \env@document@save@env が未定義です

興味深いことに、このエラーを無視して続行すると、正しい結果が得られます。 :-)

ノート:

  • プリアンブルには他にもいろいろあるかもしれないので、これは決して一般的な解決策ではないことは承知しています。この機能が必要な場所では、プリアンブルはのみ必要なファイルをすべてロードする\documentclass2 つの\input/ があるので、これで私のニーズには十分です。\usepackage.sty

コード:

\documentclass{article}
\usepackage{environ}
\usepackage{standalone}

\newtoks{\MyToken}

\usepackage{filecontents}
\begin{filecontents*}{foo.tex}
    \documentclass{standalone}
    \usepackage{MyStandardPackages}

    \MyToken={foo}

%   \begin{document}
%       lots of text here
%
%       \SetSomeVarable{\SomeVar}{Some Value}
%       
%       \begin{SomeEnvironment}
%           lots more stuff here as well
%       \end{SomeEnvironment}
%   \end{document}
\end{filecontents*}

\MyToken={XXX}


\newcommand{\DisablePreamble}{%
    \renewcommand{\documentclass}[2][]{}%  remove def'n of \documentclass
    \renewcommand{\usepackage}[2][]{}%     ignore any \usepackage{}
%   \RenewEnviron{document}{}% Ignore everything within the "document" environment.
}%

\newcommand*{\ExtractMyToken}[1]{%
    \begingroup% What happens in the group stays in the group!
        \DisablePreamble%
        \input{#1}%
        \global\MyToken=\expandafter{\the\MyToken}%
    \endgroup%
}%

\begin{document}
MyToken=\the\MyToken

\ExtractMyToken{foo}

MyToken=\the\MyToken
\end{document}

答え1

これはよくある問題ですenvironこれを回避する方法は、問題のあるコマンドを定義することです。

\makeatletter
\providecommand{\env@document@save@env}{}% To keep environ happy
\providecommand{\env@document@process}{}%
\RenewEnviron{document}{}% Ignore everything within the "document" environment.
\makeatother

あなたが求めているものを達成するための手っ取り早い方法は、

\renewcommand{\document}{\endgroup\endinput}

\input文書が に到達するとすぐに読み取りを終了します\begin{document}

答え2

私は(ローカルに)定義する

\def\begin#1{\endinput}`

ファイルはその時点で停止します。(あなたのユースケースを本当に理解していませんでした

 \def\documentclass[#1]#2{\endinput}

さらに早く停止します(ただし、そうする場合は、ファイルを入力しない方が簡単です)

関連情報