这应该很简单,但我猜不出需要的正确组合。应该\expandafter
的值\MyTokenGlobal
不是可以通过 更改\input
,但 的值\MyTokenLocal
应该会改变。以下代码生成:
期望的输出是:
笔记:
- ,是必要的
\begingroup
,\endgroup
这样我才可以选择哪些令牌通过 受到影响\input
。 - 使用 ,其中
xdef
有 会\edef
产生正确的结果,但我认为如果 的值在我使用它\TempTokenLocal
之后和之前发生变化,这可能会有问题\MyInput
。因此,请求不使用 的解决方案\xdef
。
代码:
\documentclass{article}
\newtoks{\MyTokenGlobal}
\newtoks{\MyTokenLocal}
%\usepackage{filecontents}% Commented to protect overwriting foo.tex
\begin{filecontents}{foo.tex}
\MyTokenGlobal={Global XXX}
\MyTokenLocal={Local}
\end{filecontents}
\MyTokenGlobal={Global}
\MyTokenLocal={Local XXX}
\newcommand*{\TempTokenLocal}{}% Temporary variable
\newcommand*{\MyInput}[1]{%
\begingroup%
\input{#1}%
\edef\TempTokenLocal{\the\MyTokenLocal}% Don't want to use \xdef here.
\global\MyTokenLocal={\TempTokenLocal}% <-- Need \expansion magic here I think.
\endgroup%
}%
\begin{document}
BEFORE:
MyTokens = ``\the\MyTokenGlobal/\the\MyTokenLocal"
\MyInput{foo}
AFTER:
MyTokens = ``\the\MyTokenGlobal/\the\MyTokenLocal"
\end{document}
答案1
\documentclass{article}
\newtoks{\MyTokenGlobal}
\newtoks{\MyTokenLocal}
%\usepackage{filecontents}% Commented to protect overwriting foo.tex
\begin{filecontents}{foo.tex}
\MyTokenGlobal={Global XXX}
\MyTokenLocal={Local}
\end{filecontents}
\MyTokenGlobal={Global}
\MyTokenLocal={Local XXX}
\newcommand*{\MyInput}[1]{%
\begingroup%
\input{#1}%
\global\MyTokenLocal=\expandafter{\the\MyTokenLocal}% <-- Need \expansion magic here I think.
\endgroup%
}%
\begin{document}
BEFORE:
MyTokens = ``\the\MyTokenGlobal/\the\MyTokenLocal"
\MyInput{foo}
AFTER:
MyTokens = ``\the\MyTokenGlobal/\the\MyTokenLocal"
\end{document}