Ciao a tutti,
leggendo la documentazione di pdfTeX ho notato che l’autore ha modificato le impostazioni relative ai titoli delle sezioni in modo tale che i relativi numeri nonché gli spazi orizzontali che li separano dai titoli veri e propri vengano spostati verso sinistra e quindi estromessi dalla gabbia del testo. In pratica, è la prima lettera dell’espressione testuale contenuta in ciascun comando \section{…} ad essere allineata orizzontalmente con il margine sinistro della \textwidth.Mi interesserebbe capire come realizzare la cosa, per pura curiosità. Per ridurre al minimo le costruzioni poco ortodosse, ho deciso di usare titlesec.
Non sono purtroppo riuscito a risolvere il problema, ma riporto comunque alcune delle mie riflessioni. Il codice seguente è relativo alla spaziatura predefinita in riferimento al comando \section:
`\titlespacing*{\section}{0pt}{3.5ex plus 1ex minus .2ex}{2.3ex plus .2ex}
`
Secondo me è sufficiente agire esclusivamente sul secondo parametro della macro. Sia x la lunghezza che tiene traccia sia della dimensione dell’etichetta (il numero della sezione), sia dello spazio orizzontale che la separa dal titolo (la figura sottostante riporta un esempio, nel caso in cui la sezione sia la 10.2):
`
10.2 Titolo della sezione
<----- x ` In questo caso, si potrebbe scrivere: `\titlespacing*{\section}{-x}{3.5ex plus 1ex minus .2ex}{2.3ex plus .2ex} ` Problema: quanto vale x? Dalla documentazione di titlesec si scopre che \titlelabel è definito come`\titlelabel{\thetitle\quad}
`
quindi verrebbe da pensare di calcolare la dimensione di \thetitle\quad, ma probabilmente non funzionerebbe, perché il primo dei due valori verrebbe fornito a corpo normale, non in neretto, ecc.Il secondo problema è che la larghezza delle etichette è variabile, non fissa (“1.1” occupa meno spazio di “19.8”). Il manuale di titlesec illustra come superare anche questo problema, introducendo una scatola dai limiti invalicabili: al posto di
`\titleformat{\section}{…}{\thesection}{1em}{}
`
si può scrivere`\titleformat{\section}{…}{\makebox[2em][r]{\thesection}}{1em}{}
`
così la dimensione dell’etichetta viene fissata. Sinceramente questa soluzione non mi piace granché, in quanto presuppone di conoscere a priori il valore “giusto” da assegnare a \makebox (e quindi di sapere quante sezioni ci saranno). Non solo, ma se poi decidessi di riformattare il corpo delle sezioni passando, poniamo il caso, da \Large a \large, le cose cambierebbero nuovamente. Ma per ora sorvoliamo e adottiamo questo sistema. x potrebbe valere 2em + 1em = 3em, ma quando scrivo`\titlespacing*{\section}{-3em}{3.5ex plus 1ex minus .2ex}{2.3ex plus .2ex}
`
mi accorgo visivamente che il valore non è esatto e pertanto devo intervenire a mano, inserendo un valore empirico.La domanda, a questo punto, diventa: qual è il corretto valore da assegnare al campo “left” di \titlespacing? La risposta che mi aspetto è una qualche macro TeXnica, eventualmente derivata da calcoli ulteriori, e non un valore esplicito del tipo “-12.6pt”. Meglio sarebbe (ma non è indispensabile) rimuovere quel \makebox[2em] che racchiude l’etichetta numerica.
Riporto, giusto per completezza, un riassunto sulla vicenda:
`\documentclass{book}
\usepackage{titlesec}
\titleformat{\section}{\normalfont\Large\bfseries}{\makebox[2.2em][r]{\thesection}}{1em}{}
%\titlespacing*{\section}{-3.2em}{3.5ex plus 1ex minus .2ex}{2.3ex plus .2ex} % intuitivamente sembra giusto così…
\titlespacing*{\section}{-1.8cm}{3.5ex plus 1ex minus .2ex}{2.3ex plus .2ex} % … invece sembra essere questo il valore corretto, calcolato empiricamente.
\usepackage{lipsum}\begin{document}
\setcounter{chapter}{9} % solo per prova
\chapter{Capitolo}
\setcounter{section}{8} % solo per prova
\section{Oh, all'inizio}
\lipsum[1]
\section{Tabula rasa}
\lipsum[1]
\section{Infine}
\lipsum[1]
\end{document}
`
Molte grazie e a presto.
\titlespacing non c’entra nulla.
`\titleformat{\section}{\normalfont\large\bfseries}{\llap{\thesection\quad}}{0pt}{}`
Ciao
Enrico