tikz 노드를 제거하는 방법은 무엇입니까?

tikz 노드를 제거하는 방법은 무엇입니까?

이 코드는 a부터 y까지의 영어 알파벳을 5 x 5 정사각형에 배치한 다음 흰색 정사각형을 배치하여 (3,3)의 s를 보기에서 제거합니다. 노드를 다른 개체로 덮지 않고 올바르게 삭제하는 방법이 있습니까?

\documentclass{article}
\usepackage{tikz}
\usepackage{alphalph}
\begin{document}

\begin{tikzpicture}
\foreach \i in {0,...,4}
\foreach \j in {0,...,4} 
\node at (\i,\j) {$\alphalph{5*\j+\i+1}$};
\fill[color=white] (2.5,2.5) rectangle (3.5,3.5);
\end{tikzpicture}

\end{document}

답변1

다음을 시도해 보세요:

\documentclass[margin=3mm]{standalone}
\usepackage{tikz}
\usepackage{alphalph}

\begin{document}

\begin{tikzpicture}
\foreach \i in {0,...,4}
\foreach \j in {0,...,4}
{
    \pgfmathsetmacro{\x}{int(5*\j+\i+1)}
    \ifnum\x=19
        \else
    \node[anchor=mid]  at (\i,\j) {$\alphalph{\x}$};
    \fi;
}
\end{tikzpicture}

\end{document}

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

편집하다: 노드 스타일에 관한 @Andrew Stacey 의견이 고려됩니다. 이제 문자의 수직 정렬이 멋지게 되었습니다.

답변2

노드를 숨기는 가장 간단한 방법은 노드를 coordinate(텍스트도 없고 테두리도 없는 노드)로 변환하는 것입니다.

every coordinate이는 여전히 노드를 정의하고 좌표(스타일 및 labels 또는 기타 s와 같은 것 append after command) 에 유효한 모든 옵션을 계속 적용합니다 .

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}[letter s/.style=coordinate]
\foreach \l[count=\i from 0] in {a,...,y}
  \node[anchor=base, letter \l/.try] at ({mod(\i,5)},{int(\i/5)}) {$\l$};
\end{tikzpicture}
\end{document}

letter s좌표조차 배치되지 않도록 노드를 배치하는 스타일을 비활성화하기 위해 스타일을 사용할 수도 있습니다 .

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}[
  place node/.style={insert path={
    node[anchor=base] at ({mod(\i,5)},{int(\i/5)}) {$\l$}}},
  letter s/.style={place node/.style=}]
\foreach \l[count=\i from 0] in {a,...,y}
  \path [letter \l/.try, place node];
\end{tikzpicture}
\end{document}

18이를 위한 하나의 루프를 사용하면 ( ) 만 건너뛸 수 있습니다 s.

\documentclass[tikz]{standalone}
\usepackage{alphalph}
\begin{document}
\begin{tikzpicture}
\foreach \i in {0,...,17,19,20,...,24}
  \node[anchor=base] at ({mod(\i,5)},{int(\i/5)}) {$\alphalph{\i+1}$};
\end{tikzpicture}
\end{document}

또는 다음 없이 다시 alphalph:

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
\foreach \l[count=\i from 0, evaluate={\I=\i+(\i>17?1:0);}] in {a,...,r,t,u,...,y}
  \node[anchor=base] at ({mod(\I,5)},{int(\I/5)}) {$\l$};
\end{tikzpicture}
\end{document}

그리고 간단한 node if키를 사용하면 경로에 노드를 놓을 수 없습니다.

\documentclass[tikz]{standalone}
\usetikzlibrary{ext.misc}
\tikzset{node if/.style 2 args={/utils/if={#1}{insert path={node#2}}{}}}
\begin{document}
\begin{tikzpicture}
\foreach \l[count=\i from 0] in {a,...,y}
  \path [node if={\i!=18}{[anchor=base] at ({mod(\i,5)},{int(\i/5)}) {$\l$}}];
\end{tikzpicture}
\end{document}

물론, 첫 번째 예와 같이 간단히 노드에 /utils/if적용하는 데에도 사용할 수 있습니다 .coordinate

관련 정보