如何让带有子前导的独立程序尊重群组?

如何让带有子前导的独立程序尊重群组?

我正在尝试将 subpreambles 选项与独立包一起使用。我的主要文件是:

\documentclass[subpreambles]{standalone}
\usepackage{standalone}

\newtoks{\MyToken}
\MyToken={MainFile}

\begin{document}
Before Input: MyToken = \the\MyToken  \par
\input{MySubfile.tex} \par
After Input: MyToken = \the\MyToken
\end{document}

MySubfile.tex 内容为:

\documentclass{standalone}
\usepackage{standalone}

\ifdefined\MyToken% prevent redfintion.
\else%
    \newtoks{\MyToken}%
\fi%

\MyToken={Subfile}

\begin{document}
In sub file: MyToken = \the\MyToken
\end{document}

输出结果如下:

输入之前:MyToken = Subfile
在子文件中:MyToken = Subfile
输入之后:MyToken = Subfile

但我想要的是这个:

输入前:MyToken = MainFile
在子文件中:MyToken = Subfile
输入后:MyToken = MainFile

我尝试在输入周围使用 \begingroup \endgroup,但没有成功。我不想在独立文件和主文件中使用不同的标记,因为当前的主文件最终也会成为子文件。我不会被 \newtoks 所困扰,任何可以用来实现这一点的方法都可以。

我也可以接受最后一行打印

输入:MyToken = Subfile

这可能吗?

答案1

选项subpreamblestandalone 包裹(你出于某种原因在类上设置了它,这同样有效,因为类忽略了未知选项并将所有选项传递给所有包)将子前言(即子文件的前言)复制到主文件的前言中。前言被写入辅助文件并在将来的运行中再次读入在序言中,当然不是在读取子文件时。

因此,\MyToken={Subfile}在主序言中执行,而不是在中执行\input。您必须将其移到\begin{document}子文件中的后面才能使其按您希望的方式工作。

相关内容