¿Cómo ignorar todo en el entorno del documento?

¿Cómo ignorar todo en el entorno del documento?

¡Sí, leíste el título correctamente!

quiero ignorartodoeso es entre \begin{document}y \end{document}cuando yo\input un archivo. Pensé que sería muy simple, solo usaelenviron paquete:

\RenewEnviron{document}{}

Pero resulta que no es tan fácil. El MWE a continuación produce los resultados correctos:

ingrese la descripción de la imagen aquí

pero sólo con los comentarios intactos. Si descomentas las líneas comentadas, terminarás con:

Error de LaTeX: \env@document@save@env indefinido

Curiosamente, ignorando este error se puede continuar y aún así obtener los resultados correctos. :-)

Notas:

  • Me doy cuenta de que puede haber otras cosas en el preámbulo, por lo que esta no es de ninguna manera una solución general. Para los lugares donde necesito esta funcionalidad, el preámbulosolotiene \documentclassy dos \input/ \usepackageque cargan todos los .styarchivos necesarios, por lo que será suficiente para mis necesidades.

Código:

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

Respuesta1

Este es un problema común conenviron, y la forma en que lo soluciono es definir aquellos comandos con los que tiene problemas:

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

Una forma rápida y sencilla de lograr lo que buscas es utilizar

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

que finaliza la lectura del \inputdocumento tan pronto como llega \begin{document}.

Respuesta2

Yo definiría (localmente)

\def\begin#1{\endinput}`

entonces el archivo se detiene en ese punto, o tal vez (realmente no entendí su caso de uso).

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

y deténgase incluso antes (pero si lo está haciendo, simplemente no ingresar el archivo sería más fácil)

información relacionada