Re: [L3] Chiave con valore di default di un’altra chiave

#80969
Up
0
Down
::

robitex” post=80202Ciao,
nel seguente codice LaTeX3 definisco due chiavi, la prima chiamata ‘name’ e la seconda chiamata ‘secname’ (secondo nome).
L’effetto che vorrei ottenere è che se non specifico un valore per la chiave secname, questa assuma il valore della chiave ‘name’.
`
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[italian]{babel}

\usepackage{expl3}
\usepackage{xparse}

\ExplSyntaxOn
\keys_define:nn { gdsfamily }
{
name .tl_set:N = \g_gds_name_tl,
name .default:n = Paperino,

secname .tl_set:N = \g_gds_secname_tl,
secname .default:V = \g_gds_name_tl % non funziona con .default:n si
}

\keys_set:nn { gdsfamily } { name }
\keys_set:nn { gdsfamily } { secname }

\NewDocumentCommand { \name } { }
{
\tl_use:N \g_gds_name_tl
}

\NewDocumentCommand { \secname } { }
{
\tl_use:N \g_gds_secname_tl
}
\ExplSyntaxOff

\begin{document}
Il nome è il seguente: \name{} \secname.
\end{document}`
Il codice non funziona, ma se cambio la funzione da .default:V a .default:n funziona, come mai?
Grazie R.

Con [tt].default:V= \g_gds_name_tl[/tt] imposti il valore di default al valore attuale della variabile che, naturalmente è vuoto perché [tt]name[/tt] non è ancora stata impostata, ma solo definita. Se usi [tt].default:n[/tt] come valore viene presa la variabile [tt]\g_gds_name_tl[/tt]. Se infatti provi senza impostare un valore per [tt]name[/tt] avrai un valore vuoto.

Devi definire la chiave in modo diverso:
`\keys_define:nn { gdsfamily }
{
secname .code:n =
\tl_if_empty:nTF { #1 }
{ \tl_gset:NV \g_gds_secname_tl \g_gds_name_tl }
{ \tl_gset:Nn \g_gds_secname_tl { #1 } }
}`
Tiratina d’orecchie quotidiana. 🙂 Le variabili globali vanno sempre usate globalmente. Quindi [tt]_gset[/tt], non [tt]_set[/tt].

Ciao
Enrico

Go to top