使用 TikZ 定义提供嵌套参数化样式的样式

使用 TikZ 定义提供嵌套参数化样式的样式

我想绘制不同类型的图表,并希望使用样式进行定义。一个特定的图表有带标签的节点,我希望能够使用自定义键 ( cn) 附加这些标签。

下面的文档演示了这一点,问题是,使用指定的节点标签cn没有显示。

\documentclass{standalone}
\usepackage{tikz}

\tikzstyle{RegionGraph}=[
  every node/.style={fill=blue!20},
  every edge/.style={draw,latex-},
  cn/.style={label={#1}}
]    

\begin{document}
\begin{tikzpicture}[RegionGraph]
  \draw (0,0)   node[cn=1] (lr1) {$X_1$}
        ++(2,0) node[cn=0] (lr2) {$X_2$} edge (lr1);
\end{tikzpicture}
\end{document}

然而,当我将 -style 的定义cn直接添加到图片时,如下面的代码所示,标签就会显示出来。

\begin{tikzpicture}[RegionGraph,cn/.style={label={#1}}]
    ...

我做错了什么?如何解决?

答案1

嵌套样式定义时,您需要将#字符数加倍,因为当它们扩展时,字符数会减半。因此,如果您将其嵌套在三个级别中,则需要####1嵌套四个级别八次,等等。这就是为什么标签不会出现的原因,因为#1保留了 的参数,RegionGraph但您指的是cn定义时自己的参数。

\documentclass[tikz]{standalone}

\tikzset{RegionGraph/.style={
  every node/.style={fill=blue!20},
  every edge/.style={draw,latex-},
  cn/.style={label={##1}}
}}

\begin{document}
\begin{tikzpicture}[RegionGraph]
  \draw (0,0)   node[cn=1] (lr1) {$X_1$}
        ++(2,0) node[cn=0] (lr2) {$X_2$} edge (lr1);
\end{tikzpicture}
\end{document}

答案2

使用tikzset而不是tikzstyle

\documentclass{standalone}
\usepackage{tikz}

\tikzset{
  every node/.style={fill=blue!20},
  every edge/.style={draw,latex-},
  cn/.style={label={#1}}}


\begin{document}
\begin{tikzpicture}
  \draw (0,0)   node[cn=1] (lr1) {$X_1$}
        ++(2,0) node[cn=0] (lr2) {$X_2$} edge (lr1);
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容