Wie entferne ich einen Tikz-Knoten?

Wie entferne ich einen Tikz-Knoten?

Dieser Code platziert das englische Alphabet von A bis Y in einem 5 x 5 Quadrat und entfernt dann s in (3,3) aus der Ansicht, indem ein weißes Quadrat darauf gelegt wird. Gibt es eine Möglichkeit, einen Knoten richtig zu löschen, anstatt ihn mit anderen Objekten zu bedecken?

\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}

Antwort1

Versuche Folgendes:

\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}

Bildbeschreibung hier eingeben

Bearbeiten: Berücksichtigt wird der Kommentar von @Andrew Stacey zum Knotenstil. Jetzt ist die vertikale Ausrichtung der Buchstaben schön.

Antwort2

Die einfachste Möglichkeit, einen Knoten auszublenden, besteht darin, ihn in einen umzuwandeln coordinate(was lediglich ein Knoten ohne Text und Rahmen ist).

Dadurch wird weiterhin ein Knoten definiert und alle Optionen werden angewendet, die für eine Koordinate gültig wären (der Stil every coordinateund Dinge wie labels oder andere append after commands).

\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}

Wir können den letter sStil auch verwenden, um einen Stil zu deaktivieren, der einen Knoten platzieren würde, sodass nicht einmal eine Koordinate platziert wird.

\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}

Da hierfür nur eine Schleife vorhanden ist, können Sie die 18( s) einfach überspringen.

\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}

Oder nochmal ohne 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}

Und mit einem einfachen node ifSchlüssel können Sie einfach keinen Knoten auf den Pfad setzen:

\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}

Natürlich /utils/ifkann es auch einfach zum Anwenden auf den Knoten verwendet werden, coordinatewie im ersten Beispiel.

verwandte Informationen