如何向 \tikzstyle 传递参数?

如何向 \tikzstyle 传递参数?

我正在使用多部分形状创建双面节点,并希望根据用户提供的 (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}。还有另一个选项允许特定的构造,但我不知道如何使用它。

顺便说一下,我已经将旧改为tikzstyletikzset应该使用 \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}

在此处输入图片描述

相关内容