如何检查 pgfkey 是否定义了 .code?

如何检查 pgfkey 是否定义了 .code?

我天真地写了这个东西:

\documentclass[]{article}
\usepackage{tikz}
\pgfqkeys{/pgf}{test/.code={TEST}}

\begin{document}

\pgfkeysifdefined{/pgf/test}{TRUE}{FALSE}

\pgfkeysifdefined{/pgf/test/.code}{TRUE}{FALSE}

\pgfkeys{/pgf/test}

\end{document}

...并且我假设两个测试中至少有一个会给出正确答案,但是我:

在此处输入图片描述

答案1

通常,\pgfkeys{<key path>/.code=...}内部定义两个键<full key path>/.@cmd<full key path>/.@body,因此您可以使用

\documentclass{article}
\usepackage{tikz}
\pgfqkeys{/pgf}{test/.code={TEST}}

\begin{document}
\pgfkeysifdefined{/pgf/test/.@cmd}{TRUE}{FALSE}  % output "TRUE"

\pgfkeysifdefined{/pgf/test/.@body}{TRUE}{FALSE} % output "TRUE"

\pgfkeys{/pgf/test}

\end{document}

<key>/.@cmdpgf 手册第 88.3.3 节中有一个简短的介绍。

更多说明

  • \pgfkeysifdefined{<key>}{<true>}{<false>}测试内部命令是否\pgfk@<key>定义,它不能用于测试<key>处理程序是否定义.code
  • 一方面,键定义为一些处理程序无法区分。例如,.code.ecode
  • 另一方面,由其他一些(种类)处理程序定义的键是可以区分的。例如,.(e)code和定义的键.(e)code 2 args可以通过其对应命令的参数指定部分来区分\pgfk@<key>/.code

相关内容