我正在尝试使用\scantokens
,但显然我不太理解它。我想将一些序列分解成寄存器\S
:
\let\ea\expandafter
\newtoks\S
\ea\S\ea{\detokenize{\textbf{f}}}
对其进行操作(省略),并重新标记。我的第一次尝试
\ea\def\ea\T\ea{\ea\scantokens\ea{\the\S}}
收益率\T=macro: \scantokens {\textbf {f}}.
。这没错,但也许我们可以\scantokens
得到\T
得到。我认为,再扩大一次应该可以做到这一点,但显然不行。到目前为止,还有写的内容这里关于对\everyeof{\noexpand}
我没有帮助:
\documentclass{article}
\let\ea\expandafter
\newtoks\S
\ea\S\ea{\detokenize{\textbf{f}}}
\ea\def\ea\T\ea{\ea\scantokens\ea{\the\S}}%
\show\T %\T=macro: \scantokens {\textbf {f}}.
%Runaway definition?
%->\textbf {f}
% ! File ended while scanning definition of \R.
\ea\ea\ea\def\ea\ea\ea\R\ea\ea\ea{\T}
%Runaway definition?
%->\textbf {f} \noexpand
%! File ended while scanning definition of \R.
\everyeof{\noexpand}%
\ea\ea\ea\def\ea\ea\ea\R\ea\ea\ea{\T}
\show\R
\everyeof{}
\begin{document}
\R
\end{document}
答案1
答案2
这种\noexpand
方法需要\edef
-\scantokens
很“棘手”(基本上是有缺陷的)。因此,类似于:
\everyeof{\noexpand}%
\edef\T{\noexpand\scantokens{\noexpand\unexpanded{\detokenize{\textbf{f}}}}}
\edef\R{\T}
\show\R
\everyeof{}
\documentclass{article}
\begin{document}
\R
\end{document}
由于重新扫描的令牌内可能包含不可扩展的内容,因此我将它们全部包装在内\unexpanded
。
(我稍微缩短了设置,以使其在我看来更清晰)。