Re: Catturare e formattare la prima parola di una frase

#60849
Up
0
Down
::

Ritento la fortuna. Eccome come espande la macro senza @

`\@fmtfirsttoken{\bfseries}{This}{has to be tested}`

ed a sua volta

`\itshape\bfseries{This} has to be tested`

Domanda: quando \@fmtfirsttoken “legge” #2, tutti caratteri prima della spazio sono considerati un unico token?

Assumiamo che \mytext si espanda a “This has to be tested” (senza le virgolette):
`\fmtfirsttoken{\bfseries}{\mytext}
\expandafter\@fmtfirsttoken\expandafter\bfseries\mytext*\@nil
\@fmtfirsttoken\bfseries This*has*to*be*tested*\@nil`
Siccome qui gli spazi sono significativi, mostro con * quelli “veri”; per esempio quello dopo \bfseries c’è solo per motivi “tipografici”, ma non per TeX.

Il primo argomento di \@fmtfirsttoken è il primo token (o il primo gruppo tra graffe che si incontra, ma in questo caso c’è solo \bfseries); il secondo argomento è tutto ciò che segue fino al primo spazio, il terzo argomento tutto ciò che va da quello spazio fino al primo \@nil. Dunque in questo caso

#1 <- \bfseries #2 <- This #3 <- has*to*be*tested* Se l'espansione di \mytext fosse solo "This", il terzo argomento sarebbe vuoto; per questo c'è uno spazio "in più" prima di \@nil nella definizione di \fmtfirsttoken. Non confondere "token" con "argomento", se vuoi addentrarti nelle macro con argomenti delimitati. :) Ciao Enrico

Go to top