Consegui montar uma tabela de valores trigonométricos usando expl3
. No entanto, gostaria de preencher zeros até o final para que todos os valores tenham quatro casas decimais. Existe uma maneira direta de fazer isso expl3
ou preciso criar minha própria macro para lidar com isso?
Isso está relacionado a uma pergunta semelhante que acabei de postar:Existe uma maneira simples de melhorar a precisão do pgfmath para funções trigonométricas?
Aqui está meu MWE:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\def\mynum{0}
\def\myvoffset{0pt}
\usepackage{xparse}
\ExplSyntaxOn
\def\aetan#1{\fp_eval:n { round ( tand ( #1 ), 4 )}}
\def\aesin#1{\fp_eval:n { round ( sind ( #1 ), 4 )}}
\def\aecos#1{\fp_eval:n { round ( cosd ( #1 ), 4 )}}
\def\aemod#1{\fp_eval:n { #1 - round0 ( #1 / 5 , 0 ) * 5}}
\ExplSyntaxOff
\usepackage[margin=0.5in]{geometry}
\begin{document}
Using \LaTeX3
\begin{tikzpicture}
\coordinate(UL) at (0,0);
\node at (UL) {Degrees};
\node[anchor=west] at ($(UL.west)+(1cm,0)$) {$\sin$};
\node[anchor=west] at ($(UL.west)+(2.75cm,0)$) {$\cos$};
\node[anchor=west] at ($(UL.west)+(4.50cm,0)$) {$\tan$};
\foreach \myn in {1,2,3,...,45}
{
\ifnum\aemod{(\myn-1)}=0\relax
\xdef\myvoffset{\dimexpr\myvoffset+1.350\baselineskip}%%
\else
\xdef\myvoffset{\dimexpr\myvoffset+1.00\baselineskip}%%
\fi
\coordinate (DEG/\myn) at ($(UL.west)-(0,\myvoffset)$);
\coordinate (DEG/S/\myn) at ($(DEG/\myn)+(1cm,0)$);
\coordinate (DEG/C/\myn) at ($(DEG/S/\myn)+(1.75cm,0)$);
\coordinate (DEG/T/\myn) at ($(DEG/C/\myn)+(1.75cm,0)$);
\node[anchor=east] at (DEG/\myn) {$\myn^\circ$};
\node[anchor=west] at (DEG/S/\myn) {\texttt{\aesin{\myn}}};
\node[anchor=west] at (DEG/C/\myn) {\texttt{\aecos{\myn}}};
\node[anchor=west] at (DEG/T/\myn) {\texttt{\aetan{\myn}}};
}
\end{tikzpicture}
\end{document}
Responder1
Encontrei uma solução, embora não seja uma expl3
solução. Eu uso o siunitx
pacote da seguinte maneira:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{siunitx}
\sisetup{add-decimal-zero,
round-precision=4,
round-mode=places,
round-integer-to-decimal,
detect-all}
\def\mynum{0}
\def\myvoffset{0pt}
\usepackage{xparse}
\ExplSyntaxOn
\def\aetan#1{\num{\fp_eval:n { round ( tand ( #1 ), 4 )}}}
\def\aesin#1{\num{\fp_eval:n { round ( sind ( #1 ), 4 )}}}
\def\aecos#1{\num{\fp_eval:n { round ( cosd ( #1 ), 4 )}}}
\def\aemod#1{\fp_eval:n { #1 - round0 ( #1 / 5 , 0 ) * 5}}
\ExplSyntaxOff
\usepackage[margin=0.5in]{geometry}
\begin{document}
Using \LaTeX3
\begin{tikzpicture}
\coordinate(UL) at (0,0);
\node at (UL) {Degrees};
\node[anchor=west] at ($(UL.west)+(1cm,0)$) {$\sin$};
\node[anchor=west] at ($(UL.west)+(2.75cm,0)$) {$\cos$};
\node[anchor=west] at ($(UL.west)+(4.50cm,0)$) {$\tan$};
\foreach \myn in {1,2,3,...,45}
{
\ifnum\aemod{(\myn-1)}=0\relax
\xdef\myvoffset{\dimexpr\myvoffset+1.350\baselineskip}%%
\else
\xdef\myvoffset{\dimexpr\myvoffset+1.00\baselineskip}%%
\fi
\coordinate (DEG/\myn) at ($(UL.west)-(0,\myvoffset)$);
\coordinate (SIN/\myn) at ($(DEG/\myn)+(1cm,0)$);
\coordinate (COS/\myn) at ($(SIN/\myn)+(1.75cm,0)$);
\coordinate (TAN/\myn) at ($(COS/\myn)+(1.75cm,0)$);
\node[anchor=east] at (DEG/\myn) {$\myn^\circ$};
\node[anchor=west] at (SIN/\myn) {\texttt{\aesin{\myn}}};
\node[anchor=west] at (COS/\myn) {\texttt{\aecos{\myn}}};
\node[anchor=west] at (TAN/\myn) {\texttt{\aetan{\myn}}};
}
\end{tikzpicture}
\end{document}