TransWikia.com

How to format calculated number in siunitx within tikz?

TeX - LaTeX Asked on July 11, 2021

I have created a macro that draws a triangle with a given height. I would like the three base lengths to be formatted as 5, 5.4 and 6 respectively. What is the best way to achieve this? Wold it be within tikz or siunitx? I did try something from tikz but then my file didn’t compile.

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}{centimetre}}(A)--(B)--(O); 
draw[dashed] (X)--node[right]{SI{#3}{centimetre}}(B);
end{tikzpicture}
}%


begin{document}

triangleSHS{2}{4}{3}

triangleSHS{2.1}{4.2}{3.3}

triangleSHS{2.5}{4}{3.5}

end{document}

One Answer

Using the rounding capabilities of siunitx:

You just have to pass a few options:

  1. round-mode=places. Will set the rounding precision to the number of decimal places.
  2. round-precision=1. This, with the previous options, will give you one decimal place.
  3. zero-decimal-to-integer. This one will round the 5.0 to 5 to give what you want.

You can pass the options locally to SI with:

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

or globally with:

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

and then:

 SI{pgfmathresult}{centimetre}

Code with the options set locally:

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}{centimetre}}(A)--(B)--(O); 
draw[dashed] (X)--node[right]{SI{#3}{centimetre}}(B);
end{tikzpicture}
}%


begin{document}

triangleSHS{2}{4}{3}

triangleSHS{2.1}{4.2}{3.3}

triangleSHS{2.5}{4}{3.5}

end{document}

Correct answer by Phelype Oleinik on July 11, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP