pgfkeys 的反向链接

pgfkeys 的反向链接

请问有没有什么方法可以避免无意中循环链接键\pgfkeys?下面是一个最小示例。这里我有keyb<->keya,这对 TeX 的容量造成了影响。

\documentclass{article}
\usepackage{pgfkeys}
\pgfkeys{/handlers/.normal code/.code={#1}}
\pgfkeys{%
    /my family/.is family,
    /my family/.cd,
    keya/.code = \def\keyavalue{#1}\pgfkeysalso{keyb=keybvalue2},
    keya/.default = {keyadefault},
    keyb/.style = {keya={#1}},
    %.normal code =\begingroup\loggingall,
    keyb = keybvalue1,
    %.normal code =\endgroup
}

\begin{document}
xx
\end{document}

上面描述了我最初问题的根源。下面是一个更明显但更棘手的问题:

\pgfkeys{%
    /my family/.is family,
    /my family/.cd,
    keya/.code = \pgfkeysalso{keya=keyavalue2},
    keya = keyavalue1
}

我相信在这种情况下有一种方法可以创建一个本机安全机制。要求没有密钥链接回自身就足够了。这就是键值包确实如此。我知道 TeX 和其他一些语言一样,在这种情况下还有很多不足之处。祝您玩得开心

\def\y{\x}
\def\x{\y}\x

任何按键设置宏的 Oberdiek 测试是它必须是无限可重入的。这是有目的的,但它确实会导致崩溃的可能性,如下所述。

在里面龙腾包中,最大嵌套层数或深度为,\ltxkeys@setkeys用于防止无限重入。此外,在该包中,样式键不能反向链接。

答案1

由于按键设置可能涉及任意代码,简而言之,没有办法防止所有可能的循环按键设置情况。您可以想象第一个按键调用代码执行一个宏,然后设置其他按键,然后这些按键又引用第一个按键,ETC。正如评论中所提到的,这是一个完全普遍的编程问题,并不局限于pgfkeysTeX。

相关内容