
¡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:
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
\documentclass
y dos\input
/\usepackage
que cargan todos los.sty
archivos 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 \input
documento 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)