为什么样式不能在 TikZ 范围内传播?

为什么样式不能在 TikZ 范围内传播?

我需要在命令中嵌入(复杂的)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}

MWE 渲染

答案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]获得

在此处输入图片描述

相关内容