
はい、タイトルを正しく読みました!
無視したいすべてこれはファイル\begin{document}
と\end{document}
の間です\input
。これは非常に簡単だと思いました。そのenviron
包み:
\RenewEnviron{document}{}
しかし、それはそれほど簡単ではありません。以下の MWE は正しい結果をもたらします。
ただし、コメントはそのままです。コメント行のコメントを解除すると、次のようになります。
LaTeX エラー: \env@document@save@env が未定義です
興味深いことに、このエラーを無視して続行すると、正しい結果が得られます。 :-)
ノート:
- プリアンブルには他にもいろいろあるかもしれないので、これは決して一般的な解決策ではないことは承知しています。この機能が必要な場所では、プリアンブルはのみ必要なファイルをすべてロードする
\documentclass
2 つの\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}
さらに早く停止します(ただし、そうする場合は、ファイルを入力しない方が簡単です)