如何在 tikz 中的 siunitx 中格式化计算数字?

如何在 tikz 中的 siunitx 中格式化计算数字?

我创建了一个宏,用于绘制具有给定高度的三角形。我希望将三个底边长度分别格式化为 5、5.4 和 6。实现此目的的最佳方法是什么?是在 内tikz还是 内siunitx?我确实尝试了一些东西,tikz但我的文件没有编译。

\documentclass[12pt]{article}
\usepackage{tikz}
\usepackage{siunitx}


\newcommand{\triangleSHS}[4][]{%
\begin{tikzpicture}[x=1cm,y=1cm,#1]
\coordinate (O) at (0,0);
\path (O) ++(0:#2) coordinate (X);
\path (X) ++(90:#3) coordinate (B);
\path (X) ++(0:#4) coordinate (A);
\pgfmathparse{add(#2,#4)}
\draw (O)--node[below]{\SI{\pgfmathresult}{\centi\metre}}(A)--(B)--(O); 
\draw[dashed] (X)--node[right]{\SI{#3}{\centi\metre}}(B);
\end{tikzpicture}
}%


\begin{document}

\triangleSHS{2}{4}{3}

\triangleSHS{2.1}{4.2}{3.3}

\triangleSHS{2.5}{4}{3.5}

\end{document}

答案1

使用 siunitx 的舍入功能:

您只需传递几个选项:

  1. round-mode=places. 将设置舍入精度为小数点后的位数。
  2. round-precision=1。此项与前面的选项结合使用,将返回一位小数。
  3. zero-decimal-to-integer。这将四舍五入5.05您想要的结果。

您可以在本地将选项传递给\SI

\SI[round-mode=places, round-precision=1,zero-decimal-to-integer]{\pgfmathresult}{\centi\metre}

或者全局使用:

\sisetup{round-mode=places, round-precision=1,zero-decimal-to-integer}

进而:

 \SI{\pgfmathresult}{\centi\metre}

使用本地设置的选项进行编码:

\documentclass[12pt]{article}
\usepackage{tikz}
\usepackage{siunitx}

% Global configuration:
% \sisetup{round-mode=places, round-precision=1,zero-decimal-to-integer}

\newcommand{\triangleSHS}[4][]{%
\begin{tikzpicture}[x=1cm,y=1cm,#1]
\coordinate (O) at (0,0);
\path (O) ++(0:#2) coordinate (X);
\path (X) ++(90:#3) coordinate (B);
\path (X) ++(0:#4) coordinate (A);
\pgfmathparse{add(#2,#4)}
\draw (O)--node[below]{\SI[round-mode=places, round-precision=1,zero-decimal-to-integer]{\pgfmathresult}{\centi\metre}}(A)--(B)--(O); 
\draw[dashed] (X)--node[right]{\SI{#3}{\centi\metre}}(B);
\end{tikzpicture}
}%


\begin{document}

\triangleSHS{2}{4}{3}

\triangleSHS{2.1}{4.2}{3.3}

\triangleSHS{2.5}{4}{3.5}

\end{document}

相关内容