Re: Definire un condizionale come alias di un altro

#90749
OldClaudio
Partecipante
    Up
    0
    Down
    ::

    Ti riferisci a \ifbool e simili? La sintassi di ifthen non mi è mai piaciuta, quella di etoolbox sembra simile. Se posso evito i condizionali con graffe, che poi possono richiedere anche di metterci i %… Trovo molto più elegante e leggibile la sintassi nativa di TeX.

    Secondo me la sintassi originale di TeX è fragile, perché è facile dimenticarsi di usare un numero sufficiente di \expandafter er non lasciare delle espressioni condizionali aperte.

    Invece i comandi del tipo \ifcsdef, sono decisamente robusti anche se le due frasi vanno messe dentro due gruppi; garantiscono la robusezza, perché prima viene valutata la verità di qualcosa, poi con di debiti \expandafter viene eseguito con \@firstoftwo e \@secondoftwo solo il contenuto di no dei due gruppi; ciascuno di questi gruppi può contenere altri condizionali. Non dico che si debbano sempre usare quei condizionali lì e le espressioni logiche loro collegate, che rischiano di diventare complesse, ma quello è anche il principio dei condizionali di LaTeX (simili a quello del tuo esempio, ma robusti) come \@ifpackageloaded e simili. Sia quelli di LaTeX sia quello dell’esempio che riporti, pur cominciando con \if, non sono definiti come condizionali, ma come normali macro che, evidentemente, contengono almeno un condizionale al loro interno e, tranne l’esempio che riporti, i fatidici \@firstoftwo e \@secondoftwo. In certi casi ho visto usare il \@firstofone, e in hyperref ci osno anche i 5 \@firstoffive,…,\@fiftoffive.

    Trucchi che dovremmo usare più spesso quando scriviamo pacchetti. Forse rendono più oscuro il codice, ma certamente lo rendo più robusto. Il codice del tuo esempio riportato da TeXbyTopic dovrebbe quindi essere con etoolbox`\def\ifEqString#1#2{\ifstrequal{#1}{#2}{vero}{falso}}` decisamente più semplice; se poi si mettono due semplici commenti è ancora più chiaro:`
    \def\ifEqString#1#2{% confronta due stringhe
    \ifstrequal{#1}{#2}{% vero
    vero
    }{% falso
    falso
    }}`

    Non parliamo dei test di babel come [tt]\bbl@afterfi[/tt] e [tt]\bbl@afteresle[/tt] che dovrebbero essere robusti, ma non lo sono, proprio per la mancanza di gruppi.

    Go to top