读取其他 pgfkeys 的值

读取其他 pgfkeys 的值

我花了几天时间尝试了解 pgfkeys 的工作原理。例如,我想读取一个键的值,然后使用它来设置另一个键。

在这种情况下,我想将节点的标签设置为与其文本相同的内容:

% attempt 1
\pgfkeys{/tikz/labeltext/.style={label=\pgfkeysvalueof{/tikz/node contents}}}

% attempt 2
\pgfkeys{/tikz/node contents/.store in=\nc}
\pgfkeys{/tikz/labeltext/.style={label=\nc}}

% attempt 3
\pgfkeys{/tikz/labeltext/.code={\pgfkeyssetvalue{\pgfkeysvalueof{/tikz/node contents}}}}

\begin{tikzpicture}

    \node [labeltext] {test};

\end{tikzpicture}

我期望得到的是

期望结果

但什么也没有发生。

答案1

无法从键中检索节点的正常内容。特殊node contents键使用一些代码将其参数存储在\tikz@node@content宏中(文件第 896 行tikz.code.tex)。

您可以使用:

\documentclass[tikz]{standalone}
\makeatletter
\tikzset{
  labeltext/.code={\tikzset{label/.expand once=\tikz@node@content}},
}
\makeatother
\begin{document}
\begin{tikzpicture}
  \node[node contents=test,labeltext];
\end{tikzpicture}
\end{document}

但更简单的解决方案是:

\documentclass[tikz]{standalone}
\tikzset{
  labeltext/.style={node contents={#1},label={#1}},
}
\begin{document}
\begin{tikzpicture}
  \node[labeltext=test];
\end{tikzpicture}
\end{document}

相关内容