Línea que se muestra detrás del rectángulo relleno hecho con TikZ

Línea que se muestra detrás del rectángulo relleno hecho con TikZ

Necesito crear un estilo TikZ que sea un rectángulo relleno con una línea que lo cruce.

El problema al que me enfrento ahora es que cuando el rectángulo se llena con un color, la línea se dibuja detrás del rectángulo y la necesito arriba.

El MWE:

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

Esto es lo que obtengo:

ingrese la descripción de la imagen aquí

¿Cómo puedo forzar que la línea dibujada después append after commandse dibuje sobre la figura rellena?


Actualizar:

He confirmado que este código no funciona con pgf 2.10 ni con 3.0.0.

Además, he visto que este problema se puede resolver perfectamente usando pgf 3.0.0, gracias a las respuestas de @PaulGessler y @PaulGaborit, pero por ahora me gustaría una solución que funcione para ambas versiones de pgf. Espero que no sea mucho pedir.

En particular, necesito una solución que funcione con soporte para pgf 2.10, porque usaré este código en un proyecto para trabajar en colaboración y, a partir de ahora, tanto ShareLaTeX como writeLaTeX usan esa versión de pgf.

Si no aparece nada nuevo, aceptaré con gusto la más votada de esas respuestas.

Respuesta1

Un método es utilizar capas. Declare la fgcapa de primer plano ( ) con \pgfdeclarelayer{fg}y establezca el orden de las capas (de abajo hacia arriba) con \pgfsetlayers{main,fg}.

Luego, en cualquier lugar de un pgfentorno basado en -, puede utilizar

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

para dibujar en primer plano.

Una nota: la shapes.geometricbiblioteca no es obligatoria; rectangleestá incluido en el paquete básico.

El código

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

La salida

ingrese la descripción de la imagen aquí

Respuesta2

La append after commandclave no agrega nada después de dibujar el nodo. Agrega material a la ruta actual donde aparece la entrada del nodo. A continuación se muestra un ejemplo para ilustrar su uso.

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

uso de agregar después del comando

Cuando TikZ dibuja un camino con algunos nodos, primero dibuja el camino (y recopila todos los nodos) luego dibuja los nodos. Con TikZ 3.0, puedes aplicar la behind pathopción a un nodo para dibujarlo antes de la ruta actual. A continuación se muestra un ejemplo de su uso (combinado con 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}

ejemplo de camino detrás

información relacionada