
Este código coloca o alfabeto inglês de a a y em um quadrado de 5 por 5 e, em seguida, remove s em (3,3) de vista, impondo-lhe um quadrado branco. Existe uma maneira de excluir corretamente um nó em vez de cobri-lo com outros 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}
Responder1
Experimente o seguinte:
\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}
Editar: Considerado o comentário de @Andrew Stacey sobre o estilo dos nós. Agora o alinhamento vertical das letras está ótimo.
Responder2
A maneira mais simples de ocultar um nó é convertê-lo em um coordinate
(que é apenas um nó sem texto e sem borda).
Isso ainda definirá um nó e ainda aplicará todas as opções que seriam válidas para uma coordenada (o estilo every coordinate
e coisas como label
s ou outros 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}
Também podemos usar o letter s
estilo para desabilitar um estilo que colocaria um nó de forma que nem mesmo uma coordenada fosse colocada.
\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}
Com um loop para isso, você pode simplesmente pular o 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}
Ou novamente sem 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}
E com uma chave simples node if
você simplesmente não consegue colocar um nó no caminho:
\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}
Claro, o /utils/if
também pode ser usado simplesmente para aplicar coordinate
ao nó como no primeiro exemplo.