使用宏生成 TikZ 节点

使用宏生成 TikZ 节点

受此启发邮政,我试图包裹这个正常节点......

\node[fill=blue!20,shape=ellipse, draw=black] (nodename) at(0,0){\begin{tabular}{l}
    Main Text\\ \hline
    extension point: \\ 
    Some Text
\end{tabular}};

...变成这些类型的宏:

\begin{tikzpicture}[
    umlusecaseext/.style n args = {3}{
        shape=ellipse,
        fill=blue!20,
        draw=black,
        code={
            \begin{tabular}{l}
                #1\\ \hline
                #2: \\ 
                #3
            \end{tabular} 
        }
    }]
\node (example) [umlusecaseext={{Main Text},{extension point},{Some Text}}] {};
\end{tikzpicture}

我的目标是重用此节点。不幸的是,这没有奏效。你能纠正我的解决方案吗?

答案1

如果您想通过样式设置节点的内容,请使用node contents

如果您通过定义样式,则.style n args={3}{…}只需使用大括号分隔的三个参数(无,且无全部包含{{}{}{}})。

如果您使用,node contents则应该删除空的{}(因为此时它将是一个正常的路径规范) - 它不会破坏任何东西,但最好将其删除(并明确表示节点内容必须来自某种样式)。

注意:如果您node contents不能在]与节点相关的内容后指定任何其他内容(无名称、无位置、无其他样式)。

代码

\documentclass[tikz]{standalone}
\usetikzlibrary{shapes.geometric}
\begin{document}
\begin{tikzpicture}[
    umlusecaseext/.style n args = {3}{
        shape=ellipse,
        fill=blue!20,
        draw=black,
        node contents={
            \begin{tabular}{l}
                #1\\ \hline
                #2:\\ 
                #3
            \end{tabular} 
        }
    }]
\node (example) [umlusecaseext={Main Text}{extension point}{Some Text}];
\end{tikzpicture}
\end{document}

输出

在此处输入图片描述

相关内容