如何刪除 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

隱藏節點最簡單的方法是將其轉換為 a coordinate(這只是一個無文字且無邊框的節點)。

這仍然會定義一個節點,並且仍然套用對座標有效的所有選項(樣式every coordinate以及諸如labels 或其他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}

我們也可以使用該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( 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節點。

相關內容