我想绘制不同类型的图表,并希望使用样式进行定义。一个特定的图表有带标签的节点,我希望能够使用自定义键 ( 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}