Tikz 및 Matrix를 사용하면 foreach 루프에서 생성된 노드가 "바람 앵커"(북쪽, 남쪽 등)를 허용하지 않습니다.

Tikz 및 Matrix를 사용하면 foreach 루프에서 생성된 노드가 "바람 앵커"(북쪽, 남쪽 등)를 허용하지 않습니다.

이는 5x3 노드로 구성된 작은 행렬입니다. 내 실제 행렬은 훨씬 더 크며 각 셀에 숫자를 지정하는 것을 선호했습니다(1에서 15까지 - 예, 0에서 14까지가 더 쉬울 것이라는 것을 알고 있습니다). 번호 매기기를 설명하기 위해 이미 foreach를 사용하여 셀 번호를 매겼습니다.

내가 원하는 것은 수평 분리선에 색상을 지정하여 왼쪽 셀 번호와 오른쪽 셀 번호를 지정하는 것입니다. 행렬 좌표에 정적 숫자(예: 7과 9 사이의 빨간색 선)가 제공되면 완벽하게 작동합니다. foreach 루프에서 셀 번호를 동적으로 생성하려고 하면 작동하지 않습니다(예: 1과 3 사이의 파란색 선). 분명히 오프셋(북쪽, 남쪽, 동쪽...)은 무시됩니다. 상상할 수 있듯이 여기에 도움을 요청하기 전에 나는 많은 변형을 만들었습니다.

내 실수가 어디에 있는지 아시나요?

미리 감사드립니다.

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

이게 내 MWE야

\documentclass[a4paper, 11pt]{report}
% --- DOCUMENT
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{tikz}
\usepackage{caption}

\begin{document}

\begin{figure}[!h]\centering
\usetikzlibrary{matrix,calc}

\begin{tikzpicture}[ampersand replacement=\&]
  \tikzset{
    table nodes/.style={rectangle, draw, align=center, minimum height=5mm,
      text depth=0.5ex,text height=1ex,inner xsep=0pt,outer sep=0pt
      },      
    table/.style={matrix of nodes, row sep=-\pgflinewidth, column sep=-\pgflinewidth,
      nodes={table nodes},
      execute at empty cell={\node[draw=none]{}; }
      }
    }
  \matrix at (0,0) [table,text width=5mm,name=MX] {%
    \ \&\ \&\ \\\ \&\ \&\ \\\ \&\ \&\ \\\ \&\ \&\ \\\ \&\ \&\ \\};
  \foreach \i [evaluate={\r=int((\i-1)/3+1); \c={int(mod(\i-1,3)+1)} }] in {1,...,15} {
    \node at ($(MX-\r-\c)$) {\footnotesize\i};
    }
  \foreach \b/\e [evaluate={\r=int((\b-1)/3+1); \c={int(mod(\b-1,3)+1)}; \d={int(mod(\e-1,3)+1)} }] in {1/3} { %
    \draw[red,semithick] ($(MX-\r-\c)$) circle(2pt);  <--- THIS WORKS
    \draw[blue,semithick] ($(MX-\r-\c)$.south) -- ($(MX-\r-\d)$.south);  <--- THIS DOESN'T WORK
    %\coordinate (N) at  ($(MX-\r-\c)$);
    %\draw[blue,semithick] (N.south) circle(2pt);  <--- THIS DOESN'T WORK
    %\draw[blue,semithick] (N.south) circle(2pt);  <--- THIS DOESN'T WORK
    }
  \draw[red,semithick] (MX-3-1.south west) -- (MX-3-3.south east); % <--- THIS WORKS
  % useasboundingbox
  \useasboundingbox[blue] ($(MX-1-1.north west)+(135:10pt)$) rectangle ($(MX-5-3.south east)+(315:10pt)$);
\end{tikzpicture}
\caption{Matrix example}
\end{figure}
\end{document}

답변1

and .south west.south east괄호 내부가 아닌 외부에 있었습니다.

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

\documentclass[a4paper, 11pt]{report}
% --- DOCUMENT
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{tikz}
\usepackage{caption}

\begin{document}
    
    \begin{figure}[!h]\centering
        \usetikzlibrary{matrix,calc}
        
        \begin{tikzpicture}[ampersand replacement=\&]
        \tikzset{
            table nodes/.style={rectangle, draw, align=center, minimum height=5mm,
                text depth=0.5ex,text height=1ex,inner xsep=0pt,outer sep=0pt
            },      
            table/.style={matrix of nodes, row sep=-\pgflinewidth, column sep=- 
        \pgflinewidth,
                nodes={table nodes},
                execute at empty cell={\node[draw=none]{}; }
            }
        }
        \matrix at (0,0) [table,text width=5mm,name=MX] {%
            \ \&\ \&\ \\\ \&\ \&\ \\\ \&\ \&\ \\\ \&\ \&\ \\\ \&\ \&\ \\};
        \foreach \i [evaluate={\r=int((\i-1)/3+1); 
            \c={int(mod(\i-1,3)+1)} }] in {1,...,15} {
            \node at ($(MX-\r-\c)$) {\footnotesize\i};
        }
        \foreach \b/\e [evaluate={\r=int((\b-1)/3+1); 
            \c={int(mod(\b-1,3)+1)}; 
            \d={int(mod(\e-1,3)+1)} }] in {1/3} { %
            \draw[red,line width=1pt] (MX-\r-\c) circle(2pt); % <--- THIS WORKS
            \draw[blue,line width=2pt] (MX-\r-\c.south west) -- (MX-\r-\d.south east); 
           % <--- THIS ALSO WORKS NOW  the .south west was outside the brackets 
            %instead of inside
            %\coordinate (N) at  ($(MX-\r-\c)$);
            %\draw[blue,semithick] (N.south) circle(2pt);  <--- THIS DOESN'T WORK
            %\draw[blue,semithick] (N.south) circle(2pt);  <--- THIS DOESN'T WORK
        }
        \draw[red,line width=2pt] (MX-3-1.south west) -- (MX-3-3.south east); % <--- 
        %THIS WORKS
        % useasboundingbox
        \useasboundingbox[blue, line width=2pt] ($(MX-1-1.north west)+(135:10pt)$) 
         rectangle ($(MX-5-3.south east)+(315:10pt)$);
        \end{tikzpicture}
        \caption{Matrix example}
    \end{figure}
\end{document}

관련 정보