我正在尝试绘制一些网格,每个点都根据坐标用特定颜色圈出。我在网上找到一些使用 ifthen 包来包含 if 语句的代码,如果我按条件“if \x=\y”为对角点着色,则以下代码有效
\usepackage{tikz, ifthen}
\begin{tikzpicture}
\foreach \x in {0,1,...,6}
{
\foreach \y in {0,1,...,6}
{
\ifthenelse{\x=\y}{\def\col{red}}{\def\col{black}}
\node[draw,circle,inner sep=1.5pt,fill,color=\col] at (\x,\y) {};
}
}
\end{tikzpicture}
但是现在我需要给非对角线着色,这应该以 \x=\y+1 为条件,如果我用条件改变 \ifthenelse
\ifthenelse{\x=\y+1}{\def\col{red}}{\def\col{black}}
情节仍然是对角线元素着色。我也尝试
\ifthenelse{\x-\y=1}{\def\col{red}}{\def\col{black}}
那么只有原点是红色的。如何对变量进行数学运算并使其与 \ifthenelse 一起工作是相当令人困惑的
答案1
使用 pgf 内置的功能ifthenelse
。
\documentclass[tikz,border=3mm]{standalone}
\begin{document}
\begin{tikzpicture}
\foreach \x in {0,1,...,6}
{
\foreach \y in {0,1,...,6}
{
\pgfmathsetmacro{\col}{ifthenelse(\x==\y,"red",ifthenelse(\x==\y+1,"blue","black"))}
\node[draw,circle,inner sep=1.5pt,fill,color=\col] at (\x,\y) {};
}
}
\end{tikzpicture}
\end{document}
答案2
TikZ 通过 运行所有内容\pgfmathparse
,允许使用数学表达式,但 ifthen 不允许。因此{\x=\y+1}
实际上比较宏\x
和\y
并忽略+1
(因为它仍然设置主对角线)。
另外,我假设您不想将主对角线重置为黑色。
\documentclass{standalone}
\usepackage{tikz, ifthen}
\begin{document}
\begin{tikzpicture}
\foreach \x in {0,1,...,6}
{
\foreach \y in {0,1,...,6}
{
\ifthenelse{\x=\y}{\def\col{red}}{\def\col{black}}
\pgfmathparse{\y+1}
\ifthenelse{\x=\pgfmathresult}{\def\col{blue}}{}
\node[draw,circle,inner sep=1.5pt,fill,color=\col] at (\x,\y) {};
}
}
\end{tikzpicture}
\end{document}