为什么此代码会产生一些不在对角线上的值?总共有九个,都在对角线下方。
\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}