Re: [L3] Salvare valori proprietà

#80881
Up
0
Down
::

robitex” post=80110L’idea è quella di inserire con la sintassi chiave valore una serie di dati, elaborarne numericamente alcuni e rendere disponibili i risultati con un altrettanto semplice comando \getdata{}.

Per il primo passo ci pensa l3keys, per il secondo l3fp e per il terzo l3prop:
`\documentclass{article}
[…]
`

Come vedete dal codice che segue la strategia descritta e che funziona abbastanza bene, ci sono un po’ di guai.
Non riesco ad espandere correttamente il numero nel comando \SI (funziona solo se memorizzo nella proprietà l’intera formattazione con siunitx.
Se per caso digito una chiave dalla sintassi sbagliata la compilazione si blocca indefinitivamente (per esempio un \getdata{nonesisto}).
Ho un po’ troppa ridondanza nei nomi tra funzioni e variabili, come si può notare dal codice delle funzioni \my_process_values: e \my_save_values: (la leggibilità non è il massimo)

Ho implementato il tutto anche in LuaTeX incontrando meno problemi. Non ho ancora risolto del tutto l’argomento con LuaTeX perciò non vi riporterò qui il codice.
Grazie per aver seguito fino a qui.
R.

Una tirata di orecchie: devi usare un prefisso per le tue funzioni e variabili.

Per inserire il valore espanso, puoi fare così:
`\cs_new:Nn \my_save_values:
{
\prop_gput:NnV \g_salval_prop { numsal } \g_numsal_tl
\prop_gput:Nnx \g_salval_prop { impsal }
{
\fp_use:N \g_impsal_fp
}
\prop_gput:Nnx \g_salval_prop { implav }
{
\exp_not:N \SI[ round-mode = places ,
round-precision = 2 ]
{ \fp_use:N \g_implav_fp }{ \exp_not:N \euro }
}

}`
Naturalmente correggerai con il prefisso. Nota [tt]\prop_gput:Nnx[/tt]; le variabili globali vanno sempre modificate globalmente.

Per l’ultimo problema:
`\DeclareExpandableDocumentCommand { \getdata } { m }
{
\prop_get:Nn \g_salval_prop { #1 }
}`
oppure, direttamente
`\cs_new:Npn \getdata #1 { \prop_get:Nn \g_salval_prop { #1 } }`

Ciao
Enrico

Go to top