Linha mostrada atrás do retângulo preenchido feito com TikZ

Linha mostrada atrás do retângulo preenchido feito com TikZ

Preciso criar um estilo TikZ que seja um retângulo preenchido com uma linha cruzando-o.

O problema que estou enfrentando agora é que quando o retângulo é preenchido com uma cor, a linha é desenhada atrás do retângulo e preciso dela acima.

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

Isto é o que eu recebo:

insira a descrição da imagem aqui

Como posso forçar a linha desenhada depois append after commanda ser desenhada acima da figura preenchida?


Atualizar:

Confirmei que este código não funciona com pgf 2.10, nem com 3.0.0.

Além disso, vi que esse problema pode ser perfeitamente resolvido usando o pgf 3.0.0, graças às respostas de @PaulGessler e @PaulGaborit, mas por enquanto gostaria de uma solução que funcionasse para ambas as versões do pgf. Espero que não seja pedir muito.

Em particular, preciso de uma solução funcional com suporte ao pgf 2.10, pois usarei esse código em um projeto para ser trabalhado de forma colaborativa e, a partir de agora, tanto o ShareLaTeX quanto o writeLaTeX usam essa versão do pgf.

Se nada de novo aparecer, aceitarei de bom grado a resposta mais votada.

Responder1

Um método é usar camadas. Declare a fgcamada de primeiro plano ( ) com \pgfdeclarelayer{fg}e defina a ordem das camadas (de baixo para cima) com \pgfsetlayers{main,fg}.

Então, em qualquer lugar em um pgfambiente baseado em -, você pode usar

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

para desenhar em primeiro plano.

Uma observação: a shapes.geometricbiblioteca não é obrigatória; rectangleestá incluído no pacote básico.

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

A saída

insira a descrição da imagem aqui

Responder2

A append after commandchave não acrescenta nada depois de desenhar o nó. Ele anexa material ao caminho atual onde a entrada do nó aparece. Aqui está um exemplo para ilustrar seu 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 anexar após comando

Quando o TikZ desenha um caminho com alguns nós, primeiro ele desenha o caminho (e coleta todos os nós) e depois desenha os nós. Com o TikZ 3.0, você pode aplicar a behind pathopção a um nó para desenhá-lo antes do caminho atual. Aqui está um exemplo de seu uso (combinado com 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}

exemplo de caminho atrás

informação relacionada