使用 TikZ 制作的填充矩形后面显示的线

使用 TikZ 制作的填充矩形后面显示的线

我需要创建一个 TikZ 样式,它是一个填充的矩形,其中有一条线与它相交。

我现在面临的问题是,当矩形填充了颜色时,线条会画在矩形后面,而我需要它在上面。

妇女权利委员会:

\documentclass[12pt]{standalone}

\usepackage{tikz}
\usetikzlibrary{calc, shapes.geometric}

\tikzstyle{mainfig} = [
    minimum width=16mm,
    minimum height=5mm,
    text centered,
    draw=black,
    fill=orange!80,
    line width=1pt,
    rectangle,
    append after command={
      \pgfextra{
        \draw [line width=2pt]
            ($(\tikzlastnode.north west)+(3mm,5mm)$)--
            ($(\tikzlastnode.south west)+(3mm,-5mm)$);
      } 
    }   
] 

\begin{document}

  \begin{tikzpicture}[font=\footnotesize]
    \node (test) [mainfig] {\ldots};
  \end{tikzpicture}

\end{document}

这是我得到的:

在此处输入图片描述

我怎样才能强制将之后绘制的线append after command绘制在填充图形的上方?


更新:

我已经确认该代码不适用于 pgf 2.10,也不适用于 3.0.0。

此外,我发现使用 pgf 3.0.0 可以完美解决此问题,这要感谢 @PaulGessler 和 @PaulGaborit 的回答,但目前我希望找到一种适用于 pgf 的两个版本的解决方案。我希望这个要求不算过分。

具体来说,我需要一个支持 pgf 2.10 的工作解决方案,因为我将在一个要协作的项目中使用此代码,并且截至目前,ShareLaTeX 和 writeLaTeX 都使用该版本的 pgf。

如果没有出现新的内容,我将很乐意接受得票最多的答案。

答案1

一种方法是使用图层。用 声明前景(fg)图层,\pgfdeclarelayer{fg}并用 设置图层顺序(从下到上)\pgfsetlayers{main,fg}

然后,在pgf基于 的环境中,您可以使用

\begin{pgfonlayer}{fg}
  <drawing commands>
\end{pgfonlayer} 

在前景中绘制。

注意:该shapes.geometric库不是必需的;rectangle包含在基础包中。

代码

\documentclass[12pt]{standalone}

\usepackage{tikz}
\usetikzlibrary{calc}

\pgfdeclarelayer{fg} % declare foreground layer
\pgfsetlayers{main,fg} % set layer order

\tikzstyle{mainfig} = [
    minimum width=16mm,
    minimum height=5mm,
    text centered,
    draw=black,
    fill=orange!80,
    line width=1pt,
    rectangle,
    append after command={
      \pgfextra{
        \begin{pgfonlayer}{fg}
          \draw [line width=2pt]
            ($(\tikzlastnode.north west)+(3mm,5mm)$)--
            ($(\tikzlastnode.south west)+(3mm,-5mm)$);
        \end{pgfonlayer}
      } 
    }   
] 

\begin{document}

  \begin{tikzpicture}[font=\footnotesize]
    \node (test) [mainfig] {\ldots};
  \end{tikzpicture}

\end{document}

输出

在此处输入图片描述

答案2

append after command键在绘制节点后不附加任何内容。它将材质附加到节点条目出现的当前路径。下面是一个例子来说明它的用法。

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
  \draw (0,0)  -- (1,0) node{A} -- (2,0);
  \draw[red] (0,1)  -- (1,1)  node[append after command={-- +(0,1)}] {A}  -- (2,1);
\end{tikzpicture}
\end{document}

使用 append after 命令

当 TikZ 绘制带有一些节点的路径时,它首先绘制路径(并收集所有节点),然后绘制节点。使用 TikZ 3.0,您可以将选项behind path应用于节点以在当前路径之前绘制它。以下是其用法的示例(与 结合append after command):

\documentclass[tikz]{standalone}
\usetikzlibrary{calc}
\tikzset{
  mainfig/.style={
    minimum width=16mm,minimum height=5mm,text centered,
    draw=black,fill=orange!80,
    line width=1pt,rectangle,
    append after command={
      ($(\tikzlastnode.north west)+(3mm,5mm)$)--
      ($(\tikzlastnode.south west)+(3mm,-5mm)$)
    },
  },
}
\begin{document}
\begin{tikzpicture}[font=\footnotesize]
  \draw[line width=2pt,draw=blue] node [mainfig] {\ldots};
  \draw[line width=2pt,draw=red] (0,2) node [behind path,mainfig] {\ldots};
\end{tikzpicture}
\end{document}

后路径示例

相关内容