
이 코드는 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
이는 여전히 노드를 정의하고 좌표(스타일 및 label
s 또는 기타 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