
Ja, Sie haben den Titel richtig gelesen!
Ich möchte ignorierenallesdas ist zwischen \begin{document}
und \end{document}
wenn ich \input
eine Datei. Ich dachte, das wäre sehr einfach, verwenden Sie einfachDas environ
Paket:
\RenewEnviron{document}{}
Aber es stellte sich heraus, dass es nicht so einfach war. Der folgende MWE liefert die richtigen Ergebnisse:
aber nur mit intakten Kommentaren. Wenn Sie die kommentierten Zeilen auskommentieren, erhalten Sie:
LaTeX-Fehler: \env@document@save@env undefiniert
Interessanterweise kann man, wenn man diesen Fehler ignoriert, weitermachen und trotzdem die richtigen Ergebnisse erhalten. :-)
Anmerkungen:
- Mir ist klar, dass in der Präambel noch andere Dinge stehen können, daher ist dies keinesfalls eine allgemeine Lösung. Für die Stellen, an denen ich diese Funktionalität benötige, die Präambelnurhat
\documentclass
und zwei\input
/\usepackage
, das alle.sty
benötigten Dateien lädt, also wird das für meine Bedürfnisse ausreichen.
Code:
\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}
Antwort1
Dies ist ein häufiges Problem beienviron
, und ich umgehe das Problem, indem ich die Befehle definiere, bei denen es ein Problem gibt:
\makeatletter
\providecommand{\env@document@save@env}{}% To keep environ happy
\providecommand{\env@document@process}{}%
\RenewEnviron{document}{}% Ignore everything within the "document" environment.
\makeatother
Eine schnelle und einfache Möglichkeit, Ihr Ziel zu erreichen, ist die Verwendung von
\renewcommand{\document}{\endgroup\endinput}
wodurch das Lesen des \input
Dokuments beendet wird, sobald es erreicht \begin{document}
.
Antwort2
Ich würde (lokal) definieren
\def\begin#1{\endinput}`
so dass die Datei an diesem Punkt stoppt, oder vielleicht (ich habe Ihren Anwendungsfall nicht wirklich verstanden
\def\documentclass[#1]#2{\endinput}
und hören Sie sogar noch früher auf (wenn Sie das tun, wäre es aber einfacher, die Datei nicht einzugeben)