我通常会定义新的 latex 命令来自动化我的绘图,以便pgfkey
使用良好的键值语法。例如:
\MyCircle[radius=0.2cm]
后来,我经常发现需要扩展这些命令。例如,我可能想使用以下选项来获得覆盖图片:
remember picture, overlay, shift={(-1,-0.3)}
因此,为了增加一些灵活性,我考虑添加一个可选tikzoptions
键:
\MyCircle[radius=0.2cm,%
tikzoptions={ remember picture, overlay, shift={(-1,-0.3)} },%
]
事实证明,这并不像我想象的那么容易,并且以下尝试不起作用:
\documentclass[varwidth,margin=0.5cm]{standalone}
\usepackage{tikz}
\newcommand{\MyCircle}[1][]{{%
\pgfkeys{/MyCircle/.cd,%
radius/.store in=\radius,%
radius=1,%
tikzoptions/.store in=\tikzoptions,%
tikzoptions=,%
}%
\pgfkeys{/MyCircle/.cd, #1}%
\begin{tikzpicture}[\tikzoptions]
\draw (0,0) circle (\radius);
\end{tikzpicture}%
}}
\begin{document}
-- Normal picture
\MyCircle[radius=0.2cm]
-- Overlay picture
\MyCircle[radius=0.2cm,%
tikzoptions={ remember picture, overlay, shift={(-1,-0.3)} }]
\end{document}
预期输出如下:
我如何将 的内容用作环境\tikzoptions
的多个关键参数tikzpicture
?有没有更好的方法来实现我想要做的事情?
答案1
您必须使用.style
处理程序:
\documentclass[varwidth,margin=0.5cm]{standalone}
\usepackage{tikz}
\newcommand{\MyCircle}[1][]{{%
\pgfkeys{/MyCircle/.cd,
radius/.store in=\radius,
radius=1,
tikzoptions/.style={tikzstyle/.style={##1}},
tikzoptions={},
}%
\pgfkeys{/MyCircle/.cd,#1}%
\begin{tikzpicture}[/MyCircle/tikzstyle]
\draw (0,0) circle (\radius);
\end{tikzpicture}%
}}
\begin{document}
-- Normal picture
\MyCircle[radius=0.2cm]
-- Overlay picture
\MyCircle[radius=0.2cm,%
tikzoptions={ remember picture, overlay, shift={(-1,-0.3)} }]
\end{document}