我需要在命令中嵌入(复杂的)TikZ 图片,以便以多种比例和颜色重复使用它。缩放时没有问题,但我无法更改图像的颜色(请参阅下图中的 MWE 输出)。
梅威瑟:
\documentclass{article}
\usepackage{tikz}
\tikzset{mystyle/.style={fill=#1}, mystyle/.default=black}
\newcommand{\aaa}{
\begin{scope}
\path[mystyle] (0,0) -- (1,0) -- (0,1) -- cycle;
\end{scope}
}
\newcommand{\bbb}{
\begin{scope}[mystyle=blue]
\path[mystyle] (0,0) -- (1,0) -- (0,1) -- cycle;
\end{scope}
}
\begin{document}
\begin{tabular}{rl}
Black triangle:&
\begin{tikzpicture}
\aaa
\end{tikzpicture}
\\
Red triangle:&
\begin{tikzpicture}[mystyle=red]
\aaa
\end{tikzpicture}
\\
Red triangle:&
\begin{tikzpicture}
\begin{scope}[mystyle=red]
\aaa
\end{scope}
\end{tikzpicture}
\\
Blue triangle:&
\begin{tikzpicture}
\bbb
\end{tikzpicture}
\\
Red triangle:&
\begin{tikzpicture}[mystyle=red]
\bbb
\end{tikzpicture}
\\
Red triangle:&
\begin{tikzpicture}
\begin{scope}[mystyle=red]
\bbb
\end{scope}
\end{tikzpicture}
\end{tabular}
\end{document}
答案1
正如 cfr 和 Ulrike 所解释的,\path[mystyle]
相当于默认样式:\path[mystyle=black]
。然后,尽管你使用\begin{scope}[mystyle=red]
它,但没有效果,因为\path[mystyle]
它被覆盖了。
如果您希望每个都path
使用scope
相同的样式,您可以使用:
\begin{tikzpicture}
\begin{scope}[every path/.style={mystyle=red}]
\path (0,0) -- (1,0) -- (0,1) -- cycle;
\end{scope}
\end{tikzpicture}
另一个解决方案是我在评论中提出的:
\documentclass{article}
\usepackage{tikz}
\tikzset{mystyle/.style={fill=#1}, mystyle/.default=black}
\newcommand{\aaa}[1][black]{
\begin{scope}
\path[mystyle=#1] (0,0) -- (1,0) -- (0,1) -- cycle;
\end{scope}
}
\begin{document}
\begin{tabular}{rl}
Black triangle:& \tikz{\aaa}\\
Red triangle:& \tikz{\aaa[red]}\\
Blue triangle:& \tikz{\aaa[blue]}
\end{tabular}
\end{document}
结果是:
注意:虽然我不建议,但作为本声明的附带效果,你甚至可以说\aaa[blue, scale=-1, draw=red, ultra thick]
获得