TikZ로 만든 채워진 직사각형 뒤에 표시된 선

TikZ로 만든 채워진 직사각형 뒤에 표시된 선

선이 교차하는 채워진 직사각형인 TikZ 스타일을 만들어야 합니다.

지금 직면하고 있는 문제는 직사각형이 색상으로 채워지면 직사각형 뒤에 선이 그려지고 위에서 필요하다는 것입니다.

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}

이것이 내가 얻는 것입니다:

여기에 이미지 설명을 입력하세요

append after command채워진 그림 위에 그려진 선을 어떻게 강제로 그릴 수 있습니까 ?


업데이트:

이 코드는 pgf 2.10이나 3.0.0에서 작동하지 않는다는 것을 확인했습니다.

또한 @PaulGessler 및 @PaulGaborit의 답변 덕분에 pgf 3.0.0을 사용하면 이 문제를 완벽하게 해결할 수 있다는 것을 확인했지만 지금은 두 버전의 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}

경로 뒤의 예

관련 정보