\thecontentslabel, numeri minuscoli e allineamento indice

  • Creatore
    Topic
  • #73318
    Up
    0
    Down
    ::


    Si provi a compilare il seguente:
    `% !TEX TS-program = XeLaTeX
    \documentclass{suftesi}

    \usepackage{fontspec}
    \setmainfont[Numbers=OldStyle]{Junicode}

    \begin{document}

    \tableofcontents

    \chapter{Primo}
    \section{uno}
    \section{due}
    \section{tre}
    \section{quattro}
    \section{cinque}
    \section{uno}
    \section{due}
    \section{tre}
    \section{quattro}
    \section{cinque}

    \end{document}
    `

    Come si può notare i titoli di sezione non sono allineati. Ciò dipende sia dai numeri (che non sono a larghezza fissa) sia da come sono definiti i vari livelli dell’indice dalla classe suftesi. Fermiamoci per il momento alle sole sezioni. Sono così definite:
    `
    \titlecontents{section}
    [1.5em]
    {}
    {\thecontentslabel\hspace*{1em}}
    {}
    {\ifsuftesi@article\suftesi@chaptitlerule%
    \else\suftesi@titlerule\fi\contentspage}
    `

    Una soluzione è sostituire \thecontentslabel
    con \rlap{\thecontentslabel}\hspace*{1.5em}, ma ciò comporterebbe alcune conseguenze indesiderate. Per esempio, sezioni molto ingombranti (es: 10.12.13) potrebbero sovrapporsi al titolo. (Lo so, è una situazione rara, ma possibile.) È questo il motivo per cui ho scelto di usare \thecontensline.

    L’idea è di definire dei comandi:
    `
    \newcommand{\suftesi@chaptertoclabel}{\thecontenslabel}
    \newcommand{\suftesi@sectiontoclabel}{\thecontenslabel}
    `

    da usare al posto di \thecontenslabel e da ridefinire quando serve, per esempio con un comando ad hoc, come:
    `
    \newcommand{\adjustsectoclabel}[1]{%
    \renewcommand{\suftesi@sectiontoclabel}{\rlap{\thecontenslabel}\hspace*{#1}}}
    `

    da usare così:
    `
    \adjustsectoclabel{1.5em}
    `

    L’approccio funziona, ma è evidentemente molto ingombrante, perché andrebbe definito un comando per ogni ridefinizione:
    `
    \newcommand{\adjustchaptoclabel}[1]…
    \newcommand{\adjustsectoclabel}[1]…
    `

    Sarebbe bello poter avere un solo comando con due argomenti:
    `
    \adjusttoclabel{section}{2em}
    `
    che permetta di ridefinire

    `
    \suftesi@sectiontoclabel
    `
    con
    `
    \rlap{\thecontenslabel}\hspace*{#1}
    `

    Ho fatto diversi tentativi, sfiorando la soluzione, ma evidentemente qualcosa mi sfugge.

    Qualcuno sa come risolvere il problema in una maniera elegante?

    Ciao
    Ivan

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


      Direi con
      `\titlecontents{section}
      [1.5em]
      {}
      {\makebox[\suftesi@label@section][l]{\thecontentslabel}}
      {}
      {\ifsuftesi@article\suftesi@chaptitlerule%
      \else\suftesi@titlerule\fi\contentspage}
      \def\suftesi@label@section{2em}`
      Puoi anche fornire un’interfaccia per modificare i valori nel caso ci siano sovrapposizioni; qualcosa come
      `\newcommand*{\toclabelspace}[2]{\@namedef{suftesi@label@#1}{#2}}`
      da usare come
      `\toclabelspace{section}{2em}`
      Basterà dare dei valori di default per i vari livelli.

      Ciao
      Enrico

    • #73320
      Up
      0
      Down
      ::


      Grazie! Avevo intuito che ci fosse di mezzo \@namedef. Ora cerco di capire come funziona 😉

      La tua soluzione è ottima, ma in questo modo è costante lo spazio riservato all’etichetta,
      mentre vorrei che fosse costante lo spazio dopo l’etichetta.
      \thecontentslabel lo fa, ma il risultato è accettabile solo con numeri a larghezza fissa.

      Chiaramente la soluzione che cerco non permette di allineare tutte le sezioni:
      1.8___Qui inizia il titolo
      1.9___Qui inizia il titolo
      1.10___Qui inizia il titolo

      Quello che mi interessa è di avere allineate tutte le sezioni con lo stesso
      numero di cifre.

      Ma innanzitutto: ha senso cercare questa soluzione?

      Ciao
      Ivan

    • #73321
      Up
      0
      Down
      ::

      ivan” post=72413Grazie! Avevo intuito che ci fosse di mezzo \@namedef. Ora cerco di capire come funziona 😉

      La tua soluzione è ottima, ma in questo modo è costante lo spazio riservato all’etichetta,
      mentre vorrei che fosse costante lo spazio dopo l’etichetta.
      \thecontentslabel lo fa, ma il risultato è accettabile solo con numeri a larghezza fissa.

      Chiaramente la soluzione che cerco non permette di allineare tutte le sezioni:
      1.8___Qui inizia il titolo
      1.9___Qui inizia il titolo
      1.10___Qui inizia il titolo

      Quello che mi interessa è di avere allineate tutte le sezioni con lo stesso
      numero di cifre.

      Ma innanzitutto: ha senso cercare questa soluzione?

      Ciao
      Ivan

      Non mi pare che abbia molto senso: o allinei tutti i titoli o nessuno e lasci uno spazio normale fra numero e titolo.

      Ciao
      Enrico

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

Go to top