Titlesec: formattazioni divere per starred e unstarred

  • Creatore
    Topic
  • #40061
    Up
    0
    Down
    ::


    Ciao a tutti,
    sto cercando di realizzare due formattazioni differenti (nel solo spazio verticale) per i comandi in grado di generare capitoli in book.cls. In realtà, nonostante il titolo del topic, l’idea sarebbe quella di agire sul solo comando \chapter, nel senso che poi dovrebbero essere i vari \frontmatter, \mainmatter e \backmatter a decidere se i capitoli in questione devono essere numerati o no.

    Mi spiego meglio. Consideriamo due tipici esempi di capitoli rispettivamente numerati e non numerati: un capitolo introduttivo che sta in \mainmatter prodotto con \chapter ed una bibliografia che sta in \backmatter, per la quale non si usa \chapter ma si sfrutta un automatismo, ad esempio \bibliography. Molto probabilmente, in mancanza di impostazioni particolari, LaTeX li formatterebbe così:
    ` .——————————. .——————————.
    | | | |
    | | | |
    | | | |
    | Capitolo 1 | | Bibliografia |
    | | | |
    | Introduzione | | |
    | | | ——————— |
    | | | ——————— |
    | ——————— | | ——————— |
    | ——————— | | ——————— |
    | ——————— | | ——————— |
    | ——————— | | ——————— |
    | ——————— | | ——————— |
    | ——————— | | ——————— |
    | ——————— | | ——————— |
    | ——————— | | ——————— |
    | ——————— | | ——————— |
    | ——————— | | ——————— |
    | ——————— | | ——————— |
    | | | |
    | | | |
    `——————————' `——————————'`
    Immaginiamo di prendere in considerazione un documento A4 e di avere impostato il margine superiore della pagina con geometry.sty a 4 cm; immaginiamo anche che \chapter non introduca alcuno spazio verticale (positivo o negativo) prima dell’etichetta «Capitolo 1». In pratica, quello che si ha è questo:
    ` .——————————. .——————————.
    | ^ | | ^ |
    | | 4 cm | | | 4 cm |
    | v | | v |
    | Capitolo 1 | | Bibliografia |
    | | | |
    | Introduzione | | |
    | | | ——————— |
    | | | ——————— |
    | ——————— | | ——————— |
    | ——————— | | ——————— |
    | ——————— | | ——————— |
    | ——————— | | ——————— |
    | ——————— | | ——————— |
    | ——————— | | ——————— |
    | ——————— | | ——————— |
    | ——————— | | ——————— |
    | ——————— | | ——————— |
    | ——————— | | ——————— |
    | ——————— | | ——————— |
    | | | |
    | | | |
    `——————————' `——————————'`
    Come risultato, se stampiamo il file PDF risultante (ad esempio con Adobe Reader, scegliendo «Ridimensionamento pagina: Nessuno») e andiamo a misurare con un righello la distanza verticale che intercorre tra la parte superiore del foglio ed il titolo prodotto dai rispettivi comandi, otteniamo effettivamente 4 cm.

    Vorrei che questa lunghezza verticale arbitraria partisse effettivamente dall’inizio del foglio, ma raggiungesse il vero e proprio nome del capitolo (es. «Introduzione» o «Bibliografia», le quali si troverebbero quindi alla medesima riga, sebbene su pagine diverse) e non si fermasse ad un’eventuale etichetta (es. «Capitolo 1»).

    In pratica, assumendo che questa lunghezza verticale misuri sempre 4 cm, vorrei ottenere una cosa di questo tipo:
    ` .——————————. .——————————.
    | ^ | | ^ |
    | | | | | |
    | | 4 cm | | | 4 cm |
    | Capitolo 1 | | | | |
    | V | | v |
    | Introduzione | | Bibliografia |
    | | | |
    | | | |
    | ——————— | | ——————— |
    | ——————— | | ——————— |
    | ——————— | | ——————— |
    | ——————— | | ——————— |
    | ——————— | | ——————— |
    | ——————— | | ——————— |
    | ——————— | | ——————— |
    | ——————— | | ——————— |
    | ——————— | | ——————— |
    | ——————— | | ——————— |
    | ——————— | | ——————— |
    | | | |
    | | | |
    `——————————' `——————————'`
    Come si vede da quest’ultimo disegno, l’etichettta «Capitolo 1» non costituisce un muro; la lunghezza lo supera fino al raggiungimento del titolo vero e proprio.

    Tempo fa avevo già risolto il problema ridefinendo sia \@makechapterhead sia \@makeschapterhead, in modo da fornire loro due lunghezze verticali diverse, calcolate «a tentativi» (prima stampavo, poi misuravo).

    Dal momento che sto cercando di toccare il meno possibile i comandi du basso livello, vorrei risolvere il problema con titlesec.sty.

    Il problema nasce dal fatto che non sono riuscito a trovare, leggendo la relativa documentazione (versione 2.8 del 12 agosto 2007), il sistema di formattare in modo differenziato i capitoli numerati e quelli non numerati. Non solo; dallo stesso doucmento leggo anche:

    The use of sectioning commands in the starred version is strongly discouraged. Instead, you can use a set of markup oriented commands which are easy to define and modify, if necessary. Thus, you can test different layouts before choosing amongst them.

    Seguendo il suggerimento, ho prodotto questo codice, che sembra funzionare (i valori li ho sempre calcolati a tentativi, e sono relativi ad una distanza di circa 5,7 cm):
    `\documentclass[11pt,a4paper,italian]{book}

    \usepackage[italian]{babel}
    \usepackage[vmargin={4cm,4cm}]{geometry}
    \usepackage{titlesec}

    \titleformat{\chapter}[display]
    {\normalfont\huge\bfseries}{\chaptertitlename\ \thechapter}
    {20pt}
    {\Huge}

    \titlespacing*{\chapter}{0pt}
    {-.75cm} % personalizzato
    {40pt}

    \newenvironment{nonnumerato}
    {\titlespacing*{\chapter}{0pt}{.85cm}{40pt}}
    {\titlespacing*{\chapter}{0pt}{-.75cm}{40pt}}

    \begin{document}

    \frontmatter

    \begin{nonnumerato}

    \chapter{Qualcosa}

    Bla, bla, bla\dots

    \end{nonnumerato}

    \mainmatter

    \chapter{Qualcos'altro}

    Bla, bla, bla\dots

    \backmatter

    \begin{nonnumerato}

    \chapter{Qualcos'altro ancora}

    Bla, bla, bla\dots

    \end{nonnumerato}

    \end{document}`
    Tra l’altro, la pratica sembra suggerire che anche il codice
    `\newenvironment{nonnumerato}
    {\titlespacing*{\chapter}{0pt}{.95cm}{40pt}}
    {}`
    funzioni correttamente, sebbene mi sembri più corretto rimettere le cose a posto:
    `\newenvironment{nonnumerato}
    {\titlespacing*{\chapter}{0pt}{.95cm}{40pt}}
    {\titlespacing*{\chapter}{0pt}{-.75cm}{40pt}}`
    Comunque, non mi piace tantissimo l’idea di dover scomodare un ambiente che avvolge tutto il contenuto di \frontmatter e di \backmatter; avrei preferito agire (sempre con titlesec.sty e ad alto livello) su una macro che tenesse traccia dei capitoli non numerati.

    Il codice che ho illustrato sopra (che sembra funzionare) va bene oppure può dare luogo ad altri problemi più avanti? Si può fare di meglio?

    Grazie e a presto.

Visualizzazione 1 filone di risposte
  • Autore
    Risposte
    • #40062
      Up
      0
      Down
      ::

      Ciao a tutti,
      sto cercando di realizzare due formattazioni differenti (nel solo spazio verticale) per i comandi in grado di generare capitoli in book.cls. In realtà, nonostante il titolo del topic, l’idea sarebbe quella di agire sul solo comando \chapter, nel senso che poi dovrebbero essere i vari \frontmatter, \mainmatter e \backmatter a decidere se i capitoli in questione devono essere numerati o no.

      Il codice che ho illustrato sopra (che sembra funzionare) va bene oppure può dare luogo ad altri problemi più avanti? Si può fare di meglio?

      Prova questo:
      `\titleformat{\chapter}[display]
      {\normalfont\Huge\bfseries}
      {\vbox to0pt{\vskip-2\baselineskip\huge\chaptertitlename\ \thechapter\vss}
      \vskip-2\baselineskip}
      {0pt}
      {}

      \titlespacing*{\chapter}{0pt} {0pt} {40pt}`
      Niente “nonnumerato”.

      Ciao
      Enrico

    • #40063
      Up
      0
      Down
      ::


      Grazie mille, la proverò appena possibile.

      A presto!

Visualizzazione 1 filone di risposte
  • Devi essere connesso per rispondere a questo topic.

Go to top