为什么“double”在范围的选项列表中不起作用?

为什么“double”在范围的选项列表中不起作用?

示例文档:

\documentclass[convert={size=320}]{standalone}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}
    \begin{scope}[line width = 2pt, red]
        \foreach \x in {1, 2, 3, 4} {
            \draw (\x, 0) -- (\x, 5);
        }
    \end{scope}
    \begin{scope} [ line width = 2pt,
                    color = green!80,
                    double distance = 2pt,
                    double = blue          % <--- This doesn't have any effect
                    ]
        \draw (0, 4) -- (5, 4);
    \end{scope}
    \begin{scope} [ line width = 2pt,
                    color = green!80,
                    double distance = 2pt,
                    every path/.style = {double = blue}
                    ]
        \draw (0, 3) -- (5, 3);
    \end{scope}
    \begin{scope} [ line width = 2pt,
                    color = green!80,
                    every path/.style = { double distance = 2pt,
                                          double = blue
                                          }]
        \draw (0, 2) -- (5, 2);
    \end{scope}
    \begin{scope} [every path/.style = { line width = 2pt,
                                         color = green!80,
                                         double distance = 2pt,
                                         double = blue
                                         }]
        \draw (0, 1) -- (5, 1);
    \end{scope}
\end{tikzpicture}

\end{document}

结果:

我不明白这种行为。为什么范围选项列表中的所有其他选项都适用于绘制的路径,但“double”不适用?其他选项可以放在范围选项列表中,也可以放在every path/.style范围选项列表中的选项列表中,它们都可以工作。但“double”不行。PGF/TikZ 手册虽然内容广泛,但并没有为我阐明一切。

答案1

draw这与将选项或作为选项提供给范围不会描边或填充范围中的所有路径的方式不同fill。将选项作为选项提供给范围时,它们只会在路径使用这些选项而没有值的情况下设置颜色。

在你的情况下

\draw[double] (0, 4) -- (5, 4);

将使用blue来自scope的设置。

手册中对该选项进行了说明draw=<color>

虽然此选项通常用于路径上以指示应绘制路径,但将选项与{scope}{tikzpicture}环境一起使用也是有意义的。但是,这不会导致绘制所有路径。相反,这只会设置<color>用于在环境内绘制路径。

虽然手册没有过多提及路径上的其他“操作”,但除了drawdouble之外,这也适用于

  • fill年代,
  • clip年代,
  • use as a bounding box(与 非常相似clip,只是没有剪辑)
  • tips3.0.0
  • shade秒。

手册再次解释了这两种衰落的行为,

  • path fading=<name>

    此选项告诉 TikZ 当前路径应使用淡入淡出效果<name>。如果没有<name>给出,<name>则使用整个范围的设置。与draw或等选项类似fill,此选项会为每个路径重置,因此您必须将其添加到每个应淡入淡出的路径。

  • scope fading=<fading>(看似矛盾):

    […] [J]至于path fading,提供scope fading带有 的选项{scope}仅设置要使用的淡入淡出的名称。您必须明确提供scope fading带有路径的 才能实际安装淡入淡出。

此外path picture(非常特殊和自定义的路径填充)是一种“路径上的动作”,并遵守以下规则:

fill或等其他键一样,draw此选项需要在路径上给出,设置path picture在路径外面没有效果(在每个路径开始时路径图片被清除)。

有了这些话(“在每个路径的开头清除”),我们转向 TikZ 的源代码,即文件tikz.code.tex。上述每个选项都包含一个调用,\tikz@addmode将其参数附加到\tikz@mode。在的(内部)定义中\path,此宏被清空:

\let\tikz@mode=\pgfutil@empty%

every path之后执行样式。)当;遇到(并且路径已构建)时,所有这些模式都为假:

\let\tikz@path@picture=\pgfutil@empty%
\tikz@mode@fillfalse%
\tikz@mode@drawfalse%
\tikz@mode@tipsfalse% (3.0.0)
\tikz@mode@doublefalse%
\tikz@mode@clipfalse%
\tikz@mode@boundaryfalse% (“use as bounding box”)
\tikz@mode@fade@pathfalse%
\tikz@mode@fade@scopefalse%

并安装已保存的模式:

\tikz@mode% installs the mode settings

魔法就开始了。

相关内容