Customizzare titolo, testatina e indice con Fancy-HDR

  • Creatore
    Topic
  • #120793
    Up
    0
    Down
    ::


    Ciao a tutti e rieccomi qui! Ho avuto la brillantissima idea di inserire in testatina capitolo e paragrafo su un’unica riga con il pacchetto Fancy-HDR. Premetto chei titoli della mia tesi sono molto corti, ma con gli ampi margini (4x4x3x3) che mi sono imposti dall’università faccio fatica a tenere tutto in un riga. Avrei bisogno quindi di:
    – avere in testatina il titolo abbreviato (probabilmente accorcerò il paragrafo)
    – avere nell’indice e nel corpo il titolo “lungo”.
    Come posso risolvere?
    Ecco il mio EMC
    `\documentclass[12pt,a4paper,oneside]{book}
    \usepackage{geometry}
    \geometry{a4paper,top=4cm,bottom=4cm,left=3cm,right=3cm}
    \usepackage[T1]{fontenc}
    \usepackage[utf8]{inputenc}
    \usepackage{fancyhdr}
    \pagestyle{fancy}
    \renewcommand{\chaptermark}[1]{\markboth{\thechapter.\ #1}{}}
    \renewcommand{\sectionmark}[1]{\markright{\thesection.\ #1}{}}
    \fancyhf{}

    \fancyhead[L]{\normalsize \nouppercase{\leftmark}\makebox[0.7em][l]{}}
    \fancyhead[R]{\footnotesize \nouppercase{\rightmark}\makebox[0.5em][r]{}}
    \fancyfoot[C]{\thepage}
    \renewcommand{\headrule}{\vbox to 0pt{\hbox to\headwidth{\hrulefill}\vss}}

    \begin{document}
    \tableofcontents
    \thispagestyle{empty}

    \chapter[Titolo corto testatina e indice capitolo]{Titolo lungo capitolo}
    \clearpage
    \section[Titolo corto testatina e indice paragrafo]{Titolo lungo paragrafo}
    foo

    \end{document}
    `

    La cosa sarebbe risolvibile con un:
    `
    \section{Titolo lungo paragrafo}
    \markright{\small titolo paragrafo corto per testatina}{}
    `
    a patto che vi sia un’interruzione di pagina prima dell’inizio della sezione. Tuttavia mi sembra una porcheria.

Visualizzazione 5 filoni di risposte
  • Autore
    Risposte
    • #120794
      OldClaudio
      Partecipante
        Up
        0
        Down
        ::


        Innanzi tutto non devi usare \markright due volte ma solo una volta dopo il comando \section.

        Se vuoi un unico comando che metta cose diverse nell’indice e nelle testatine [puoi ridefinirti \chapter e \section con il linguaggio LaTeX3 oppure puoi usare la classe memoir che fa quelle cose già da solo; i conadi dimemoir hanno la seguente sitassi`\chapter[titolo per l'indice][titolo per la testatina]{titolo per il testo}
        \section[titolo per l'indice][titolo per la testatina]{titolo per il testo}`Come vedi si tratta di usare due argomenti facoltativi. Se vuoi evitare la classe memoir, con o senza il linguaggio LaTeX3, le cose possonodiventare molto complicate e molto delicate.

        Se vuoi averne un’idea devi leggere il codice dela classe TOPtesi dove ho risolto la coesistenza di \chapter e \chapter* insieme ai due argomenti facoltativi; a stima sono una cinquantina di righe di codice…:sad:

      • #120795
        Up
        0
        Down
        ::


        Credo proprio che la cosa più veloce e sensata da fare sia passare alla classe memoir, che per una tesi umanistica è effettivamente più adatta.
        Comoda la sintassi:
        `
        \chapter[titolo per l'indice][titolo per la testatina]{titolo per il testo}
        \section[titolo per l'indice][titolo per la testatina]{titolo per il testo}
        `

        Grazie!

      • #120796
        Up
        0
        Down
        ::


        Altre soluzioni, oltre alla mia e a quella di OldClaudio sono ovviamente ben accette!

      • #120797
        OldClaudio
        Partecipante
          Up
          0
          Down
          ::


          Prova con questa terza soluzione:`\let\originalcaption\caption
          \let\originalsection\section
          \RenewDocumentCommand\caption{O{#2} m O{#1}}{%
          \originalcaption[#1]{#2}\markboth{#3}{#3}%
          \RenewDocumentCommand\section{O{#2} m O{#1}}{%
          \originalsection[#1]{#2}\markright{#3}}%`Sia l’uno che l’altro hanno la sintassi seguente:
          [tt]\comando[titolo per indice]{titolo}[titolo per testatina][/tt]Nota l’ultimo argomento facoltativo DOPO l’argomento obbligatorio. \comando è soltanto un modo di dire \chapter oppure \section.
          Inserisci tutto quanto quel codice nel tuo preambolo.

          Questi nuovi comandi possono essere usati in diversi modi:
          `
          % Titolo Indice Testatina
          \comando{TITOLO}% TITOLO TITOLO TITOLO
          \comando[titolo]{TITOLO}% TITOLO titolo titolo
          \comando{TITOLO}[titolo]% TITOLO TITOLO titolo
          \comando[tiindice]{TITOLO}[tittestat]% TITOLO titindice tittestat
          `

          Come vedi hai quattro modi diversi per usare ciascuno di quei due comandi, a seconda che tu specifichi o non specifichi il primo e il secondo argomento facoltativo. La sintassi è leggermente diversa da quella di memoir, ma in sostanza permette di avere la stessa funzionalità.

          Se vuoi gestire anche i comandi asteriscati la cosa diventa decisamente più complicata, ma non impossibile; comunque inserita la definizione nel preambolo, quando usi quelle macro ridefinite, hai sempre da usare una semplice macro con uno o due argomenti facoltativi.

          Gestire anche la versione asteriscata potrebbe essere utile per gli indici e/o le liste delle figure e delle tabelle; ma la cosa è abbastanza secondaria; invece non c’è bisogno di fare nulla di speciale per la front matter e la back matter, visto che usi la classe book (mi pare di ricordare) e i comandi \frontmatter e \backmatter sono già disponibili; in queste parti del documento (quella iniziale e quella finale) marcate con \frontmatter (all’inizio della parte iniziale) e \backmatter (all’inizio della parte finale) i comandi \chapter e \section producono titoli non numerati ma caricano le testatine con i rispettivi argomenti, mentre i comandi asteriscati producono titoli non numerati ma non fanno nulla sulle testatine che, quindi, conservano quello che vi era stato messo prima producendo degli orrori che stimolano spesso richieste di aiuto qui sul forum.

        • #120798
          Up
          0
          Down
          ::


          Credo che manchi una parentesi dopo markboth: aggiungendola il file riesce a compilarsi. E poi non sembra funzionare perché mettendo il codice corretto nel preambolo e utilizzando \section[tiindice]{TITOLO}[tittestat], il titolo dell’indice è uguale a quello della testatina. Inserisco l’EMC per comodità, così che lo si possa provare al volo su overleaf.
          `
          \documentclass[12pt,a4paper,oneside]{book}
          \usepackage{geometry}
          \geometry{a4paper,top=4cm,bottom=4cm,left=3cm,right=3cm}
          \usepackage[T1]{fontenc}
          \usepackage[utf8]{inputenc}
          \usepackage{fancyhdr}
          \pagestyle{fancy}
          \renewcommand{\chaptermark}[1]{\markboth{\thechapter.\ #1}{}}
          \renewcommand{\sectionmark}[1]{\markright{\thesection.\ #1}{}}
          \fancyhf{}

          %\fancyhead[L]{\parbox{0.57 \textwidth \nouppercase}{\leftmark}}
          \fancyhead[L]{\normalsize \nouppercase{\leftmark}\makebox[0.7em][l]{}}
          \fancyhead[R]{\footnotesize \nouppercase{\rightmark}\makebox[0.5em][r]{}}
          \fancyfoot[C]{\thepage}
          \renewcommand{\headrule}{\vbox to 0pt{\hbox to\headwidth{\hrulefill}\vss}}

          \let\originalcaption\caption
          \let\originalsection\section
          \RenewDocumentCommand\caption{O{#2} m O{#1}}{\originalcaption[#1]{#2}\markboth{#3}{#3}}
          \RenewDocumentCommand\section{O{#2} m O{#1}}{\originalsection[#1]{#2}\markright{#3}}

          \begin{document}
          \tableofcontents
          \thispagestyle{empty}

          \chapter[Titolo corto testatina e indice capitolo]{Titolo lungo capitolo}
          \pagebreak
          \section[tiindice]{TITOLO}[tittestat]
          foo
          \end{document}
          `

        • #120799
          OldClaudio
          Partecipante
            Up
            0
            Down
            ::


            A me il tuo codice funziona più o meno come previsto. L’unica cosa difficile da sistemare è il gioco che fa la routine di ship out è che se la prima sezione del capitolo comincia dopo la prima pagina del capitolo, la testatina è ancora tiindice e non tittestat.`\documentclass[12pt,a4paper,oneside]{book}
            \usepackage{geometry}
            \geometry{a4paper,top=4cm,bottom=4cm,left=3cm,right=3cm}
            \usepackage[T1]{fontenc}
            \usepackage[utf8]{inputenc}
            \usepackage{fancyhdr}
            \pagestyle{fancy}
            \renewcommand{\chaptermark}[1]{\markboth{\thechapter.\ #1}{}}
            \renewcommand{\sectionmark}[1]{\markright{\thesection.\ #1}{}}
            \fancyhf{}

            \fancyhead[L]{\normalsize \nouppercase{\leftmark}\makebox[0.7em][l]{}}
            \fancyhead[R]{\footnotesize \nouppercase{\rightmark}\makebox[0.5em][r]{}}
            \fancyfoot[C]{\thepage}
            \renewcommand{\headrule}{\vbox to 0pt{\hbox to\headwidth{\hrulefill}\vss}}

            \let\originalcaption\caption
            \let\originalsection\section
            \RenewDocumentCommand\caption{O{#2} m O{#1}}{\originalcaption[#1]{#2}\markboth{#3}{#3}}
            \RenewDocumentCommand\section{O{#2} m O{#1}}{\originalsection[#1]{#2}\markright{#3}}

            \begin{document}
            \tableofcontents
            \thispagestyle{empty}

            \chapter[Titolo corto testatina e indice capitolo]{Titolo lungo capitolo}
            foo
            %\newpage

            \section[tiindice]{TITOLO}[tittestat]
            foo
            \newpage

            faa
            \newpage

            fii
            \end{document}`Se togli il segno % che precede il primo \newpage, constati quello che ti sto dicendo.

            Mi spiace, ma così su due piedi non saprei come rimediare a questo difetto che in realtà si manifesta raramente, perché in genere un capitolo può iniziare con uno o due capoversi introduttivi non preceduti da un titolo, quindi la prima sezione avviene durante la prima pagina del capitolo.

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

        Go to top