Interazione tra \section (ridefinito), indice e babel

  • Creatore
    Topic
  • #134019
    GuITstaff
    Amministratore del forum
      Up
      0
      Down
      ::

      Il problema è sia mostrato sia descritto nei sei file che allego: tre file “—.tex” e i corrispondenti “—.pdf”.
      Grazie in anticipo a chi mi spiegherà qualche cosa e grazie subito a chi legge.

      Il problema è spiegato nel testo stesso dei file.

      AGGIUNTA

      Quando ho fatto il post non ho descritto il problema,
      ma ho solo rimandato alla descrizione inserita
      come testo negli esempi.
      Aggiungo adesso descrizione compatta del problema.

      La ridefinizione: “\def\contentsname{\relax}”
      può essere usata per eliminare intestazione automatica
      dell’indice prodotto da “\tableofcontents”.

      La regolazione ad un valore negativo del parametro “afterskip”
      nella ridefinizione di “\section” produce titoletto di sezione
      in linea con il testo.

      Se si fa la seconda cosa (“afterskip” negativo) in un file che usa “babel”
      allora la ridefinizione di “\contentsname” non funziona.

      FINE della AGGIUNTA

      Un saluto
      Battista

      P.S.: si sono caricati solo i file sorgente, perché i pdf sono troppo grandi pur essendo di una sola pagina ciascuno.
      B.

    Visualizzazione 13 filoni di risposte
    • Autore
      Risposte
      • #134020
        GuITstaff
        Amministratore del forum
          Up
          0
          Down
          ::

          Battista ho letto il tuo messaggio e ho ricompilato sul mio Mac i tre esempi che hai allegto. Ti confesso che non ho capito che cosa vorresti ottenere. dei Mini-indici dove le voci indicizzate sono scritte un dopo l’altra in una lista che non occupa una pagina intitolata Indice, come succede normalmente nei documenti tradizionali?
          Un piccolo indice specifico da inserire all’inizio di ogni capitolo per mostrare ciò che il capitolo contiene?

          In questo secondo caso puoi usare direttamente il comando \chapterprecis della classe memoir, paragrafo 6.5.3; anzi ti suggerirei di usare questa classe onnipotente che fa tutto e di più; il tempo che occorre per imparare ad usarla è compensato dal tempo risparmiato per inventare nuovi comandi o nuovi ambienti.

          Tornando al tuo messaggio, compilando i tuoi tre esempi ho ottenuto solo i soliti indici, con babel, e senza allineamento delle voci. Li ho girati in tutti i modi, ma non sono riuscito a replicare quanto tu dici. Mio Alzeimer incipiente? Forse. Tuttavia il consiglio di studiare memoir non è frutto di Alzeimer.:) 🙂

        • #134021
          GuITstaff
          Amministratore del forum
            Up
            0
            Down
            ::

            Caro Claudio
            inanzitutto grazie della attenzione e dei suggerimenti.

            Mi chiedi che cosa vorrei ottenere.
            Io vorrei semplicemente l’indice generato da “\tableofcontents” senza la intestazione.
            Questo lo ottengo nell’esempio TESTb grazie alla ridefinizione: “\def\contentsname{\relax}” .
            Poi vorrei anche che le intitolazioni prodotte da section stessero
            in linea e non in display e questo lo ottengo mettendo un valore negativo
            per il parametro “afterskip” nella ridefinizione di “\section”. Il guaio è che a questo punto
            riappare la intitolazione automatica dell’indice.
            L’aspetto problematico è solo questo.

            No possono farti vedere il risultato, visto che non riesco a caricare i pdf,
            ma se hai compilato i miei tre esempi dovresti vedere che:

            – la intitolazione dell’indice è presente in TESTa, come previsto;

            – la intitolazione dell’indice NON è presente in TESTb,
            grazie alla ridefinizione di “\contentsname”

            – la intitolazione dell’indice E’ PRESENTE in TESTc,
            non ostante la ridefinizione di “\contentsname”.

            Per ora non riesco a dire altro.

            Grazie ancora.
            Un caro saluto, e … buona Pasqua.
            Battista

          • #134022
            GuITstaff
            Amministratore del forum
              Up
              0
              Down
              ::

              Il fatto che nella versione TESTc compaia ancora l’intestazione si corregge correttamente aggiungendo un paio di righe nel preambolo:
              [code]\documentclass[a4paper,10pt]{article}% classe
              \usepackage[T1]{fontenc}% T1 encoding for text
              \usepackage[italian]{babel}% testo italiano
              \usepackage{etoolbox}% per disporre del comando \addto
              \addto\captionsitalian{\def\contentsname{\relax}}% correzione che elimina l’intestazione

              [/code]Per comporre le voci dell’indice una dopo l’altra senza lo spazio che le separa verticalmente ho il sospetto che lavorare su \afterskip non sia sufficiente o non sia corretto; infatti non mi sembra che funzioni in nessuno dei tuoi 3 esempi.
              Ci provo ancora, e ti farò sapere se ci riesco.

            • #134023
              GuITstaff
              Amministratore del forum
                Up
                0
                Down
                ::

                Donque i campi di \@startsection NON consentono di modificare gli spazi sopra e/o sotto l’indicazione della voce da inserire nell’indice.

                Tuttavia esiste il pacchetto tocloft.sty che consente di modificare più o meno a piacere qualunque dettaglio dell’indice, in particolare gli spazi da inserire prima e dopo ogni voce. Cols seguente codice nel preambolo mi pare che si ottenga direttamente quello che desideri (sempre che io abbia capito bene).
                [code]\documentclass[a4paper,10pt]{article}% classe
                \usepackage[T1]{fontenc}% T1 encoding for text
                \usepackage[italian]{babel}% testo italiano
                \usepackage{etoolbox}
                \addto\captionsitalian{\def\contentsname{\relax}}
                \usepackage{tocloft}% <—————————– pacchetto essenziale
                \cftbeforesecskip=0pt% <—————————– impostazione dello spazio tra le voci di \section
                %
                \makeatletter
                % ridefinizione del comando “\section”
                \renewcommand\section{\@startsection%
                {section}% Nome
                {1}% Livello
                {\z@}% Rientro
                {1em \@plus 1ex \@minus 0.2ex}% before skip, ma se negativo… % era 3.25ex
                {-1em} % afterskip”, ma se negativo…; era -2ex
                {\normalfont\normalsize\bfseries}% stile di scrittura
                }% FINE di “\section”
                \makeatother
                %
                [/code] Era questo ciò che volevi ottenere?

              • #134024
                GuITstaff
                Amministratore del forum
                  Up
                  0
                  Down
                  ::

                  Devo integrare perchè Claudio ha postato due messaggi di fila.

                  A) risposta per punti al messaggio #123224.

                  Vado per punti.

                  1) FUNZIONA la soluzione proposta da Claudio. Grazie Claudio !

                  2) La differenza di comportamento tra i due esempi TESTb e TESTc rimane inspiegata.

                  3) Mi pare che il mio uso del comando \@startsection per ridefinire \section sia perfettamente corretta.
                  Io non faccio ridefinizione esplicita di \afterskip. Per me “afterskip” è il nome di un parametro del comando \@startsection.

                  4) Non capisco cosa ci sarebbe di scorretto nei miei esempi,
                  e non capisco cosa intende Claudio dicendo che nessuno dei tre esempi funziona.
                  Il primo e il secondo esempio fanno esattamente cosa mi aspetto, il terzo invece no.

                  B) integrazione per rispondere al messaggio #123225
                  Io non voglio cambiare la spaziatura dell’indice.
                  Vorrei solo eliminare la intestazione automatica dell’indice e contemporaneamente usare intestazioni di sezione in riga.
                  I miei esempi TESTb e TESTc mostrano che questa cosa non riesce, almeno non in modo immediato.
                  (Riesce sì, invece, se uso etoolbox e \addto).
                  La incapacità di \@startsection di descrivere separatamente lo stile dei titoli di sezione tra testo e indice
                  è effettivamente un problema, ma non è il mio problema.

                  ancora un saluto a tutti

                  Battista

                  p.s.: non conoscevo “tocloft.sty” – adesso lo ho guardato – vedo che non ha a che fare con il problema che ho descritto,
                  ma MI SARA’ PROBABILMENTE UTILE PER UN ALTRO PROBLEMA –
                  quindi … grazie Claudio anche di questa segnalazione
                  la documentazione di tocloft mi ha fatto capire cose che non ero riuscito a capire cercando nella documentazione ufficiale di LaTeX
                  (anche se non c’entra, ripeto, con il problema per cui ho scritto)
                  B.

                • #134025
                  GuITstaff
                  Amministratore del forum
                    Up
                    0
                    Down
                    ::

                    Battista, non ti ho spegato perché il terzo esempio non funzionava ed è stato necessario ricorrere a \addto. I comandi per creare l’indice fanno riferimento a quanto specifica babele per le parole infisse, come per esempio \contentsname. Se però mediante \addto aggiungi questa ridefinizione all’elenco delle parole infissie per l’italiano, ecco che riesci a cambiare la parola Indice con quello che ti pare, per esempio il “niente” fornito da ]relax.

                    La spiegazione del comando afterskip che ti ho messo nei miei commenti dipende dl fatto che se il valore è poisitivo fa quel che ti aspetti, “però” se è negativo serve per altre cose, cioè per lo spaio orizzontale fra l’intestazione della sezione e il testo/titolo della sezione. Questo è difficile da capire dall’astrusità del file source2e.pdf che è scritto per gli addetti ai lavori e non per il comune utente di LaTeX, che in generale non sa nemmeno che il file di documentazione esiste per davvero.

                    Comunque, evidentemente io avevo capito che non volevi le voci dell’indice spaziate l’una dall’altra e chiaramente non avevo capito bene. Se ti vanno bene spaziate il solo beforeskip va bene.

                  • #134026
                    GuITstaff
                    Amministratore del forum
                      Up
                      0
                      Down
                      ::

                      Grazie, Claudio dell’ulteriore spiegazione !
                      Battista

                      p.s.:
                      verrebbe voglia di programmarsi un sistema di sezionamento
                      e produzione dell’indice (indice nel senso di TOC) che sia
                      autonomo e più semplice …
                      … ma forse ho di meglio da fare.
                      B.

                    • #134027
                      GuITstaff
                      Amministratore del forum
                        Up
                        0
                        Down
                        ::

                        Infatti c’è tocloft che è totalmente autonomo e gestisce ogni possibile dettaglio

                      • #134028
                        GuITstaff
                        Amministratore del forum
                          Up
                          0
                          Down
                          ::

                          Leggo ora il post e vedo che avete risolto… Il problema segnalato, comunque, evidenzia l’inopportunità di modificare comandi interni di LaTeX (nello specifico [tt]@startsection[/tt]) poiché non sai mai come questi interagiscono con pacchetti esterni (in questo caso [tt]babel[/tt]).

                          Esistono decine di classi e pacchetti che, senza dover reinventare la ruota, permettono ogni sorta di personalizzazione.

                          Di seguito un emc che risolve il problema segnalato e crea il layout dei paragrafi voluto:
                          [code]% !TEX encoding = UTF-8 Unicode
                          % !TEX program = lualatex

                          \documentclass{article}
                          \usepackage{fontspec}
                          \usepackage[italian]{babel}
                          \usepackage{titlesec}
                          \usepackage{lipsum}

                          \AddToHook{cmd/tableofcontents/before}{\def\contentsname{\relax}}
                          \titleformat{\section}[runin]{\normalfont\normalsize\bfseries}{\thesection}{1em}{}

                          \begin{document}
                          \tableofcontents
                          \section{Paragrafo}
                          \lipsum[1]
                          \end{document}[/code]
                          Matteo

                        • #134029
                          GuITstaff
                          Amministratore del forum
                            Up
                            0
                            Down
                            ::

                            OK, sia la soluzione proposta da Claudio sia la soluzione proposta da Matteo funzionano. GRAZIE !
                            OK, io non devo reinventare la ruota.

                            PERO’ devo fare due precisazioni.

                            1) Io non ho affatto agito per “modificare comandi interni di LaTeX (nello specifico @startsection)”.
                            Ho usato @startsection per modificare section, e credo di averlo fatto in un modo conforme a quello che sta indicato in “The LaTeX Companion” (di cui posso adesso consultare solo la seconda edizione).

                            2) Avere una soluzione che funziona va bene, ma sono sempre un poco a disagio quando mi pare di avere qualche cosa in sospeso e che non so spiegare.
                            In questo caso la cosa che non so spiegare è la differenza tra i miei esempi detti TESTb e TESTc, che adesso non sto a descrivere di nuovo.
                            Ovviamente il disagio di non capire questa cosa è un fatto soggettivo e personale.

                            saluti
                            Battista

                            p.s.: a che cosa serve “\usepackage{fontspec}” nell’esempio minimo di Matteo ??
                            B.

                          • #134030
                            GuITstaff
                            Amministratore del forum
                              Up
                              0
                              Down
                              ::

                              Hi visto che nelle righe di autoconfigurazione Matteo compila il suo esempio usando lualatex, non podflatex; fontspec serve per usaare i font OpenType che pdflatex non può usare.
                              Tieni presente che guardando nella sfera dell’indovino mi pare di vedere un declino di pdflatex e una fioritura di lualatex. Io ancora uso moltissimo pdflatex, ma ci sono cose che, senza invocare il linguaggio Lua, si possono fare solo con lualatex; per esempio, i PDF archiviabili con Lualatex si possono fare senza ricorrere a pacchetti esterni. L’operazione di tagging sta andando avanti solo per lualatex. Quindi sarebbe desiderabile, anche per me, familiarizzarsi di più con lualatex. Non credo, ma forse mi sbaglio, che il LaTeX Companion si occupi di Lualatex; io ho solo la prima edizione e la mia libreria è strapiena; non ho più spazio per altri libri/manuali. 🙁

                            • #134031
                              GuITstaff
                              Amministratore del forum
                                Up
                                0
                                Down
                                ::

                                Raguardo ancora le cose sperando di capire, prima o poi, le cose che adesso non capisco (anche se confermo che le soluzioni proposte da persone più esperte di me funzionano).
                                Devo far osservare una inesattezza in uno dei messaggi di Claudio.
                                Il pacchetto “etoolbox” NON è necessario per avere il comando “\addto” che è definito in “babel”.
                                (vedi codice nel messaggio 123225 e codice con commento in messaggio 123224)
                                Tutto quì, per ora.
                                saluti
                                Battista

                                p.s.:
                                FORSE nella guida-guit (versione B5-0.99.58 — 2026-01-09 appena scaricata)
                                c’è qualche problema nella documentazione di “\addto”.
                                Si vedano le prime righe di pagina 476 e la nota nella stessa pagine, e si veda poi la pagina 649.
                                Nella prima il comando è riferito a babel; nella seconda sembra (?) riferito a etoolbox.
                                B.

                              • #134032
                                GuITstaff
                                Amministratore del forum
                                  Up
                                  0
                                  Down
                                  ::

                                  Il pacchetto “etoolbox” NON è necessario per avere il comando “\addto” che è definito in “babel”.

                                  Hai ragione, probabilmente Claudio si è confuso tra [tt]addto[/tt] (definito da [tt]babel[/tt], appositamente per modificare le impostazioni linguistiche) e [tt]appto[/tt] (definito da [tt]etoolbox[/tt], per l’inserimento di codice alla fine di una macro).

                                • #134033
                                  GuITstaff
                                  Amministratore del forum
                                    Up
                                    0
                                    Down
                                    ::

                                    Sì, avete ragione: ho confuso \appto con \addto. Scusate.

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

                                Go to top