我想定义一个特殊的 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 label
name 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}