Re: Definizione comando e comando asteriscato

#18899
Up
0
Down
::

Scusa Enrico per cosa sta
`
\@dblarge
`
Provo anch’io ad applicarmi…

È \@dblarg. Serve per fornire automaticamente un argomento opzionale se non è dato. La definizione di \@chapter è
`\def\@chapter[#1]#2{…}`
e quindi \@chapter si aspetta di trovare una parentesi quadra subito dopo. Dando \@dblarg{\@chapter} si hanno due casi
`\@dblarg{\@chapter}{arg}
\@dblarg{\@chapter}[optarg]{arg}`
Nel primo caso il risultato è come se si fosse dato
`\@chapter[arg]{arg}`
nel secondo invece risulta
`\@chapter[optarg]{arg}`
Naturalmente tutto questo è nascosto all’utente. Chi scrive \chapter{Pippo} non ha bisogno di sapere che “Pippo” non è in realtà l’argomento di \chapter (che di fatto non è una macro con argomenti :!:) né che, se scrive \chapter[Pluto]{Pippo}, non sta dando veramente un argomento opzionale a \chapter.

La macro \chapter viene trasformata in
`\@dblarg{\@chapter}`
e, a questo punto, accade la magia di cui sopra.

Riassumendo: se vuoi definire un comando \xxx che abbia un argomento opzionale e uno obbligatorio, con la clausola che se l’argomento opzionale manca sia considerato uguale a quello obbligatorio, le strade sono due:
`\newcommand{\xxx}[2][]{%
\def\next{#1}%
\ifx\next\@empty
\@xxx[#2]{#2}%
\else
\@xxx[#1]{#2}
\fi}
\def\@xxx[#1]#2{}`
Oppure si può scrivere
`\newcommand{\xxx}{\@dblarg{\@xxx}}
\def\@xxx[#1]#2{
}`
Quale sia meglio, mi pare evidente.

Ciao
Enrico

Go to top