Como ignorar tudo no ambiente de documentos?

Como ignorar tudo no ambiente de documentos?

Sim, você leu o título corretamente!

eu quero ignorartudoisso é entre \begin{document}e \end{document}quando eu \inputum arquivo. Achei que seria muito simples, basta usaro environpacote:

\RenewEnviron{document}{}

Mas acabou não sendo tão fácil. O MWE abaixo produz os resultados corretos:

insira a descrição da imagem aqui

mas apenas com os comentários intactos. Se você descomentar as linhas comentadas, terminará com:

Erro LaTeX: \env@document@save@env indefinido

Curiosamente, ignorando esse erro, é possível continuar além disso e ainda obter os resultados corretos. :-)

Notas:

  • Sei que pode haver outras coisas no preâmbulo, portanto esta não é de forma alguma uma solução geral. Para os locais onde preciso desta funcionalidade, o preâmbuloapenashas \documentclasse dois \input/ \usepackageque carregam todos os .styarquivos necessários, então isso será suficiente para minhas necessidades.

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}

Responder1

Este é um problema comum comenviron, e a maneira de contornar isso é definir os comandos com os quais há problemas:

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

Uma maneira rápida e suja de conseguir o que você procura é usar

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

que encerra a leitura do \inputdocumento assim que chega \begin{document}.

Responder2

Eu definiria (localmente)

\def\begin#1{\endinput}`

então o arquivo para nesse ponto, ou talvez (eu realmente não entendi seu caso de uso

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

e pare ainda mais cedo (mas se você estiver fazendo isso, seria mais fácil não inserir o arquivo)

informação relacionada