robitex” post=80214Ciao,
guardate come è semplice in LaTeX3 definire un comando con un primo argomento opzionale, un secondo argomento obbligatorio ed un terzo argomento ancora opzionale.`\NewDocumentCommand { \numx } { o m o }
{
\tl_set:Nx \l_tmpa_tl { #2 }
\IfValueTF { #3 }
{
\IfValueTF { #1 }
{
\SI[#1]{ \tl_use:N \l_tmpa_tl }{ #3 }
}
{
\SI{ \tl_use:N \l_tmpa_tl }{ #3 }
}
}
{
\IfValueTF { #1 }
{
\num[#1]{ \tl_use:N \l_tmpa_tl }
}
{
\num{ \tl_use:N \l_tmpa_tl }
}
}
}`Lo scopo è quello di riunire in un unico comando \num e \SI entrambe del pacchetto siunitx.
Posso quindi scrivere:
`un numero \numx{120.12}
un numero con opzioni \numx[round-precision=2]{120.123}
un numero con unità di misura \numx{12.23}[\percent]
un numero con unità di misura ed opzioni \numx[round-precision=3]{12.123}[\percent]
`Ciao.
R.
Può essere ancora più semplice. Non vedo la necessità di espandere il secondo argomento, ma si può discuterne.
`\ExplSyntaxOn
\NewDocumentCommand{\numx}{ O{} m o }
{
\IfValueTF{#3}
{
\SI[#1]{#2}{#3}
}
{
\num[#1]{#2}
}
}
\ExplSyntaxOff`
Se proprio vuoi l’espansione completa del secondo argomento, meglio fare così:
`\ExplSyntaxOn
\NewDocumentCommand{\numx}{ O{} m o }
{
\IfNoValueTF{#3}
{ \robitex_numx:nx { #1 } { #2 } }
{ \robitex_numx:nxn { #1 } { #2 } { #3 } }
}
\cs_new_protected:Npn \robitex_numx:nn { \num[#1]{#2} }
\cs_new_protected:Npn \robitex_numx:nnn { \SI[#1]{#2}{#3} }
\cs_generate_variant:Nn \robitex_numx:nn { nx }
\cs_generate_variant:Nn \robitex_numx:nnn { nx }
\ExplSyntaxOff`
Ciao
Enrico