我创建了一个宏,用于绘制具有给定高度的三角形。我希望将三个底边长度分别格式化为 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 的舍入功能:
您只需传递几个选项:
round-mode=places
. 将设置舍入精度为小数点后的位数。round-precision=1
。此项与前面的选项结合使用,将返回一位小数。zero-decimal-to-integer
。这将四舍五入5.0
为5
您想要的结果。
您可以在本地将选项传递给\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}