Definire comandi personalizzati
Oltre alla sintassi di base vista in Definire nuovi comandi, spesso serve un comando con un argomento opzionale (un parametro con un valore di default, richiamabile con [...]).
Con \newcommand (LaTeX2e)
\newcommand{\saluto}[2][Ciao]{#1, #2!}\saluto{Mario} % → "Ciao, Mario!"
\saluto[Salve]{Mario} % → "Salve, Mario!"[2]indica che il comando accetta 2 argomenti totali.[Ciao](subito dopo) è il valore di default per il primo argomento, che diventa quindi opzionale.#1/#2richiamano gli argomenti nel corpo del comando.
Attenzione
Con \newcommand, l'argomento opzionale può essere solo il primo. Se serve un argomento opzionale in un'altra posizione, o più di un argomento opzionale, serve xparse (sotto).
Con xparse (LaTeX3)
Il pacchetto xparse offre una sintassi più espressiva per casi che \newcommand non copre:
\usepackage{xparse}
\NewDocumentCommand{\saluto}{O{Ciao} m}{#1, #2!}O{Ciao}— argomento opzionale (O) con defaultCiao.m— argomento obbligatorio (mandatory).
Lo stesso risultato di prima, ma con una sintassi dichiarativa che rende esplicito quali argomenti sono opzionali/obbligatori a colpo d'occhio — utile quando i comandi hanno 3 o più argomenti misti.
Suggerimento
Vedi What do newcommand, renewcommand, and providecommand do, and how do they differ? (già citato in Definire nuovi comandi) per quando usare \renewcommand invece di \newcommand — utile quando si vuole ridefinire un comando già esistente di un pacchetto.