Stile pagina con con il kernel di LaTeX

  • Creatore
    Topic
  • #48067
    robitex
    Amministratore del forum
      Up
      0
      Down
      ::


      Ciao,
      ho ricominciato ha lavorare con entusiasmo ritrovato, sulla mia classe basata su quella standard report ed il pacchetto pstricks, che produce particolari report (appunto) con in pratica nessuna necessità tipografica (!).

      Le testatine ed i piè di pagina (il report è sempre oneside) sono di default vuoti, ma vorrei dare all’utente la possibilità di inserire un testo a sinistra, al centro ed a destra.
      Aggiungo che non ci sono comandi di sezionamento, ma solo un comando apposito di salto di pagina.

      Penso che convenga implementare la cosa il più semplicemente possibile (lasciando stare il pacchetto fancyhdr).
      Ho quindi pensato di appoggiarmi al kernel stesso di LaTeX, scrivendo questo codice (mi pare di aver capito che lo stile myheadings generato dalla classe standard non prevede un campo centrale):

      `\documentclass[a4paper]{report}

      \def\sx{Sinistra}
      \def\dx{Lato Destro}
      \def\cc{Centro}

      \makeatletter
      \def\ps@mystyle{%
      \renewcommand{\@oddhead}{%
      \hbox to \textwidth{%
      \hbox to 0pt{\sx\hskip 0pt minus 1fil}%
      \hfill\cc\hfill%
      \hbox to 0pt{\hskip 0pt minus -1fil\relax\dx}}}
      \renewcommand{\@oddfoot}{%
      \hbox to \textwidth{%
      \hbox to 0pt{\sx\hskip 0pt minus 1fil}%
      \hfill\cc\hfill%
      \hbox to 0pt{\hskip 0pt minus -1fil\relax\dx}}}
      \let\@evenhead\@oddhead
      \let\@evenfoot\@oddfoot
      }
      \makeatother
      \pagestyle{mystyle}% rendo attivo lo stile

      \begin{document}
      % filetto per verificare il centraggio di \cc
      \noindent\rule{0.4pt}{10pt}\hfill\rule{0.4pt}{10pt}\hfill\rule{0.4pt}{10pt}

      Ciao a tutti!
      \end{document}`

      Le domande sono:
      il codice è corretto (a parte che per pigrizia non ho definito le tre macro che andrebbero nel piè di pagina)?
      ed ancora:
      L’uso delle grandezze elastiche può essere migliorato?
      Grazie dell’interessamento.

      Una breve spiegazione del codice:
      Per definire uno stile (per testatine e piè di pagina) si definisce un comando \ps@ e per applicarlo si scriverà \pagestyle{}.

      Il comando \ps@ deve definire quattro comandi di base, due per le testatine (pari e dispari) che sono \@oddhead e \@evenhead, e due per il piè di pagina (sempre uno per la pagina pari ed uno per la pagina dispari) che sono \@oddfoot ed \@evenfoot.

      Il codice ridefinisce i quattro comandi inserendo tre campi \sx, \cc, \dx che l’utente andrà con un linguaggio opportuno, a definire, linguaggio implementato con xkeyval, quindi con la sintassi chiave=valore.

      I miei più cordiali Saluti.
      Roberto

    Visualizzazione 2 filoni di risposte
    • Autore
      Risposte
      • #48068
        robitex
        Amministratore del forum
          Up
          0
          Down
          ::


          Ciao,
          ho trovato una forma molto più semplice utilizzando i comandi \rlap, \llap, \centerline:
          `
          \documentclass[a4paper]{report}

          \def\hsx{Sinistra up}
          \def\hdx{Lato Destro up}
          \def\hcc{Centro up}

          \def\fsx{Sinistra down}
          \def\fdx{Lato Destro down}
          \def\fcc{Centro down}

          \makeatletter
          \def\ps@mystyle{%
          \renewcommand{\@oddhead}{\rlap{\hsx}\centerline{\hcc}\llap{\hdx}}
          \renewcommand{\@oddfoot}{\rlap{\fsx}\centerline{\fcc}\llap{\fdx}}
          \let\@evenhead\@oddhead
          \let\@evenfoot\@oddfoot
          }
          \makeatother
          \pagestyle{mystyle}

          \begin{document}
          \noindent\rule{0.4pt}{10pt}\hfill\rule{0.4pt}{10pt}\hfill\rule{0.4pt}{10pt}

          Ciao a tutti!
          \end{document}
          `

          Fatemi sapere comunque se trovate idee migliori.
          Grazie.

        • #48069
          OldClaudio
          Partecipante
            Up
            0
            Down
            ::


            a me piaceva di più la prima versione pur di sostituire quei vari \hfill semplicemente con \hss; \hss dice semplicemente: “horizontal stretch and shrink”; c’è anche il corrispondente \vss per la stessa funzione in verticale.

            In vece non mi piace il codice che non prevede né nella prima versione, né nella seconda, la verifica che il contenuto non sia troppo grande. Forse non serve, forse è ridondante, nel senso che sta all’utente che definisce le marche \sx, \cc e \dx scegliere dei contenuti mutuamente compatibili.

          • #48070
            robitex
            Amministratore del forum
              Up
              0
              Down
              ::

              a me piaceva di più la prima versione pur di sostituire quei vari \hfill semplicemente con \hss; \hss dice semplicemente: “horizontal stretch and shrink”; c’è anche il corrispondente \vss per la stessa funzione in verticale.

              La prima versione è forse più TeXnica 8) e preferivo la seconda solo per la sua compattezza che migliora la leggibilità del codice. Sono contento di sapere comunque, che l’idea è in generale corretta.
              Direi quindi buona la prima!!!

              In vece non mi piace il codice che non prevede né nella prima versione, né nella seconda, la verifica che il contenuto non sia troppo grande. Forse non serve, forse è ridondante, nel senso che sta all’utente che definisce le marche \sx, \cc e \dx scegliere dei contenuti mutuamente compatibili.

              Uhm, un codice di controllo che emette un warning se lo spazio non è sufficiente è una buona idea (in altre parti della classe ho faticato non poco ad inserire check sui valori introdotti).
              (Tuttavia sono preoccupato di più per lo spazio verticale, visto che il report calcola automaticamente i margini che potrebbero essere anche zero!!)

              Sono ancora in tempo naturalmente ad inserirlo (nuovo codice segnalato con i trattini):
              `
              \documentclass[a4paper]{report}

              \def\sx{Sinistra Sinistra Sinistra}
              \def\dx{Lato Destro Lato Destro Lato Destro}
              \def\cc{Centro Centro Centro}

              \makeatletter
              \def\ps@mystyle{% ——————————————
              \setbox0=\hbox{\sx\cc\dx}
              \ifdim\wd0>\textwidth
              % ops le marche sono troppo lunghe
              \GenericWarning{Header too small}{Header too small}
              \fi% —————————————————–
              \renewcommand{\@oddhead}{%
              \hbox to \textwidth{%
              \hbox to 0pt{\sx\hskip 0pt minus 1fil}%
              \hss\cc\hss%
              \hbox to 0pt{\hskip 0pt minus -1fil\relax\dx}}}
              \renewcommand{\@oddfoot}{%
              \hbox to \textwidth{%
              \hbox to 0pt{\sx\hskip 0pt minus 1fil}%
              \hss\cc\hss%
              \hbox to 0pt{\hskip 0pt minus -1fil\relax\dx}}}
              \let\@evenhead\@oddhead
              \let\@evenfoot\@oddfoot
              }
              \makeatother
              \pagestyle{mystyle}% rendo attivo lo stile

              \begin{document}
              % filetto per verificare il centraggio di \cc
              \noindent\rule{0.4pt}{10pt}\hfill\rule{0.4pt}{10pt}\hfill\rule{0.4pt}{10pt}

              Ciao a tutti!
              \end{document}
              `
              Tuttavia, si può fare di meglio visto che bisognerebbe controllare che:
              `0.5\wd{\cc}+\wd{\sx}<0.5\textwidth
              e/o
              0.5\wd{\cc}+\wd{\dx}<0.5\textwidth
              `

              Grazie e saluti.
              (ora devo andare, la famiglia chiama!!!, ma ci sentiamo presto)

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

          Go to top