Re: Pacchetto frontespizio: definizione di \Candidato

#41141
Up
0
Down
::

Nella tua classe ci sarà \RequirePackage{frontespizio}, suppongo. La definizione di \Candidato che viene usata nel documento base è
`\newcommand{\Candidato}[2][]{%
\def\next{#1}%
\ifx\next\@empty
\front@write{\Candidato{#2}}%
\else
\front@write{\Candidato[#1]{#2}}%
\fi}`
che dovrà essere modificata subito dopo quel \RequirePackage:
`\newcommand{\Candidato}[2][]{%
\def\next{#1}%
\ifx\next\@empty
\front@write{\Candidato{#2}}%
\else
\front@write{\Candidato[#1]{#2}}%
\fi
\gdef\myclass@author{#2}}
\def\myclass@author{–missing author–%
\ClassWarningNoLine{myclass}
{Missing \protect\Candidato, perhaps you did not provide\MessageBreak
a `frontespizio' environment}%
\gdef\myclass@author{–missing author–}}`
dove “myclass” va sostituito con il prefisso per i comandi interni della tua classe. Potrai quindi usare \myclass@author dove vuoi. La definizione di \myclass@author è fatta in modo che se non c’è il comando \Candidato, al primo uso (nella testatina) viene emesso un messaggio di avviso che viene poi omesso alle chiamate successive. Non provato, fammi sapere.

Ho provato il codice, che funziona. Se non c’è il comando \Candidato, in tutte le testatine pari compare la scritta -missing author- e nel file .log viene riportato (solo per la prima occorrenza) il “warning” corretto. Grazie!

8) A scrivere codice senza provarlo si rischia sempre. 🙂

Piuttosto, tu hai provato a usare il comando \@author in quel modo? Con le classi standard non funziona come pensi. 🙂

Sì, l’ho provato e mi sembra funzionare correttamente. Avevo letto sui tuoi Appunti la spiegazione del ruolo di \@author, e l’ho usato in quel modo pensando che fosse corretto.
Cosa dovrebbe accadere? La mia proto-classe è basata su article.
Ovviamente, bisogna scrivere da qualche parte \author{Pinco Pallino}, altrimenti la testatina “sinistra” sarà vuota. Ho provato e riprovato 🙄

Funziona solo perché non dai \maketitle il quale annulla la definizione di \@author.

Quindi, in generale, per richiamare l’argomento di un comando, va usato, all’interno del comando, \gdef\comandointerno{#n}, dove n sta per l’argomento da richiamare? Sbaglio qualcosa?
Un’ultima cosa: perché in un caso si usa \gdef e nell’altro \def? Dagli Appunti non sono riuscito a capire la differenza 🙁 Ma sono fiducioso: due anni fa mi sembrava oscuro \renewcommand…

Quella tecnica permette di ricordarsi “ovunque” l’argomento che viene dato come testo di sostituzione di \comandointerno.

Occorre \gdef nel primo caso perché il comando \Candidato è all’interno dell’ambiente frontespizio. Se la definizione non fosse globale, alla fine dell’ambiente sparirebbe. Nella definizione successiva non occorre \gdef perché fa parte della classe e quindi è letta fuori da qualsiasi gruppo. La ridefinizione all’interno deve avere \gdef, perché la macro \myclass@author viene espansa durante la routine di output (elaborando le testatine) che è eseguita in un gruppo; come prima, una definizione non globale verrebbe dimenticata alla fine del gruppo.

Ciao
Enrico

Go to top