定义\pgfkeyssetvalue
如下(在pgfkeys.code.tex
文件中):
\long\def\pgfkeyssetvalue#1#2{%
\pgfkeys@temptoks{#2}\expandafter\edef\csname pgfk@#1\endcsname{\the\pgfkeys@temptoks}%
}
其中\pgfkeys@temptoks
是令牌列表。
为什么下面的代码(我使用\def
而不是\edef
)不等效?
\long\def\pgfkeyssetvalue#1#2{%
\expandafter\def\csname pgfk@#1\endcsname{#2}%
}
换句话说,为什么\pgfkeyssetvalue
要使用令牌列表?
答案1
通过使用中间 toks 寄存器,用户可以存储参数 ( #1, #2
),而无需手动将#
输入中的 翻倍。这意味着像 这样的操作将起作用。如果没有 toks-register 技巧,则需要\pgfkeyssetvalue{blub}{abc#1}
像 这样的输入。\pgfkeyssetvalue{blub}{abc##9##1}
\documentclass{article}
\begin{document}
\newtoks\mytoks
\mytoks{abc#1#2}
\edef\blub{\the\mytoks}
%\show\blub gives:
% > \blub=macro:
% ->abc##1##2.
%\def\blub{abc#9#1} %error
\end{document}