如何使用 pgfkeys .try 处理程序来选择不存在的选项?

如何使用 pgfkeys .try 处理程序来选择不存在的选项?

问题如下:

\documentclass{article}
\usepackage{tikz}
\def\cmd{0}
\tikzset{/test/.is choice,
    /test/one/.code={\def\cmd{A}},
    /test/two/.code={\def\cmd{B}},
}
\begin{document}
\tikzset{/test=one} \cmd
\tikzset{/test/two} \cmd
\tikzset{/noexist/.try=a} % works
\tikzset{/test/.try=three} \cmd % does not work
\end{document}

我期望.try处理程序能够忽略键集(因为three没有选项);但我收到了错误

Package pgfkeys Error: Choice 'three' unknown in choice key '/test'.
I am going to ignore this key.

那么---我该如何尝试设置键的值is choice

答案1

一个执行依赖技巧是在选择值上使用/.try,而不是在键上使用:/test=three/.try。这将导致/test/three/.try因此有效。

重新定义处理程序/.unknown是一个更通用的解决方案。

\documentclass{article}
\usepackage{pgfkeys}

\def\cmd{0}
\pgfkeys{/test/.is choice,
    /test/one/.code={\def\cmd{A}},
    /test/two/.code={\def\cmd{B}},
}
\begin{document}
\pgfkeys{/test=one} \cmd
\pgfkeys{/test/two} \cmd
\pgfkeys{/noexist/.try=a} % works

\pgfkeys{/test=three/.try} \cmd % works

\makeatletter
\pgfkeys{/test/.unknown/.code=%
  \PackageWarning{pkg}
    {Unknown choice `\pgfkeys@was@choice' for key `\the\pgfkeys@pathtoks'}}
\makeatother
\pgfkeys{/test=three} \cmd % works too
\end{document}

答案2

发布自我回答以 a. 帮助他人 b. 看看是否有更优雅的解决方案!

问题在于/test 存在,所以.try基本上被忽略了。解决方案是使用以下内容:

\documentclass{article}
\usepackage{tikz}
\def\cmd{0}
\tikzset{/test/.is choice,
    /test/one/.code={\def\cmd{A}},
    /test/two/.code={\def\cmd{B}},
    % /test/three/.code={\def\cmd{C}},
}
\begin{document}
\tikzset{/test=one} \cmd
\tikzset{/test/two} \cmd
\tikzset{/noexist/.try=a} % works
\tikzset{/test/three/.try} \cmd %works
\end{document}

相关内容