problema con comando \newgeometry e pacchetto fancyhdr

  • Creatore
    Topic
  • #44654
    Up
    0
    Down
    ::


    Ho un documento in cui uso il comando \newgeometry (pacchetto geometry) per modificare i margini di una sola pagina.

    Aggiungendo però intestazioni personalizzate con il pacchetto fancyhdr, la loro posizione nella pagina non si adegua ai nuovi margini impostati.

    Esempio:

    `
    \documentclass[a4paper,oneside]{article}

    \usepackage[T1]{fontenc}
    \usepackage[utf8x]{inputenc}
    \usepackage[italian]{babel}
    \usepackage{microtype}
    \usepackage{lipsum}

    \usepackage{fancyhdr}
    \usepackage[showframe]{geometry}

    \pagestyle{fancy}
    \lhead{}
    \chead{}
    \rhead{}
    \lfoot{Left foot}
    \rfoot{Right foot}
    \cfoot{}
    \renewcommand{\headrulewidth}{0pt}
    \renewcommand{\footrulewidth}{0pt}

    \begin{document}

    \newgeometry{margin=2cm}

    \lipsum[1]

    \cleardoublepage

    \restoregeometry

    \lipsum[1]

    \end{document}
    `

    l’allineamento di “Right foot” nella prima pagina è uguale alla seconda pagina, nonostante il testo abbia dimensioni diverse.

    Dove sbaglio?

    grazie

Visualizzazione 2 filoni di risposte
  • Autore
    Risposte
    • #44655
      Up
      0
      Down
      ::

      Ho un documento in cui uso il comando \newgeometry (pacchetto geometry) per modificare i margini di una sola pagina.

      Aggiungendo però intestazioni personalizzate con il pacchetto fancyhdr, la loro posizione nella pagina non si adegua ai nuovi margini impostati.

      Esempio:

      `
      \documentclass[a4paper,oneside]{article}

      \usepackage[T1]{fontenc}
      \usepackage[utf8x]{inputenc}
      \usepackage[italian]{babel}
      \usepackage{microtype}
      \usepackage{lipsum}

      \usepackage{fancyhdr}
      \usepackage[showframe]{geometry}

      \pagestyle{fancy}
      \lhead{}
      \chead{}
      \rhead{}
      \lfoot{Left foot}
      \rfoot{Right foot}
      \cfoot{}
      \renewcommand{\headrulewidth}{0pt}
      \renewcommand{\footrulewidth}{0pt}

      \begin{document}

      \newgeometry{margin=2cm}

      \lipsum[1]

      \cleardoublepage

      \restoregeometry

      \lipsum[1]

      \end{document}
      `

      l’allineamento di “Right foot” nella prima pagina è uguale alla seconda pagina, nonostante il testo abbia dimensioni diverse.

      Dove sbaglio?

      grazie

      Il pacchetto fancyhdr determina l’ampiezza di testatina e piedino mediante il valore di \headwidth che è impostato al momento della definizione dello stile fancy (cioè dal comando \pagestyle{fancy}). Se non modifichi le ampiezze con \fancy{head|foot|hf}offset (le tre macro descritte a pagina 12 del manuale), puoi fare così:
      `\newenvironment{changegeometry}[1]
      {\newgeometry{#1}\setlength{\headwidth}{\textwidth}}
      {\cleardoublepage\aftergroup\restoregeometry}`
      Il tuo documento diventerà
      `\begin{document}

      \begin{changegeometry}{margin=2cm}

      \lipsum[1]

      \end{changegeometry}

      \lipsum[1]

      \end{document}`
      che dovrebbe fare come desideri, perché \headwidth è ricalcolata con il valore attuale di \textwidth, ma la modifica viene annullata alla fine dell’ambiente changegeometry.

      Ciao
      Enrico

    • #44656
      Up
      0
      Down
      ::

      … puoi fare così: …

      come al solito, grazie!

    • #44657
      Up
      0
      Down
      ::

      … puoi fare così: …

      come al solito, grazie!

      Versione “migliorata”:
      `\newenvironment{changegeometry}[1]
      {\newgeometry{#1}\setlength{\headwidth}{\textwidth}}
      {\clearpage\aftergroup\restoregeometry}`
      Non occorre dare \clearpage prima di questo ambiente, perché lo fa già \newgeometry. Se si volesse \cleardoublepage, basta darlo dopo l’ambiente. Confermo che funziona anche se si usano i comandi \fancyhfoffset, \fancyheadoffset e \fancyfootoffset per modificare l’ampiezza della testatina e del piedino. Colgo l’occasione per invitare tutti a usare i comandi \fancyhead e \fancyfoot invece di \lhead, \rhead eccetera. Per esempio, il codice originale dovrebbe essere
      `\pagestyle{fancy}
      \fancyhf{} % azzera tutto
      \fancyfoot[L]{Left foot}
      \fancyfoot[R]{Right foot}
      \renewcommand{\headrulewidth}{0pt}
      %\renewcommand{\footrulewidth}{0pt} % è 0 di default`
      Ciao
      Enrico

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

Go to top