- Questo topic ha 11 risposte, 4 partecipanti ed è stato aggiornato l'ultima volta 10 anni, 7 mesi fa da
lorenzo.pantieri.
-
CreatoreTopic
-
27 Gennaio 2016 alle 16:53 #104770::
Buonasera a tutti.Ho un documento prodotto con ClassicThesis:
`\documentclass[10pt,a4paper,twoside,openright,titlepage,%
headinclude,footinclude,BCOR5mm,%
cleardoublepage=empty,tablecaptionabove,table
]{scrbook}\usepackage[eulerchapternumbers,subfig,beramono,eulermath,pdfspacing,listings]{classicthesis}
\usepackage{arsclassica}`
L’indice generale è prodotto così:
`\cleardoublepage
\pdfbookmark{\contentsname}{tableofcontents}
\setcounter{tocdepth}{2}
\tableofcontents
\markboth{\spacedlowsmallcaps{\contentsname}}{\spacedlowsmallcaps{\contentsname}}
\clearpage
\cleardoublepage`
L’indice sta tutto in una pagina, meno due righe che vanno nella pagina successiva. Per varie ragioni, voglio l’indice tutto in una pagina.Una riga l’ho guadagnata con:
`\addtocontents{toc}{\protect\enlargethispage*{1\baselineskip}}
\chapter{Ultimo capitolo del libro}
`
L’altra vorrei guadagnarla alzando di una riga la scritta “Indice” (con tutto l’indice che segue).Come fare?
Grazie in anticipo,
Lorenzo
-
CreatoreTopic
-
AutoreRisposte
-
-
27 Gennaio 2016 alle 22:58 #104771
-
28 Gennaio 2016 alle 4:55 #104772
-
28 Gennaio 2016 alle 14:29 #104773::
ivan” post=104826
Potresti anche provare a modificare localmente l’interlinea.Ho accolto il tuo suggerimento! Funziona!
`\cleardoublepage
\pdfbookmark{\contentsname}{tableofcontents}
\setcounter{tocdepth}{2}
\begingroup
\linespread{0.999999999999}
\tableofcontents
\markboth{\spacedlowsmallcaps{\contentsname}}{\spacedlowsmallcaps{\contentsname}}
\endgroup
\clearpage
\cleardoublepage`
C’è qualcosa che mi sfugge, però: quel
`\linespread{0.999999999999}`
mi permette di guadagnare la famosa riga (se commento quella riga l’indice torna a occupare due pagine. Ma
`\linespread{0.999999999999}`
non dovrebbe essere praticamente indistinguibile da
`\linespread{1}`
?Grazie a chi vorrà chiarirmi l’arcano… 😉
-
28 Gennaio 2016 alle 14:35 #104774::
ivan” post=104826
Potresti anche provare a modificare localmente l’interlinea.Ho accolto il tuo suggerimento! Funziona!
`\cleardoublepage
\pdfbookmark{\contentsname}{tableofcontents}
\setcounter{tocdepth}{2}
\begingroup
\linespread{1.03}
\tableofcontents
\markboth{\spacedlowsmallcaps{\contentsname}}{\spacedlowsmallcaps{\contentsname}}
\endgroup
\clearpage
\cleardoublepage`
Mi confermi che il mio codice cambia l’interlinea del solo indice, senza altri effetti collaterali?Grazie.
-
28 Gennaio 2016 alle 14:51 #104775::
Confermo. Se vuoi fare un test basta mettere un valore molto alto e constatare che dopo il gruppo non accade nulla.
Piuttosto, la soluzione funziona per accidens, nel senso che in generale serve anche \selectfont che,
nel tuo caso è eseguito da \spacedlowsmallcaps:`
\documentclass{scrbook}\begin{document}
\begingroup
\linespread{3}\selectfont
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus elit, vestibulum
ut, placerat ac, adipiscing vitae, felis. Curabitur dictum gravida mauris. Nam arcu libero, nonummy eget, consectetuer id, vulputate a, magna. Donec vehicula augue eu neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Mauris ut leo. Cras viverra metus rhoncus sem.\endgroup
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus elit, vestibulum
ut, placerat ac, adipiscing vitae, felis. Curabitur dictum gravida mauris. Nam arcu libero, nonummy eget, consectetuer id, vulputate a, magna. Donec vehicula augue eu neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Mauris ut leo. Cras viverra metus rhoncus sem.\end{document}
`Ciao
Ivan
-
28 Gennaio 2016 alle 16:43 #104776::
@Ivan, il tuo EMC funziona benissimo e dimostra che \begingroup ed \endgroup mantengono l’effetto di \linespread{3} localizzato al gruppo.
Ma mi pare che il tutto, compreso il valore 1.03 di Lorenzo funzioni per accidens.
Se il problema di Lorenzo è quello di fare stare una riga in più nella pagina dell’indice lo scartamento andrebbe ridotto, non aumentato.
Se funziona è perché forse ClassicThesis (con Arsclassica?) usano una impostazione dello scartamento maggiore del valore preimpostato.
Altro motivo per rifuggire dalle classi KomaScript e quindi da ClassicThesis.
Ho esaminato i listati delle classi scrbook.cls e scrreprt; la prima ammonta a più di 8000 righe di codice e la seconda a più di 5000 righe di codice; e questo senza contare i numerosi file richiesti dall’una o dall’altra classe. Assolutamente impossibile trovare scoprire chi fa che cosa e dove sia la definizione di quelle macro che fanno la cosa.
Lorenzo dice che ormai non potrebbe più fare niente senza ClassicThesis. Io dico che potrebbe fare molto di più se lasciasse perdere ClassicThesis, in particolare potrebbe ricevere più facilmente aiuto per risolvere i suoi problemi.
Ora questo era semplice da risolvere, ma il fatto che lui stesso non sia riuscito a trovare la definizione di \tableofcontents la dice lunga; non ci sono riuscito nemmeno io, quindi quella definizione è ben nascosta fra le decine di migliaia di righe dei codici di Kohm e di Miede.
In una situazione meno semplice non sarebbe stato difficile esaminare la definizione della macro ed eventualmente modificarle attraverso i comandi efficacissimi del pacchetto xpatch, senza bisogno di copiare la definizione originale nel proprio preambolo e modificarla a mano.
-
28 Gennaio 2016 alle 18:05 #104777::
OldClaudio” post=104833quella definizione è ben nascosta fra le decine di migliaia di righe dei codici di Kohm e di Miede.
Proprio tra quelle migliaia di righe l’autore invita ad usare il pacchetto tocbasic, caricato automaticamente dalla classe e descritto nella sua guida, per modificare l’indice.
Se devo essere sincero, io non ho capito come fare quello che chiede Lorenzo. Quello che sono riuscito a fare è alzare di una riga verso il titolo il contenuto dell’indice con l’istruzione
`\AfterTOCHead{\addvspace{-\baselineskip}}`ma non è la stessa cosa.
-
28 Gennaio 2016 alle 22:27 #104778::
Liverpool” post=104836
quella definizione è ben nascosta fra le decine di migliaia di righe dei codici di Kohm e di Miede.
Proprio tra quelle migliaia di righe l’autore invita ad usare il pacchetto tocbasic, caricato automaticamente dalla classe e descritto nella sua guida, per modificare l’indice.
Se devo essere sincero, io non ho capito come fare quello che chiede Lorenzo. Quello che sono riuscito a fare è alzare di una riga verso il titolo il contenuto dell’indice con l’istruzione
`\AfterTOCHead{\addvspace{-\baselineskip}}`ma non è la stessa cosa.Infatti quella è la soluzione indicata da Kohm nella documentazione in inglese guien.pdf.
Ma se apri tocbasic.sty e cerchi \tableofcontents non lo trovi. Trovi solo una miriade di macro per realizzare le molteplici opzioni che le classi KomaScript offrono per tutte le occasioni (in questo file le opzioni per gli indici e le List of Something), ma non trovi niente che ricordi quel comando e nemmeno che esegua l’input di \jobname.toc.
Ho aperto tutti i file che contengono codice LaTeX nella cartella koma-script ma apparentemente nessuna contiene né \tableofcontents né qualcosa che sia un input di file generati in tempo reale durante la compilazione di un documento.La soluzione suggerita da Ivan di cambiare la spaziatura fra le righe è corretta e funziona benissimo; quello che mi stupisce è che Lorenzo abbia trovato 1.03 > 1 come fattore di “contrazione” delle righe. Quello non me lo spiego nemmeno io. Per guadagnare una riga su una quarantina di righe presenti cercherei di diminuire l’avanzamento di riga di un quarantesimo quindi avrei scelto qualcosa come 0.975 0 0.97, non avrei aumentato di circa un quarantesimo come ha fatto Lorenzo. Ma, ripeto forse c’è una spiegazione che però è nascosta dentro il codice non tanto modulare delle classi di Kohm. Se TikZ funzionasse nello stesso modo sarebbe fatto di un solo file di 100 000 righe (ammesso che centomila bastino).
-
29 Gennaio 2016 alle 7:00 #104779::
OldClaudio” post=104850Ho aperto tutti i file che contengono codice LaTeX nella cartella koma-script ma apparentemente nessuna contiene né \tableofcontents né qualcosa che sia un input di file generati in tempo reale durante la compilazione di un documento.
Hai ragione su tutto. Credo che la definizione di [tt]\tableofcontents[/tt] per scrbook sia ereditata da book e quindi:
`\newcommand\tableofcontents{%
\if@twocolumn
\@restonecoltrue\onecolumn
\else
\@restonecolfalse
\fi
\chapter*{\contentsname
\@mkboth{%
\MakeUppercase\contentsname}{\MakeUppercase\contentsname}}%
\@starttoc{toc}%
\if@restonecol\twocolumn\fi
}`
Ciao
-
29 Gennaio 2016 alle 13:25 #104780::
Non sono in grado di escluderlo, né di confermarlo, perché né in scrbook e subalterni né in scrireprt e subalterni ho trovato nessun riferimento alla classe book o alla classe report.
Sarei propenso ad escluderlo perché la definizione che hai allegato, che conosco benissimo, avendola ricopiata e modificata n volte per molti documenti, non contiene nessun hook per inserire le personalizzazioni attivabili con le opzioni definite in tocbasics.sty.Il condizionale è d’obbligo perché, non essendo riuscito a trovare nulla di utile nei codici dei vari cls, sty, ecc. sono solo mie supposizioni.
Potrebbe valre la pena di creare un esempio minimo compilabile ed eseguirne un trace da dopo [tt] \begin {document} [/tt] a subito prima di [tt] \end {document} [/tt] per vedere che cosa facciano quelle classi per produrre l’indice. Ma richiederebbe poi di leggere e decifrare un file .log che potrebbe arrivare facilmente anche a 100 000 righe 😯 🙁 👿
-
29 Gennaio 2016 alle 14:27 #104781::
OldClaudio” post=104833
Se il problema di Lorenzo è quello di fare stare una riga in più nella pagina dell’indice lo scartamento andrebbe ridotto, non aumentato.
Se funziona è perché forse ClassicThesis (con Arsclassica?) usano una impostazione dello scartamento maggiore del valore preimpostato.Sì, ClassicThesis usa un
`\linespread=1.05`
ecco perché con il mio 1.03 ottengo un’interlinea ridotta.Liverpool” post=104836
Quello che sono riuscito a fare è alzare di una riga verso il titolo il contenuto dell’indice con l’istruzione
`\AfterTOCHead{\addvspace{-\baselineskip}}`ma non è la stessa cosa.Io ci ero riuscito con
`\addtocontents{toc}{\protect\vspace*{-\baselineskip}}
\chapter{Il primo capitolo del libro}
`OldClaudio” post=104833
Altro motivo per rifuggire dalle classi KomaScript e quindi da ClassicThesis. Lorenzo dice che ormai non potrebbe più fare niente senza ClassicThesis. Io dico che potrebbe fare molto di più se lasciasse perdere ClassicThesis, in particolare potrebbe ricevere più facilmente aiuto per risolvere i suoi problemi.Il codice di ClassicThesis è farraginoso, però:
1. il layout è splendido;
2. il pacchetto è molto rodato: un eventuale nuova classe che volesse riprodurne il layout avrebbe degli inevitabile difetti di gioventù;
3. lo conosco bene e mi ci trovo come a casa: se cambiassi classe dovrei affrontare un periodo di apprendistato, e ora non ne ho il tempo.Grazie mille, Claudio, Ivan e Luigi!
Lorenzo
-
-
AutoreRisposte
- Devi essere connesso per rispondere a questo topic.