我正在使用多部分形状创建双面节点,并希望根据用户提供的 (color) 参数更改左侧节点的背景颜色。更改默认参数\tikzstyle{package}[green]
也会更改两个输出 (节点 1+2) 中的背景颜色,但是由于某种原因我无法指定其他颜色。相反,文本颜色会发生变化 (节点 2)。
下面的示例演示了此行为:
\documentclass[a4paper]{article}
\usepackage{tikz}
\usetikzlibrary{shapes, shapes.geometric, shapes.multipart}
\tikzstyle{package}[green] = [
rectangle split,
rectangle split horizontal,
rectangle split parts=2,
rectangle split part fill = {
#1, gray
},
draw=black, very thick,
minimum height=2em,
inner sep=1cm,
every one node part/.style={
text=white,
text width=5cm
},
every two node part/.style={
text=white,
text width=\linewidth-7cm
}
]
\begin{document}
\begin{tikzpicture}
\node[package] {Node 1 \nodepart{two} Lorem Ipsum \\ dolor sit amet};
\end{tikzpicture}
\begin{tikzpicture}
\node[package][red] {Node 2 \nodepart{two} Lorem Ipsum \\ dolor sit amet};
\end{tikzpicture}
\end{document}
下图显示了输出。我想用红色而不是绿色填充第二个节点的左侧。
我理解,红色文本颜色来自绘制节点的方式(即red
实际上没有指定我的参数,而是标准参数\node
)。我也尝试改变表达方式,例如\node[package][fill=red]
或\node[package, red]
,但没有任何效果。所以我的问题是:如何tikzstyle
在绘制节点时向添加参数并传递参数?此外,是否可以定义多个参数?
提前致谢! :-)
答案1
有关密钥的所有内容都在 pgf 文档的“87 密钥管理”部分中有详细说明。但关于您的代码:
定义带有参数的样式后,使用style=parameter_value
来更改它。构造时,样式[package][red]
保留package
其默认值,并引入red
作为另一个参数,而不是用于填充。
如果需要多个参数,可以使用style_name/.style 2 args
(参见以下代码)或style_name/.style n args={arguments number}{style definition}
。还有另一个选项允许特定的构造,但我不知道如何使用它。
顺便说一下,我已经将旧改为tikzstyle
(tikzset
见应该使用 \tikzset 还是 \tikzstyle 来定义 TikZ 样式?)
\documentclass[a4paper]{article}
\usepackage{tikz}
\usetikzlibrary{shapes, shapes.geometric, shapes.multipart}
\tikzset{
package/.style 2 args = {
rectangle split, rectangle split horizontal,
rectangle split parts=2,
rectangle split part fill = {
#1, #2
},
draw=black, very thick,
minimum height=2em,
inner sep=1cm,
every one node part/.style={
text=white,
text width=5cm
},
every two node part/.style={
text=white,
text width=\linewidth-7cm
}
},
package/.default={green}{gray}
}
\begin{document}
\begin{tikzpicture}
\node[package] {Node 1 \nodepart{two} Lorem Ipsum \\ dolor sit amet};
\end{tikzpicture}
\begin{tikzpicture}
\node[package={red}{blue!20!black}] {Node 2 \nodepart{two} Lorem Ipsum \\ dolor sit amet};
\end{tikzpicture}
\end{document}