好的,伙计们。我有一个奇怪的想法,想向你们确认一下是否有办法实现。我无法从 pgfmanual 中获得任何见解,也找不到类似的问题。
我想使用 tikz 图片来创建动态 tikz 图片。它可以用作“保存框”,但可以“实时”计算,如果我可以这样说的话。让我给你展示我的代码:
\documentclass{standalone}
\usepackage{tikz}
\tikzset{
pics/meta/.style 2 args={
code={
\tikzset{
#1/.pic={
\node[fill=#2]{};
}
}
\pic{#1};
}
}
}
\begin{document}
\begin{tikzpicture}
\pic[]at(0,0){meta={r}{red}};
\pic[]at(1,0){meta={g}{green}};
\pic[]at(2,0){r};
\pic[]at(3,0){g};
\end{tikzpicture}
\end{document}
此代码“几乎”可以正常工作。元数据内部的图片绘制正确,但外部图片却出现错误,例如“我不知道密钥 /tikz/pic/r”。
我认为这是一个范围问题,因为“r”键在离开“meta”定义后会消失。因此我的问题是:有没有办法从本地组内部向全局范围添加键?对于常规 LaTeX,我们有像 和 这样的\gdef
宏\xdef
。
编辑:
通过使用常规宏而不是 tikz 图片来创建动态样式,可以很容易地解决这个问题。无论如何,让我们将其视为一个挑战(如果是的话)。
答案1
是的,可以。@percusse 的回答您可以使 pgf 密钥全球化。
\documentclass{standalone}
\usepackage{tikz}
\tikzset{
pics/meta/.style 2 args={
code={\begingroup\globaldefs=1\relax
\tikzset{
#1/.pic={
\node[fill=#2]{};
}
}
\endgroup
\pic{#1};
}
}
}
\begin{document}
\begin{tikzpicture}
\pic[]at(0,0){meta={r}{red}};
\pic[]at(1,0){meta={g}{green}};
\pic[]at(2,0){r};
\pic[]at(3,0){g};
\end{tikzpicture}
\end{document}