是否可以将样式应用于所有(tikz)矩形?

是否可以将样式应用于所有(tikz)矩形?

我知道可以将样式应用于所有 tikz 节点或路径,如下例所示:

\tikzset{
    every node/.style={
        text=red
    },
    every path/.style={
        color=green,
        thin
    }
}

(这使得所有节点都有红色文本并且所有路径都有细绿线。)

是否有类似的方法将样式应用于所有 tikz 矩形,以便由绘制命令生成的矩形,例如\draw (1,1) rectangle (3,3);

我尝试了以下方法,希望它可能会起作用(但没有起作用,因此我提出了问题!):

\tikzset{
    every rectangle/.style={%
        blue,
        rounded corners,
        ultra thick
    }
}

我目前的解决方法是使用一种样式,手动将其应用于每个矩形,尽管这有点繁琐。以下最小工作示例对此进行了演示。

\documentclass{report}

\usepackage{tikz}

\tikzset{
    every rectangle/.style={
        blue,
        rounded corners,
        ultra thick
    },
    my rectangle/.style={
        blue,
        rounded corners,
        ultra thick
    }
}

\begin{document}

\begin{tikzpicture}

    % A rectangle which would be styled by the "every rectangle" bit if 
    % it worked in the way that I would like it to:
    \draw (1,5) rectangle (4,7);

    % A rectangle with my custom styling applying to it:
    \draw [my rectangle] (1,1) rectangle (4,3);

\end{tikzpicture}

\end{document}

every rectangle如果按照我希望的方式工作或者如果有其他方式来设置所有矩形的样式,则上面的矩形将是相同的(除了位置) 。

所以本质上我想知道是否every rectangle存在与我的伪实际等同的东西。

答案1

不幸的是,您无法定义一种自动应用于所有rectangles 的样式。rectangle只是一个路径命令,它会立即转换为坐标,因此它实际上并不被视为特殊对象。此外,从另一个角度来看,这会很困难:您可以有一个\path包含矩形和圆形的命令。路径只能有一种绘制样式,因此如果您有一个every rectangle和一种every circle样式,那么在这种情况下会应用哪一种?

我想到两种替代方法:

  1. 使用edge而不是rectangle。然后您可以指定和必要的绘图选项。当然,如果您在其他情况下every edge/.style={to path={rectangle (\tikztotarget)}使用,则必须小心。edge
  2. 使用节点而不是仅使用矩形的路径。它们允许使用诸如 之类的样式every rectangle node/.style

以下是两种方法的示例:

\documentclass{report}

\usepackage{tikz}

\tikzset{
    rectnode/.style args={#1,#2}{
        draw,
        blue,
        rounded corners,
        ultra thick,
        minimum width=#1 cm,
        minimum height=#2 cm,
        anchor=south west
    },
    every edge/.style={
        draw,
        ultra thick,
        blue,
        rounded corners,
        to path={rectangle (\tikztotarget)}
    }
}

\begin{document}

\begin{tikzpicture}
    \draw (1,5) edge (4,7);

    \node [rectnode={3,2}] at (1,1) {};
\end{tikzpicture}

\end{document}

答案2

根据杰克的原始评论,经过一些搜索和一些实验,我找到了应用样式的解决方案every rectangle node,杰克也在他的回答中提到了这一点。

以下是使用此想法的一个简单示例:

\documentclass{report}

\usepackage{tikz}

\tikzset{
    every rectangle node/.style={
        color=blue,
        ultra thick
    }
}

\begin{document}

\begin{tikzpicture}

    % A rectangle node which will have the "every rectangle node" styling applied to it:
    \node at (1,3) [draw, rectangle] {Node 1};

    % The "color=blue" styling also applies itself to the text attached to this node,
    % although it does not explicitly have a rectangle type
    \node at (1,2) {Node 2};

    % However it is not applied to this one, as it has a defined type (circle):
    \node at (1,1) [circle] {Node 3};

\end{tikzpicture}

\end{document}

其产生(稍微放大和裁剪):

上述 LaTeX 输出的屏幕截图显示了生成的 3 个节点

此示例(希望)强调的一点是every rectangle node样式也应用于节点 2。这最初对我来说似乎很奇怪,因为该节点没有指定矩形作为类型,但我相信这种情况发生是因为节点具有rectangle默认类型。在这种情况下,一种解决方法是使用圆形类型的节点而不进行绘制,如节点 3 所示。

因此,回答我最初的问题 - every rectangle node(与矩形节点结合)可以用来产生与我想要的伪相同的结果every rectangle,但有上述警告。

相关内容