테이블 셀의 조인 매크로로 연결된 노드 체인

테이블 셀의 조인 매크로로 연결된 노드 체인

MWE:

\documentclass{article}

\usepackage{tabularray}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,
                chains, 
                positioning}

\begin{document}

\tikzset{        
node distance = 0mm and 5mm,
  start chain = going right,
     N/.style = {fill=#1!20, name=N,
                 inner ysep=4mm, inner xsep=0mm, minimum width=22mm, 
                 on chain, join=by -Straight Barb}
        }
                   
\begin{tblr}{colspec = {Q[l,m] X[l,m]}}
DE  &   \tikz[baseline=(N.base)]{\node[N=red]   {D};    \node[N=blue]  {E};}
\end{tblr}

\end{document}

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

보시다시피 결과가 잘못되었습니다. 첫 번째 화살표는 무엇을 생성합니까? MWE에 오류가 있나요? 아니면 뭔가 빠졌나요? 해결 방법을 아는 사람이 있나요?

편집하다:tabularx테이블 에서도 동일한 결과가 얻어집니다 .

\documentclass{article}

\usepackage{tabularx}
\UseTblrLibrary{count}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,
                chains,
                positioning}

\begin{document}

\tikzset{
node distance = 0mm and 5mm,
  start chain = going right,
     N/.style = {fill=#1!20, name=N,
                 inner ysep=4mm, inner xsep=0mm, minimum width=22mm,
                 on chain,join=by -Straight Barb}
        }

\begin{tabularx}{\linewidth}{l X}
DE  &   \tikz[baseline=(N.base), on chain,join=by -Straight Barb]{\node[N=red]   {D};    \node[N=blue]  {E};}
\end{tabularx}

\end{document}

답변1

  1. tblr실제로 페이지에 올리기 전에 내용을 측정을 위해 적어도 세 번 조판합니다.
  2. 체인은 TikZ 사진 외부에서 시작되므로 모든 4×2 노드는 하나의 동일한 체인의 일부로 간주됩니다.
  3. PGF/TikZ는 참조된 노드가 동일한 그림의 일부인지 실제로 확인하지 않습니다.

마지막으로 페이지에 표시되는 "D" 노드는 어느 쪽에도 배치되지 않고 이전 그림의 마지막 노드에 (0, 0)배치됩니다 .rightN

다음 예를 살펴보십시오. tblr기본적으로 동일한 작업을 수행하며 동일한 다이어그램이 4번 수행됩니다.

\tikzset{
node distance = 0mm and 5mm,
  start chain = going right,
     N/.style = {fill=#1!20, name=N,
                 inner ysep=4mm, inner xsep=0mm, minimum width=22mm, 
                 on chain, join=by -Straight Barb}
        }
\tikzset{every picture/.append style={
  execute at end picture={
    \node[circle, draw, label=$O$] at (0,0) {};
    \draw[help lines] (-1.25,0|-N.south west) grid (N.north east);}}}

\tikz[baseline=(N.base)]{
  \node[N=red]{D \pgfpictureid\ \tikzchaincount};
  \node[N=blue]{E \pgfpictureid\ \tikzchaincount};}

\tikz[baseline=(N.base)]{
  \node[N=red]{D \pgfpictureid\ \tikzchaincount};
  \node[N=blue]{E \pgfpictureid\ \tikzchaincount};}

\tikz[baseline=(N.base)]{
  \node[N=red]{D \pgfpictureid\ \tikzchaincount};
  \node[N=blue]{E \pgfpictureid\ \tikzchaincount};}

\tikz[baseline=(N.base)]{
  \node[N=red]{D \pgfpictureid\ \tikzchaincount};
  \node[N=blue]{E \pgfpictureid\ \tikzchaincount};}

\tikz % this picture doesn't have a node N but it still finds it.
  \draw foreach \ang in {0, 15, ..., 359} { (N.\ang) -- ++(\ang:5pt)};

