
我需要建立一個 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}