¿Cómo eliminar el nodo tikz?

¿Cómo eliminar el nodo tikz?

Este código coloca el alfabeto inglés de la a a la y en un cuadrado de 5 por 5 y luego elimina la s en (3,3) de la vista imponiéndole un cuadrado blanco. ¿Existe alguna forma de eliminar correctamente un nodo en lugar de cubrirlo con otros objetos?

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

Respuesta1

Pruebe lo siguiente:

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

ingrese la descripción de la imagen aquí

Editar: Se considera el comentario de @Andrew Stacey sobre el estilo de los nodos. Ahora la alineación vertical de las letras está muy bien.

Respuesta2

La forma más sencilla de ocultar un nodo es convertirlo en coordinate(que es simplemente un nodo sin texto ni bordes).

Esto seguirá definiendo un nodo y seguirá aplicando todas las opciones que serían válidas para una coordenada (el estilo every coordinatey cosas como labels u otras 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}

También podemos usar el letter sestilo para deshabilitar un estilo que colocaría un nodo de modo que ni siquiera se coloque una coordenada.

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

Con un bucle para esto, puedes simplemente omitir el 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}

O nuevamente sin 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}

Y con una clave simple node ifsimplemente no puedes poner un nodo en la ruta:

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

Por supuesto, /utils/iftambién se puede utilizar simplemente para aplicarlo coordinateal nodo como en el primer ejemplo.

información relacionada