请问有什么办法可以避免键值包裹在无限循环中爆炸,如以下简化的情况所暗示的那样?
\documentclass{article}
\usepackage{xkeyval}
\makeatletter
\define@key{fam}{key1}[key1-def]{\def\x##1{#1*##1}}
\define@cmdkey{fam}[store@]{key2}[key2-def]{\setkeys{fam}{key1=#1}}
%\define@key{fam}{key3}[key3-def]{\def\keyvalue{#1}}
\presetkeys{fam}{key2=val2}{}
\setkeys{fam}{key1}
\makeatother
\begin{document}
x
\end{document}
我得到“如果你真的需要更多容量,你可以请一位巫师来扩大我。”
答案1
我和 Hendri Adriaens(键值软件包)同意以下补丁确实解决了问题。我们还同意合作整合键值,龙腾和斯基瓦尔包装成键值对,如果我们有空闲时间的话。
\def\XKV@badsetkeys{%
\@latex@error{You can't nest \noexpand\setkeys in preset keys.
\MessageBreak That could cause an endless loop}\@ehd
}
\let\XKV@savsetkeys\setkeys
\def\XKV@usepresetkeys#1#2{%
\XKV@presettrue
\let\setkeys\XKV@badsetkeys
\XKV@for@eo\XKV@fams\XKV@tfam{%
\XKV@makehd\XKV@tfam
\XKV@ifundefined{XKV@\XKV@header#2}{}{%
\XKV@toks\expandafter\expandafter\expandafter
{\csname XKV@\XKV@header#2\endcsname}%
\@expandtwoargs\XKV@s@tkeys{\the\XKV@toks}%
{\XKV@naa\ifx\XKV@naa\@empty\else,\fi#1}%
}%
}%
\let\setkeys\XKV@savsetkeys
\XKV@presetfalse
}