Alzare di una riga l’indice

  • Creatore
    Topic
  • #104770
    lorenzo.pantieri
    Partecipante
      Up
      0
      Down
      ::


      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

    Visualizzazione 10 filoni di risposte
    • Autore
      Risposte
      • #104771
        Up
        0
        Down
        ::


        `\chapter{\vspace*{-\baselineskip} Indice}`
        ?

        Potresti anche provare a modificare localmente l’interlinea.

        Ciao
        Ivan

      • #104772
        lorenzo.pantieri
        Partecipante
          Up
          0
          Down
          ::

          ivan” post=104826`\chapter{\vspace*{-\baselineskip} Indice}`

          Non funziona. Penso che la via maestra sia modificare la definizione di \tableofcontents così come definito dalle classi KOMA, solo che non la trovo!

        • #104773
          lorenzo.pantieri
          Partecipante
            Up
            0
            Down
            ::

            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… 😉

          • #104774
            lorenzo.pantieri
            Partecipante
              Up
              0
              Down
              ::

              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.

            • #104775
              Up
              0
              Down
              ::


              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

            • #104776
              OldClaudio
              Partecipante
                Up
                0
                Down
                ::



                @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.

              • #104777
                Liverpool
                Partecipante
                  Up
                  0
                  Down
                  ::

                  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.

                • #104778
                  OldClaudio
                  Partecipante
                    Up
                    0
                    Down
                    ::

                    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).

                  • #104779
                    Liverpool
                    Partecipante
                      Up
                      0
                      Down
                      ::

                      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

                    • #104780
                      OldClaudio
                      Partecipante
                        Up
                        0
                        Down
                        ::


                        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 😯 🙁 👿

                      • #104781
                        lorenzo.pantieri
                        Partecipante
                          Up
                          0
                          Down
                          ::

                          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

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

                      Go to top