Che differenza c’è tra il comando TeX \def ed il comando LaTeX \newcommand, a parte quella banale che \def non controlla se il comando è già definito ed a parte la sintassi più amichevole di \newcommand?
Mi sono accorto che anche in alcuni comandi LaTeX viene usato \def invece di \newcommand, in particolare curiosando nel sorgente dell’ “introtex” di Enrico ho trovato queste definizioni
`
\def\ttchar#1{\begingroup\ttfamily\char`#1\endgroup}
\protected\def\cs#1{{\ttfamily\ttchar\\#1}}
`
Ho fatto delle prove, sostituendo \def con \newcommand e, almeno in apparenza, non cambia nulla.
Certamente ci sono degli ottimi motivi per la scelta fatta. Quali sono?
Grazie
Ernesto
Brevità nel primo caso. 8) E abitudine inveterata dai primi tempi; infine, una definizione in cui compare la primitiva \char va con \def. 🙂
Nel secondo caso invece è una faccenda diversa: è un modo di sfruttare e-TeX per avere un comando robusto senza scomodare il pesante \DeclareRobustCommand. Caricando il pacchetto etoolbox si ha a disposizione \newrobustcmd che ha la stessa sintassi di \newcommand (e che forse dovrei usare).
Una differenza però c’è: la prima definizione è equivalente a
`\newcommand*{\ttchar}{\begingroup\ttfamily\char`#1\endgroup}`
Notare l’asterisco che caratterizza quei comandi in cui non vogliamo ammettere il token \par negli argomenti. Analogamente la seconda si può dare con \newrobustcmd*.
Occhio: chi non è abbastanza esperto usi \newcommand.
Ciao
Enrico