Re: [risolto] plain – confronto condizionale fra stringhe

#58842
Up
0
Down
::

… la risposta corretta è
`\def\param{moebius}
\def\test#1#2#3#4{%
\def\next{#4}%
\ifx\next\param
Well done job!%
\else
Ah no! Il quarto parametro deve %
contenere la stringa `\param'%
\fi}`

In alternativa

`\usepackage{etoolbox}
\def\test#1#2#3#4{%
\ifstrequal{#4}{moebius}
{Well done job!}
{Ah no! Il quarto parametro deve %
contenere la stringa `\param'}}`
Ciao
Enrico

… \ifstrequal ha un comportamento molto simile a quello suggerito da te:

`\newrobustcmd{\ifstrequal}[2]{%
\begingroup
\edef\etb@tempa{\detokenize{#1}}%
\edef\etb@tempb{\detokenize{#2}}%
\ifx\etb@tempa\etb@tempb
\aftergroup\@firstoftwo
\else
\aftergroup\@secondoftwo
\fi
\endgroup}`

non capisco però una cosa: \ifx, se ha in input delle macro, le consdera uguali se tali sono a seguito di una “top-level expansion” [TB pg. 210]. Nel caso di sopra, a seguito di una top-level expansion, \etb@tempa restituisce ancora una macro (cioè \detokenize{#1}) e, nel caso specifico, il risultato della comparazione dovrebbe essere sempre false.

O forse mi sfugge il significato di top-level expansion…

Hai il tempo di scrivere due righe di chiarimento?

Grazie, ciao.

Sam Qasbah (che, a letto con un infezione virale, trova il tempo di approfondre le cose)

Go to top