robitex” post=80046Ciao.
Ho fatto qualche nuovo esperimento con LaTeX3, provando a memorizzare valori true/false in una variabile sequence.
Il codice seguente funziona, ma vorrei sapere se ci sono cose che possono essere migliorate.
Per prima cosa definisco una nuova variabile sequence che ho chiamato \l_my_bool, poi creo due funzioni una per memorizzare valori booleani a seconda del valore di un numero intero (questo non è importante, è solo un modo per inserire valori veri o valori falsi), ed una per ‘visualizzare’ il contenuto della sequence.Quello che memorizzo realmente nella sequence è una delle due costanti \c_true_bool o \c_false_bool del kernel di LaTeX3.
Esiste un modo più elegante o più efficiente che non usare la funzione \seq_put_right:Nn con queste costanti?Nella funzione di stampa uso la funzione \bool_if:NTF, esiste un alternativa?
`\documentclass{minimal}
\usepackage{expl3}
\usepackage{xparse}\ExplSyntaxOn
% variabili
\seq_new:N \l_my_bool% funzioni
\cs_new:Nn \my_insertbool:n
{
\int_compare:nTF { #1 = 0 }
{ \seq_put_right:Nn \l_my_bool { \c_true_bool } }
{ \seq_put_right:Nn \l_my_bool { \c_false_bool } }
}\cs_new:Nn \my_printseq:
{
\seq_map_inline:Nn \l_my_bool
{
\bool_if:NTF ##1
{ Vero\par }
{ Falso\par }
}
}% comandi interfaccia utente
\NewDocumentCommand \bval { m }
{
\my_insertbool:n { #1 }
}\NewDocumentCommand \printval { }
{
\my_printseq:
}
\ExplSyntaxOff\begin{document}
\bval{1} % false
\bval{1-1} % true
\bval{0} % true
\bval{-1} % false
\bval{ 2 } % false\printval
\end{document}`
Grazie mille.
Ciao.
R.
Non userei affatto variabili boolean.
`\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\bval}{ m }
{
\robitex_bval:n { #1 }
}
\cs_new_protected:Npn \robitex_bval:n #1
{
\int_compare:nTF{ #1 = 0 }
{ \seq_gput_right:Nn \g_robitex_values_seq { 1 } } % true
{ \seq_gput_right:Nn \g_robitex_values_seq { 0 } } % false
}
\seq_new:N \g_robitex_values_seq
\NewDocumentCommand{\printval} { +m +m }
{
\robitex_printval: { #1 } { #2 }
}
\cs_new:Npn \robitex_printval: #1 #2
{
\seq_map_inline:Nn \g_robitex_values_seq
{ \int_compare:nTF { ##1 = 1 } { #1 } { #2 } }
}
\ExplSyntaxOff
\begin{document}
\bval{1} % false
\bval{1-1} % true
\bval{0} % true
\bval{-1} % false
\bval{ 2 } % false
\printval{Vero\par}{Falso\par}
\end{document}`
In sostanza, normalizzo vero con 1 e falso con 0 (come si conviene a un matematico). 🙂
Ciao
Enrico