某些循环内的 \ifthenelse 问题

某些循环内的 \ifthenelse 问题

为什么此代码会产生一些不在对角线上的值?总共有九个,都在对角线下方。

\documentclass{article}
\usepackage{tikz}
\usepackage{ifthen}
\begin{document}

\begin{tikzpicture}
\clip[](.75,.75)rectangle(7.75,7.75);
\foreach \x in {1,...,7}
{
\foreach \y in {1,...,7}
{
%\pgfmathsetmacro{\rapporto}{\x/\y}
\pgfmathtruncatemacro{\rapporto}{\x/\y}
\ifthenelse
{1=\rapporto}
{\node[scale=1,red]at(\x,\y){$\x/\y$};}
{}
}
}
\end{tikzpicture}
\end{document}

答案1

这是因为\pgftruncatemacro会截断您的结果,然后\x和的某些组合\y将给出1。使用这个:

\documentclass{article}
\usepackage{tikz}
\usepackage{ifthen}

\begin{document}

\begin{tikzpicture}
\clip[](.75,.75)rectangle(7.75,7.75);
\foreach \x in {1,...,7}
{
\foreach \y in {1,...,7}
{
\ifnum\x=\y
 \node[scale=1,red]at(\x,\y){$\x/\y$};
\else
 \relax
\fi
}
}
\end{tikzpicture}
\end{document}

答案2

为了了解为什么会出现这种情况,输出整个 (7 x 7) 矩阵的值,其\rapporto计算结果为:

在此处输入图片描述

\foreach \x in {1,...,7} {%
  \foreach \y in {1,...,7} {%
    \pgfmathtruncatemacro{\rapporto}{\x / \y}%
    \rapporto~%
  }%
  \par
}

您将看到对角线的计算结果为 1,但其他元素也是如此(因为截断略大于 1 的值将导致 1)。如果您想专注于对角线,请考虑条件\x = \y。此外,没有必要ifthen

在此处输入图片描述

\documentclass{article}

\usepackage{tikz}

\begin{document}

\begin{tikzpicture}
  \clip (.75, .75) rectangle (7.75, 7.75);
  \foreach \x in {1,...,7} {%
    \foreach \y in {1,...,7} {%
      \ifx\x\y% \x == \y
        \node [red] at (\x, \y){$\x / \y$};
      \else% \x != y
        \node [black] at (\x, \y){$\x / \y$};
      \fi
    }
  }
\end{tikzpicture}

\end{document}

相关内容