用 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}

命令後追加的用法

當 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}

後面路徑的範例

相關內容