Re: Comando solo nel documento

#50114
Up
0
Down
::

Conosco il comando \@onlypreamble del nucleo di LaTeX che non permette di inserire quel dato nel documento. Mi servirebbe il suo comando complementare, ovvero un comando che eviti che l’utente chiami un comando nel preambolo (prima che inizi il documento alcuni parametri della mia classe non sono ancora inizializzati per consentire un settaggio differito ed in tempi diversi, non ha quindi senso utilizzare alcuni comandi nel preambolo).
Riferiamoci per fissare le idee ad un comando chiamato \onlydocument.

L’ho cercato in source2e senza trovarlo. La domanda è: esiste un comando del genere nel kernel di LaTeX?

Altrimenti vi illustro l’alternativa:
1 – definisco il comando \onlydocument come un comando che emette un warning.
2 – definisco la macro ausiliaria \aux@onlydocument che contiene la vera definizione di \onlydocument
3 – Inserisco in \AtBeginDocument l’istruzione \let\onlydocument=\aux@onlydocument

La domanda alternativa è quindi: esiste una soluzione migliore di questa?
Grazie

Se il comando non ha argomenti, è piuttosto semplice:
`\newcommand\DeclareDocumentOnlyCommand[2]{%
\edef#1{\noexpand\DOCError{\string#1}}%
\@namedef{\string#1DOC}{#2}%
\AtBeginDocument{%
\expandafter\let\expandafter\@temp\csname\string#1DOC\endcsname
\let#1\@temp}}
\def\DOCError#1{}`
Con \DeclareDocumentOnlyCommand{\pippo}{Ciao pippo} ottieni esattamente ciò che chiedi.

Non è un grave problema se il comando ha un numero fisso di argomenti e non ne ha di opzionali: se per esempio sono due, userai
`\edef#1##1##2{\noexpand\DOCError{\string#1}}%`
Così una chiamata di \pippo{a}{b} ignorerebbe i due argomenti emettendo il messaggio di errore. Con argomenti opzionali è un disastro.

Per ovviare al problema potresti semplicemente emettere un “errore fatale”, aggiungendo al codice di \DOCError un \@@end che costringerebbe l’incauto utente a cancellare il comando sbagliato prima di riprovare.

Ciao
Enrico

Go to top