
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}
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 coordinate
und Dinge wie label
s oder andere append after command
s).
\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 s
Stil 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 if
Schlü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/if
kann es auch einfach zum Anwenden auf den Knoten verwendet werden, coordinate
wie im ersten Beispiel.