Re: [L3] Salvare valori proprietà

#80882
robitex
Amministratore del forum
    Up
    0
    Down
    ::


    Eccomi.
    Ho sistemato il prefisso. Grazie. Ed ecco il codice completo compilabile e funzionante.
    Quando serve solo il numero uso \num{\getdata{}} come nella tabella, e quando serve anche l’unità di misura uso \SI, come nel testo:
    `\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.

    Go to top