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など) が適用されます。labelappend 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これを 1 回ループするだけで、 ( )をスキップできます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

関連情報