我花了几天时间尝试了解 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}