我需要创建一个 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}