为什么 \pgfkeyssetvalue 使用标记列表?

为什么 \pgfkeyssetvalue 使用标记列表?

定义\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}

相关内容