我很难理解如何正确使用 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 块
我们
cmdB/args/fill/.is choice
限制键从一组预定义值中仅取一个值(在我们的例子中为:true 或 false)。和
cmdB/args/fill/true/.code={<some code>}
“一些代码”每当键cmdB/args/fill
获取值时执行true
和
cmdB/args/fill/false/.code={<some code>}
“一些代码” 每当键cmdB/args/fill
获取值时执行false
#1
根据传递给 pic 的参数(“fill = true”或“fill = false”)cmdB
,cmdB/.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}