Sto cercando di capire esattamente cosa fa il codice da te proposto, ma non capisco una cosa: perché devo usare \string sul command sequence prescelto?
`\string\pippo`
non produce l’espansione di \pippo che mi deve contenere il testo del messaggio d’errore all’inizio?
Per evitare noie con le espansioni. Meglio avere una stringa di caratteri che un nome di comando.
Quanto al numero degli argomenti del comando, ti dico che la situazione varia: il comando ha una doppia sintassi; può essere seguito da un solo argomento oppure da un argomento delimitato:
`% primo caso
\fill{until=5,from=8}
$ secondo caso
solo per un settaggio
\fill.until=5;
\fill.from=8;`Comunque, mi è venuto in mente che posso anche cambiare strategia favorendo l’utente: invece di negargli il settaggio delle proprietà, si potrebbe metterle in stato di “attesa” se queste vengono date prima di \begin{document}, ed eseguite effettivamente solo a quel momento.
Saluti e Grazie mille.
Garantire che l’errore ingoi anche l’argomento non sarebbe semplice, come puoi capire.
La strategia proposta mi pare saggia. Eventualmente puoi aggiungere un avviso che il tutto vada messo dopo \begin{document}:
`\def\robi@warning{%
\ifrobi@warning
\AtEndDocument{\ClassWarning{robi}{One or more commands should
go after \string\begin{document}}}%
\global\robi@warningfalse
\fi}
\newif\ifrobi@warning\robi@warningtrue
\AtBeginDocument{\let\robi@warning\relax}`
Aggiungi \robi@warning al codice dei comandi, come primo token.
Ciao
Enrico