\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\foreach \x in{0,0.1,...,0.5}{
\node[] at (20*\x,0) {\x};
}
\end{tikzpicture}
\end{document}
但是,如下:
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\foreach \x in{0,0.125,...,0.5}{
\node[] at (20*\x,0) {\x};
}
\end{tikzpicture}
\end{document}
这是正常的。
答案1
欢迎来到 TeX.SE。正如评论中所说,这是一个精度问题,因为 TikZ 执行浮点计算的方式(\dimen
默认情况下它使用 TeX 寄存器)。由于计算的数字是很接近到所需的精度,您只需要使用\pgfmathprintnumber
以便排版将数字四舍五入到所需的精度:
\documentclass[tikz,border=1mm]{standalone}
\begin{document}
\begin{tikzpicture}
\foreach \x in {0, 0.1, ..., 0.5} {
\node at (20*\x, 0) {%
\pgfmathprintnumber[fixed, precision=1]{\x}%
};
}
\end{tikzpicture}
\end{document}
底线:计算是一回事,通常并不完全准确。数字格式化是另一件\pgfmathprintnumber
做得很好的事情。
答案2
除了显示数字的精度(如其他解决方案中所述)之外,还存在缺少节点的问题。在第一个 foreach 循环中,最后一个节点未显示,因为 PGF 认为下一个值大于,因此0.50003
超出0.5
了循环的界限。
正如 Symbol1 在评论中所说,最好在使用语法时在循环中使用整数,...
以确保不会发生这种情况。这意味着坐标计算需要更改,但这很容易合并。稍微复杂一点的是计算显示的数字。这可以在节点文本本身中使用,pgfmathparse{\x/10}\pgfmathprintnumber[fixed, precision=1]{\pgfmathresult}
也可以在 foreach 循环本身中完成(如果您要多次使用该数字,这会更有用)。
\documentclass{standalone}
%\url{https://tex.stackexchange.com/q/610368/86}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\foreach \x in{0,0.1,...,0.5}{
\node[] at (20*\x,0) {\x};
}
\end{tikzpicture}
\begin{tikzpicture}
\foreach[evaluate=\x as \displayx using \x/10] \x in{0,1,...,5}{
\node[] at (2*\x,0) {\pgfmathprintnumber[fixed, precision=1]{\displayx}};
}
\end{tikzpicture}
\end{document}
答案3
借用并改编了 frugon 的技术,半逻辑轴的精度
\documentclass{standalone}
\usepackage{pgfplots, tikz}
\begin{document}
\begin{tikzpicture}
\foreach \x in{0,0.1,...,0.5}{
\node[] at (20*\x,0) {\pgfmathprintnumber{\x}};
}
\end{tikzpicture}
\end{document}