我试图找到一种在 tikz 中以特定方式写入数字的方法(我想去掉“.0”。请参阅下面的代码)。我挣扎了一段时间,直到我发现percusse 的回答(我不知道 int() 函数存在)。现在我有一个可以满足我需求的解决方案。
然而,在我寻找完美的数字格式时,我偶然发现这个文件。在第 92 节 - 数字打印(第 945 页)中,描述了 \pgfmathprintnumber 和 \pgfkeys 命令/宏以及 \pgfkeys 的格式/精度选项。这似乎是个好主意,但由于某种原因,它不起作用。我仍然不明白为什么它不起作用。以下是示例代码:
\documentclass[10pt]{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\pgfkeys{/pgf/number format/.cd,fixed,precision=0} % "precision = 0" does not print the trailling zeroes
\draw[domain=0:10,smooth,variable=\x,blue,samples=100] plot ({\x},{sin(\x * pi r)}); % Sine
\draw (0, 0) node[left] {AC voltage};
\draw[dashed] (0, 0) -- (10, 0);
\foreach \x in {0, 2, ..., 10} { \draw[dashed] (\x, -1.25) -- (\x, 2); } % Vertical lines
\foreach \x in {0, 2, ..., 8}
{
% Problematic line:
\draw[<->] (\x, -1.2) -- node[below] {\pgfmathprintnumber{\x/2+1}} (\x + 2, -1.2); % This line doesn't work
% \draw[<->] (\x, -1.2) -- node[below] {\pgfmathparse{int(\x/2+1)}\pgfmathresult} (\x + 2, -1.2); % This line works perfectly
}
\end{tikzpicture}
\end{document}
我得到的错误是
! Package PGF Math Error: Could not parse input '0/2+1' as a floating point number, sorry. The unreadable part was near '/2+1'..
我尝试使用 \pgfmathprintnumberto 和 format/fixed zerofill=boolean,如手册,但似乎没有什么效果。
提前致谢!
答案1
您需要使用\pgfmathparse
进行计算,然后\pgfmathprintnumber
打印结果。
这是您修改后的 MWE:
\documentclass[10pt]{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\pgfkeys{/pgf/number format/.cd,fixed,precision=0} % "precision = 0" does not print the trailling zeroes
\draw[domain=0:10,smooth,variable=\x,blue,samples=100] plot ({\x},{sin(\x * pi r)}); % Sine
\draw (0, 0) node[left] {AC voltage};
\draw[dashed] (0, 0) -- (10, 0);
\foreach \x in {0, 2, ..., 10} { \draw[dashed] (\x, -1.25) -- (\x, 2); } % Vertical lines
\foreach \x in {0, 2, ..., 8}
{
% Problematic line:
\draw[<->] (\x, -1.2) -- node[below] {\pgfmathparse{\x/2+1}\pgfmathprintnumber\pgfmathresult} (\x + 2, -1.2); % This line doesn't work
}
\end{tikzpicture}
\end{document}