Pacchetto frontespizio: definizione di \Candidato

  • Creatore
    Topic
  • #41138
    Up
    0
    Down
    ::


    Ciao a tutti!

    Sto scrivendo una classe che prevede(rà) l’utilizzo del pacchetto frontespizio, per comporre il frontespizio della tesi.
    Vorrei fare in modo che nelle testatine delle pagine pari compaia il nome che viene inserito come argomento del comando \Candidato, definito dal pacchetto frontespizio.

    In pratica il problema è: come si richiama l’argomento del comando \Candidato?

    Usando oltre a \Candidato{Nome Candidato} anche il comando \author{Nome Candidato}, si aggirerebbe il problema scrivendo questo codice per le testatine:
    `\fancyhf{}
    \fancyhead[OC]{\footnotesize\nouppercase\leftmark}
    \fancyhead[EC]{\footnotesize\nouppercase\@author}
    \fancyfoot[C]{\footnotesize\thepage} `
    Ma sarebbe una ripetizione da evitare, se possibile.

    Grazie!

    Ciao
    Ivan

Visualizzazione 3 filoni di risposte
  • Autore
    Risposte
    • #41139
      Up
      0
      Down
      ::

      Ciao a tutti!

      Sto scrivendo una classe che prevede(rà) l’utilizzo del pacchetto frontespizio, per comporre il frontespizio della tesi.
      Vorrei fare in modo che nelle testatine delle pagine pari compaia il nome che viene inserito come argomento del comando \Candidato, definito dal pacchetto frontespizio.

      In pratica il problema è: come si richiama l’argomento del comando \Candidato?

      Usando oltre a \Candidato{Nome Candidato} anche il comando \author{Nome Candidato}, si aggirerebbe il problema scrivendo questo codice per le testatine:
      `\fancyhf{}
      \fancyhead[OC]{\footnotesize\nouppercase\leftmark}
      \fancyhead[EC]{\footnotesize\nouppercase\@author}
      \fancyfoot[C]{\footnotesize\thepage} `
      Ma sarebbe una ripetizione da evitare, se possibile.

      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.

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

      Ciao
      Enrico

    • #41140
      Up
      0
      Down
      ::

      Ciao a tutti!

      Sto scrivendo una classe che prevede(rà) l’utilizzo del pacchetto frontespizio, per comporre il frontespizio della tesi.
      Vorrei fare in modo che nelle testatine delle pagine pari compaia il nome che viene inserito come argomento del comando \Candidato, definito dal pacchetto frontespizio.

      In pratica il problema è: come si richiama l’argomento del comando \Candidato?

      Usando oltre a \Candidato{Nome Candidato} anche il comando \author{Nome Candidato}, si aggirerebbe il problema scrivendo questo codice per le testatine:
      `\fancyhf{}
      \fancyhead[OC]{\footnotesize\nouppercase\leftmark}
      \fancyhead[EC]{\footnotesize\nouppercase[color=darkred]\@author[/color]}
      \fancyfoot[C]{\footnotesize\thepage} `
      Ma sarebbe una ripetizione da evitare, se possibile.

      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!

      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 🙄

      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…

      Ciao
      Ivan

    • #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

    • #41142
      Up
      0
      Down
      ::

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

      …ma c’è chi può 😉

      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.

      Ok, infatti non è previsto l’uso di \maketitle con questa classe.

      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.

      Chiarissimo 🙂 ma ci dovrò riflettere un po’

      Ciao
      Ivan

Visualizzazione 3 filoni di risposte
  • Devi essere connesso per rispondere a questo topic.

Go to top