keyval 包中定义 key 的默认值

keyval 包中定义 key 的默认值

keya对于由以下定义的键

\define@key{fam}{keya}[\def\y#1{#1}]{\def\x##1{##1x#1}}

键值包装用途

\def\KV@def#1#2[#3]#4{%
  \begingroup\toks@{#3}%
  \xdef\@gtempa{\expandafter\noexpand\csname KV@#1@#2\endcsname{\the\toks@}}%
  \endgroup
  \expandafter\let\csname KV@#1@#2@default\endcsname\@gtempa
  \expandafter\def\csname KV@#1@#2\endcsname##1{#4}%
}

将默认值定义为

\KV@fam@keya@default{\KV@fam@keya{defau}}

这种定义默认值的方式称为标准格式键值包。诸如幻想VRB不遵守这个标准。键值包说这样的包虐待默认值格式。

我一直想知道为什么键值包选择以这种方式定义键的默认值,而不是像

\def\KV@fam@keya@default{defau}

如果没有 eTeX,这实际上应该是

\newtoks\toksa
\toksa{defau}
\edef\KV@fam@keya@default{\the\toksa}

或类似的东西。

答案1

“为什么”这个问题总是很难回答,尤其是在几十年后。我认为,我试图引入通用键值系统的原始激励示例包括“默认”操作不直接对应于将值传递给键的情况,调用单独的 ..@default 命令名意味着可以定义默认情况来执行任何操作。

相关内容