Tikz 使用 pgfkey 设置标签位置

Tikz 使用 pgfkey 设置标签位置

我正在尝试为节点定义一个 tikz 样式,其中包括标签。由于标签相对于主节点的位置需要手动控制,因此我想以某种方式设置位置,但位置应该是“可选属性”。有没有 tikz 魔术师有好的解决方案,或者至少可以解释为什么我的尝试失败了?

我到目前为止尝试过的方法以及为什么它们不是一个好的解决方案:

1)使用双参数样式

mystyle/.style 2 args={label=#2:#1},
mystyle/.default={Defalut text}{60}

通过这种方式,我可以创建一个样式,它能给我想要的输出,但使用起来非常不方便。为了使位置可选,我需要添加第二组括号,或者用三重括号括住文本参数。默认位置也不起作用,因为只有在未提供任何参数时才会使用默认值。

2)使用第二个键来存储值

mypos/.store in=\mypos,
mypos=60,
mystyle/.style={label=\mypos:#1}

似乎\mypos宏没有正确展开,因为mypos在节点选项中设置键不会改变位置。\pgfkeys但是,使用手动设置键确实有效。如果用于其他用途(如内部分隔符),此方法有效,但对于标签无效...

3)使用标签位置键

mypos/.forward to={/tikz/label position},
mypos=60,
mystyle/.style={label=#1}

再次,在节点选项中设置位置不会改变任何东西。

完整 MWE:

\documentclass{minimal}
\usepackage{tikz}

\begin{document}

Using \verb+/.style 2 args+

\begin{tikzpicture}[
    mystyle/.style 2 args={label=#2:#1},
    mystyle/.default={Defalut text}{60}
]

    \node [mystyle={{{Label A}}}] {Text A};  % This really needs tripple braces...
    \node at (2,0) [mystyle={Label B}{}] {Text B};
    \node at (5,0) [mystyle={Label C}{120}] {Text C};
    \node at (7,0) [mystyle] {Text D};
\end{tikzpicture}


Using \verb+/.store in+

\begin{tikzpicture}[
    mypos/.store in=\mypos,
    mypos=60,
    mystyle/.style={label=\mypos:#1}
]
\node [mystyle=Label A] {Text A};
\node at (2,0) [mystyle=Label B, mypos=120] {Text B};
\pgfkeys{tikz/mypos=120}
\node at (6,0) [mystyle=Label C, mypos=180] {Text C};
\end{tikzpicture}

Using \verb+label position+

\begin{tikzpicture}[
    mypos/.forward to={/tikz/label position},
    mypos=60,
    mystyle/.style={label=#1}
]
\node [mystyle=Label A] {Text A};
\node at (2,0) [mystyle=Label B, mypos=120] {Text B};
\node at (4,0) [mystyle=Label C, label position=120] {Text C};
\end{tikzpicture}
\end{document}

答案1

这有帮助吗?完整的标签表达式(包括选项、位置和文本)被视为唯一参数。这样您就可以决定每个节点需要什么。

\documentclass[border=2mm,tikz]{standalone}
\usetikzlibrary{positioning}

\begin{document}
\begin{tikzpicture}[
    mystyle/.style={
        draw=red,
        label={#1}  %<-- Don't delete these braces
    }
    ]

\node[draw, label=30:A] (A) {AAAA};

\node[mystyle=0:B, right=of A] (B) {BBBB};

\node[mystyle={[draw=blue, minimum size=1cm]C}, right=of B] (C) {CCCC};
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容