问题如下:
\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}