이는 다음을 제공합니다:
여기에 이미지 설명을 입력하세요

실제로 무슨 일이 일어나고 있는지 더 명확하게 볼 수 있도록 모든 다이어그램에 원점과 그리드를 추가했습니다.

설명서에는 다음 내용이 나와 있습니다 start chain.

이 키는 체인의 모든 노드를 포함하는 범위에 대한 옵션으로 제공되어야 하지만 반드시 그럴 필요는 없습니다. 일반적으로 이는 a scope또는 전체가 되지만 tikzpicture체인의 모든 노드가 발견되는 경로일 수도 있습니다. 그렇지 않은 경우체인 이름지정되면 기본값이 chain대신 사용됩니다.

이는 실제로 명확하지는 않지만 사진별로만 사용해야 한다는 힌트를 제공합니다. 하지만 그림이 네 번 조판될 것이라고는 예상할 수 없었습니다.

어쨌든, 나는 사진을 start chain놓거나 \tikz적어도 tblr감방에 두는 것이 좋습니다. 어쨌든 사진 사이의 연결은 실제로 의미가 없습니다.

reset chain주어진 체인(또는 값이 제공되지 않은 경우 활성 체인)을 재설정하는 키를 추가했습니다 . 여기에 추가할 수는 있지만 every picture사용하지는 않습니다. (주어진 체인이 존재하는지 확인하는 것도 누락되었습니다.)

암호

\documentclass{article}
\usepackage{tabularray}
\usepackage{tikz}
\usetikzlibrary{arrows.meta, chains, positioning}
\makeatletter
\tikzset{
  reset chain/.code=%
    \expandafter\gdef\csname tikz@lib@chain@count@#1\endcsname{0},
  reset chain/.default=\tikz@lib@current@chain}
\makeatother
\begin{document}

\tikzset{
node distance = 0mm and 5mm,
%  start chain = going right,
     N/.style = {fill=#1!20, name=N,
                 inner ysep=4mm, inner xsep=0mm, minimum width=22mm, 
                 on chain, join=by -Straight Barb}
        }
 
\begin{tblr}{colspec = {Q[l,m] X[l,m]}}
DE & \tikz[start chain=going right, baseline=(N.base)]{
       \node[N=red] {D}; \node[N=blue] {E};}
\end{tblr}

\hrule

\begin{tblr}{colspec = {Q[l,m] X[l,m]}}
DE & \tikzset{start chain=going right}
       \tikz[baseline=(N.base)]{\node[N=red] {D}; \node[N=blue] {E};}
\end{tblr}

\hrule

\tikzset{start chain=going right, every picture/.append style=reset chain}
\begin{tblr}{colspec = {Q[l,m] X[l,m]}}
DE & \tikz[baseline=(N.base)]{\node[N=red] {D}; \node[N=blue] {E};}
\end{tblr}
\end{document}

산출

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


graphs배치 및 연결 전략을 미리 설정할 수도 있다면 라이브러리를 사용할 수도 있습니다 . (그러나 나는 이것을 전역 대신 \tikzor 의 일부로 지정하겠습니다 .)\graph

노드 D와 은(는) E연결되지 않거나 --유사하므로 형제로 간주되므로 branch right sep사용되지 않습니다 grow right sep.

\documentclass{article}
\usepackage{tabularray}
\usepackage{tikz}
\usetikzlibrary{arrows.meta, graphs}
\begin{document}
\tikzset{
  N/.style={
    fill=#1!20, inner ysep=4mm, inner xsep=0mm, minimum width=22mm, alias=N}}
\tikzgraphsset{branch right sep=5mm,
               every graph/.append style={path, ->, /tikz/>=Straight Barb}}
\begin{tblr}{colspec = {Q[l,m] X[l,m]}}
DE  & \tikz[baseline=(N.base)]\graph{D[N=red], E[N=blue]};
\end{tblr}
\end{document}

관련 정보