Eccomi.
Ho sistemato il prefisso. Grazie. Ed ecco il codice completo compilabile e funzionante.
Quando serve solo il numero uso \num{\getdata{
`\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[italian]{babel}
\usepackage{siunitx}
\usepackage{eurosym}
\usepackage{booktabs}
\sisetup{output-decimal-marker={,},
round-mode = places,
round-precision = 2,
round-integer-to-decimal}
% prefix name
% gds := gestione dati sal
\ExplSyntaxOn
\fp_new:N \g_gds_impsal_fp
\fp_new:N \g_gds_implavnetto_fp
\fp_new:N \g_gds_impsalnetto_fp
\cs_new:Nn \gds_process_values:
{
\fp_set:Nn \g_gds_impsal_fp
{
\fp_use:N \g_gds_implav_fp + \fp_use:N \g_gds_impsic_fp
}
\fp_set:Nn \g_gds_implavnetto_fp
{
( 1 – \fp_use:N \g_gds_rib_fp/100 ) * \fp_use:N \g_gds_implav_fp
}
\fp_set:Nn \g_gds_impsalnetto_fp
{
\fp_use:N \g_gds_implavnetto_fp + \fp_use:N \g_gds_impsic_fp
}
}
\prop_new:N \g_gds_salval_prop
\cs_new:Nn \gds_save_values:
{
\prop_gput:NnV \g_gds_salval_prop { numsal } \g_gds_numsal_tl
\prop_gput:Nnx \g_gds_salval_prop { impsal }
{
\fp_use:N \g_gds_impsal_fp
}
\prop_gput:Nnx \g_gds_salval_prop { implav }
{
\fp_use:N \g_gds_implav_fp
}
\prop_gput:Nnx \g_gds_salval_prop { impsalnetto }
{
\fp_use:N \g_gds_impsalnetto_fp
}
\prop_gput:Nnx \g_gds_salval_prop { implavnetto }
{
\fp_use:N \g_gds_implavnetto_fp
}
\prop_gput:Nnx \g_gds_salval_prop { impsic }
{
\fp_use:N \g_gds_impsic_fp
}
\prop_gput:Nnx \g_gds_salval_prop { rib }
{
\fp_use:N \g_gds_rib_fp
}
}
\keys_define:nn { gdsfamily }
{
numsal .tl_set:N = \g_gds_numsal_tl,
numsal .default:n = x,
implav .fp_set:N = \g_gds_implav_fp,
impsic .fp_set:N = \g_gds_impsic_fp,
rib .fp_set:N = \g_gds_rib_fp,
}
\NewDocumentCommand { \setdata } { m }
{
\keys_set:nn { gdsfamily }
{ #1 }
\gds_process_values:
\gds_save_values:
}
\DeclareExpandableDocumentCommand { \getdata } { m }
{
\prop_get:Nn \g_gds_salval_prop { #1 }
}
\ExplSyntaxOff
\setdata{
numsal = 3,
implav = 12819.01,
impsic = 1000,
rib = 25.151,
}
\begin{document}
% ok
Il numero del sal è \getdata{numsal} per un valore di \SI{\getdata{impsal}}{\euro}, di cui \SI{\getdata{impsic}}{\euro} sono oneri di sicurezza. Il valore netto in euro dei lavori è \num{\getdata{implavnetto}}.
% ok
\bigskip
\begin{tabular}{cccc}
\toprule
Lavori & Sicurezza & Totale SAL & Totale netto\\
\euro & \euro & \euro & \euro \\
\midrule
\num{\getdata{implav}} & \num{\getdata{impsic}} & \num{\getdata{impsal}} & \num{\getdata{impsalnetto}}\\
\bottomrule
\end{tabular}
\end{document}`
Per aumentare la leggibilità del codice (cosa che con TeX penso sia molto più difficile), si può anche creare la seguente funzione di servizio:
`\cs_new:Nn \gds_savein_fpval:n
{
\prop_gput:Nnx \g_gds_salval_prop { #1 }
{
\fp_use:c { g_gds_#1_fp }
}
}`
Da usare poi così:
`\cs_new:Nn \gds_save_values:
{
\prop_gput:NnV \g_gds_salval_prop { numsal } \g_gds_numsal_tl
\gds_savein_fpval:n { impsal }
\gds_savein_fpval:n { implav }
\gds_savein_fpval:n { impsalnetto }
\gds_savein_fpval:n { implavnetto }
\gds_savein_fpval:n { impsic }
\gds_savein_fpval:n { rib }
}`
Probabilmente si può fare ancora meglio…
Un saluto e buon weekend3!
R.