如何将布尔值传递给 tikz 选项键

如何将布尔值传递给 tikz 选项键

我很难理解如何正确使用 tikz 键并传递它们。假设我想用“填充”参数对两个 tikz 图片进行编码。有时我最终会写出类似下面示例的内容。但我不想使用,而是想将\ifmyfillA布尔值“传递”给 cmdB,有没有一种简单的一行方法可以做到这一点?这段代码看起来很乱,但我不知道正确的做法。

[编辑] 更改为真正的 MWE。现在 cmdB 正在绘制一个可以填充或不填充的矩形。cmdA 只是一个调用 cmdB 的包装器。目标是摆脱 \if … \else … \fi 块,只需用一行替换它即可。

\documentclass[]{article}
\usepackage{tikz}
\newif\ifmyfillA
\newif\ifmyfillB
\tikzset{
    cmdA/args/fill/.is if=myfillA,
    cmdA/args/fill=false,
    cmdA/.pic={
        \pgfqkeys{/tikz/cmdA/args}{#1}
        \ifmyfillA
            \pic[] at (0,0) {cmdB={fill}};
        \else
            \pic at (0,0) {cmdB={}};
        \fi
    },
    cmdB/args/fill/.is if=myfillB,
    cmdB/args/fill=false,
    cmdB/.pic={
        \pgfqkeys{/tikz/cmdB/args}{#1}
        \ifmyfillB
            \draw[fill] (-1,-1) rectangle (1,1);
        \else
            \draw[] (-1,-1) rectangle (1,1);
        \fi
    }
}
\begin{document}
\begin{tikzpicture}
    \pic[red] at (0,0) {cmdA};
    \pic[blue] at (3,0) {cmdA={fill}};
\end{tikzpicture}
\end{document}

它给:在此处输入图片描述

答案1

删除 \if… \else… \fi 块

  1. 我们cmdB/args/fill/.is choice限制键从一组预定义值中仅取一个值(在我们的例子中为:true 或 false)。

  2. cmdB/args/fill/true/.code={<some code>} “一些代码”每当键cmdB/args/fill获取值时执行true

  3. cmdB/args/fill/false/.code={<some code>} “一些代码” 每当键cmdB/args/fill获取值时执行false

  4. #1根据传递给 pic 的参数(“fill = true”或“fill = false”) cmdBcmdB/.pic={ \pgfqkeys{/tikz/cmdB/args}{#1}}将执行存储在(2.)或(.3)中的“一些代码”之一。

\documentclass[]{article}
\usepackage{tikz}
\tikzset{
    cmdA/.pic={
        \pgfkeyssetvalue{/tikz/cmdA/args}{#1} % /tikz/cdmA /args/fill=true if fill=true is passed as argument
            \pic[] at (0,0) {cmdB={#1}}; 
    },
    cmdB/args/fill/.is choice, %
    cmdB/args/fill/true/.code={\draw[fill] (-1,-1)rectangle(1,1);},
    cmdB/args/fill/false/.code={\draw[](-1,-1)rectangle(1,1);},
    cmdB/.pic={ \pgfqkeys{/tikz/cmdB/args}{#1}} 
}
\begin{document}
\begin{tikzpicture}
    \pic[red] at (0,0) {cmdA={fill=false}};
    \pic[blue] at (3,0) {cmdA={fill=true}};
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容