如何定义特殊的 tikz 节点?

如何定义特殊的 tikz 节点?

我想定义一个特殊的 tikz 节点,我将以这种方式使用它:

\specialNode[name=mynode, label=mylabel, otherTikzOptions...] (node_name) at (some_coordinate);

并转换为:

\node[circle, fill=red, color=black, label=mynode, label=mylabel, otherTikzOptions...] (node_name) at (some_coordinate) {};

(双重标签不是一个错误,我希望这个配置有语义选项)。

我试过了,pgfkeys但我真的不知道如何传递otherTikzOptions 选项并获取可选at (some_coordinate)部分。

使用 LaTeX 可以实现这种事情吗?

答案1

我猜你想要这样的东西?我没有使用键,name因为它已经在 TikZ 中用于其他用途。相反,示例中的样式被调用,name label因为它看起来应该生成某种标签。

标签

此外,您不需要单独的命令\specialnode来使某些节点看起来相同。只需定义一个新样式special node或类似样式,其中包含所需的样式。

当然,如果您希望所有具有的节点看起来都一样,您也可以将该special node样式添加到样式中。只需定义name labelname label

\tikzset{name label/.style={
    special node, label={[fill=green]left:#1}
}}

完整代码:

\documentclass{article}
\usepackage{tikz}
\tikzset{name label/.style={
    label={[fill=green]left:#1}
}}
\tikzset{special node/.style={circle, draw, very thick}}
\begin{document}
\begin{tikzpicture}
\node[special node, name label=Label 2, label=Label 2, fill=red] (node name) at (0,0) {Some Node};
\end{tikzpicture}
\end{document}

如果您想要更多的灵活性,您可以使用style 2 args而不是style。但由于 pgfkeys 不支持可选参数,因此您始终必须指定两个参数,例如name label={}{Text}。相反,您可以定义一个具有可调整位置的新样式,并定义name label使用该新样式:

\documentclass{article}
\usepackage{tikz}
\tikzset{
    name label/.style={name label 2={pos=left}{#1}},
    name label 2/.style 2 args={
        label={[
            pos/.store in=\MyNameLabelPos, % Store position in macro
            pos=left,                      % By default, label is left
            fill=green,                    % Some default looks for label
            #1                             % Allow override of pos and looks
        ]\MyNameLabelPos:#2}               % Actual label position and text
    }
}
\tikzset{special node/.style={circle, draw, very thick}}
\begin{document}
\begin{tikzpicture}
\node[special node, name label=Label 2, label=Label 2, fill=red] (node name) at (0,0) {Some Node};
\node[special node, name label 2={pos=right}{Label 2}, label=Label 2, fill=red] (node name) at (0,-3) {Some Node};
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容