- Questo topic ha 8 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 17 anni, 3 mesi fa da
Benzecrì.
-
CreatoreTopic
-
28 Maggio 2009 alle 22:16 #34169::
Ciao, sto scrivendo la mia tesi di laurea con latex e finora leggendo il forum e i manuali ho sempre risolto qualsiasi tipo di problema, solo che questa volta il prof. mi ha chiesto qualcosa che non so se si possa fare, ossia:io ho inserito il mio indice all’inizio con \tableofcontents il cui risultato, ovviamente è:
Introduzione
1. Nome del capitolo 1
1.1 bla bla bla………………………5
1.1.1 dbvhkkhkecfk…………… 6e via dicendo, ovviamente con tutti i rientri che il comando produce per paragrafi e sottoparagrafi.
Adesso il problema è ke il prof vorrebbe un’indice praticamente cosi:Introduzione
Capitolo 1 (centrato)
1. Nome del capitolo 1 (proprio sotto la scritta capitolo 1)
1.1 bla bla bla………………………5
1.1.1 dbvhkkhkecfk…………… 6ovviamente il tutto con gli stessi rientri di prima e per tutti i capitoli.
Esiste una soluzione a ciò?
Spero di sì!Grazie!
-
CreatoreTopic
-
AutoreRisposte
-
-
28 Maggio 2009 alle 22:55 #34170::
Ciao, sto scrivendo la mia tesi di laurea con latex e finora leggendo il forum e i manuali ho sempre risolto qualsiasi tipo di problema, solo che questa volta il prof. mi ha chiesto qualcosa che non so se si possa fare, ossia:
io ho inserito il mio indice all’inizio con \tableofcontents il cui risultato, ovviamente è:
Introduzione
1. Nome del capitolo 1
1.1 bla bla bla………………………5
1.1.1 dbvhkkhkecfk…………… 6e via dicendo, ovviamente con tutti i rientri che il comando produce per paragrafi e sottoparagrafi.
Adesso il problema è ke il prof vorrebbe un’indice praticamente cosi:Introduzione
Capitolo 1 (centrato)
1. Nome del capitolo 1 (proprio sotto la scritta capitolo 1)
1.1 bla bla bla………………………5
1.1.1 dbvhkkhkecfk…………… 6ovviamente il tutto con gli stessi rientri di prima e per tutti i capitoli.
Esiste una soluzione a ciò?
Spero di sì!Non è che si capisca molto. Il numero di pagina di inizio dei capitoli dove dovrebbe andare? E l’introduzione? Andrebbe centrata anche quella?
Se non ti serve il numero di pagina di inizio dei capitoli, prova a scrivere questo incantesimo nel preambolo del documento:
`\makeatletter
\let\@@l@chapter\l@chapter
\def\l@chapter#1#2{\dopage{#2}\checknumberline#1\numberline{}\@nil}
\def\checknumberline#1\numberline#2#3\@nil{%
\def\next{#1}%
\ifx\next\@empty % \numberline is present
\begin{center}\bfseries\let\numberline\@gobble
\chaptername\ #2\\#3
\end{center}
\else % \numberline is not present
\@@l@chapter{#1}{\keptpage}
\fi
}
\def\dopage#1{\def\keptpage{#1}}
\makeatother`
Ciao
Enrico
-
29 Maggio 2009 alle 8:34 #34171::
Ciao, sto scrivendo la mia tesi di laurea con latex e finora leggendo il forum e i manuali ho sempre risolto qualsiasi tipo di problema, solo che questa volta il prof. mi ha chiesto qualcosa che non so se si possa fare, ossia:
io ho inserito il mio indice all’inizio con \tableofcontents il cui risultato, ovviamente è:
Introduzione
1. Nome del capitolo 1
1.1 bla bla bla………………………5
1.1.1 dbvhkkhkecfk…………… 6e via dicendo, ovviamente con tutti i rientri che il comando produce per paragrafi e sottoparagrafi.
Adesso il problema è ke il prof vorrebbe un’indice praticamente cosi:Introduzione
Capitolo 1 (centrato)
1. Nome del capitolo 1 (proprio sotto la scritta capitolo 1)
1.1 bla bla bla………………………5
1.1.1 dbvhkkhkecfk…………… 6ovviamente il tutto con gli stessi rientri di prima e per tutti i capitoli.
Esiste una soluzione a ciò?
Spero di sì!Non è che si capisca molto. Il numero di pagina di inizio dei capitoli dove dovrebbe andare? E l’introduzione? Andrebbe centrata anche quella?
Se non ti serve il numero di pagina di inizio dei capitoli, prova a scrivere questo incantesimo nel preambolo del documento:
`\makeatletter
\let\@@l@chapter\l@chapter
\def\l@chapter#1#2{\dopage{#2}\checknumberline#1\numberline{}\@nil}
\def\checknumberline#1\numberline#2#3\@nil{%
\def\next{#1}%
\ifx\next\@empty % \numberline is present
\begin{center}\bfseries\let\numberline\@gobble
\chaptername\ #2\\#3
\end{center}
\else % \numberline is not present
\@@l@chapter{#1}{\keptpage}
\fi
}
\def\dopage#1{\def\keptpage{#1}}
\makeatother`
Ciao
EnricoGrazie Mille!!!
Hai ragione e mi scuso, perchè rileggendo mi sono accorto di aver scritto un po’ in aramaico… 😀Cmq per quanto riguarda il capitolo al centro c’hai preso in pieno….
…il problema ora è che paragrafi e sottoparagrafi sono tutti allineati al margine sinistro, mentre io vorrei i sottoparagrafi un po’ più rientrati rispetto ai paragrafi…si puo’ risolvere anche questo???
Grazie ancora!!!
Ciao
-
29 Maggio 2009 alle 10:22 #34172::
Grazie Mille!!!
Hai ragione e mi scuso, perchè rileggendo mi sono accorto di aver scritto un po’ in aramaico… 😀Cmq per quanto riguarda il capitolo al centro c’hai preso in pieno….
…il problema ora è che paragrafi e sottoparagrafi sono tutti allineati al margine sinistro, mentre io vorrei i sottoparagrafi un po’ più rientrati rispetto ai paragrafi…si puo’ risolvere anche questo???
Grazie ancora!!!
CiaoLa versione corretta dovrebbe essere questa:
`\makeatletter
\let\@@l@chapter\l@chapter
\def\l@chapter#1#2{\dopage{#2}\checknumberline#1\numberline{}\@nil}
\def\checknumberline#1\numberline#2#3\@nil{%
\def\next{#1}%
\ifx\next\@empty % \numberline is present
\addpenalty{-\@highpenalty}%
\begin{center}\bfseries\let\numberline\@gobble
\chaptername\ #2\\
% \hbox to\hsize{\hss#3\hss\llap{\keptpage}}
#3
\end{center}\par
\penalty\@highpenalty
\else % \numberline is not present
\@@l@chapter{#1}{\keptpage}
\fi
}
\def\dopage#1{\def\keptpage{#1}}
\makeatother`
Se vuoi il numero di pagina per i capitoli, togli il % dalla riga che comincia con \hbox e mettilo su quella successiva.Ciao
Enrico
-
29 Maggio 2009 alle 11:41 #34173
-
29 Maggio 2009 alle 17:12 #34174::
Perfetto, ti sono debitore!!!!
Adesso proviamo a spiegare l’arcano mistero. In verde ci sono le parti della definizione, in blu altro codice per le spiegazioni.
Sezione 1
`\makeatletter
\let\@@l@chapter\l@chapter`
Solito cappello per poter usare i nomi interni. Il comando \l@chapter è quello responsabile della produzione delle righe dell’indice: la riga
`\contentsline{chapter}{}{ `}
viene trasformata in
`\l@chapter{}{ `}
Si tratta adesso di ridefinire \l@chapter; le righe nel .toc sono di due tipi:
`\contentsline{chapter}{Introduzione}{iii}
\contentsline{\numberline {1}Titolo}{1}`
cioè quando il capitolo è numerato c’è un comando \numberline.Sezione 2
`\def\l@chapter#1#2{\dopage{#2}\checknumberline#1\numberline{}\@nil}`
Ecco la ridefinizione di \l@chapter; memorizziamo il secondo argomento (cioè il numero di pagina) passandolo a \dopage, il primo viene invece trattato con \checknumberline.Sezione 3
`\def\checknumberline#1\numberline#2#3\@nil{% `
Esaminiamo la definizione di \checknumberline, prima la parte dei parametri. Il comando ha tre argomenti; il primo è delimitato da \numberline, il secondo non è delimitato e il terzo è delimitato da \@nil. Vediamo che cosa si trova davanti TeX nei due casi di prima.Caso del capitolo non numerato:
`\checknumber Introduzione\numberline{}\@nil`
Qui il primo argomento di \checknumber è “Introduzione”, il secondo è la coppia di graffe mentre il terzo è vuoto.Caso del capitolo non numerato:
`\checknumber\numberline{1}Titolo\numberline{}\@nil`
Qui il primo argomento è vuoto, il secondo è “{1}” e il terzo è “Titolo\numberline{}”.Sezione 4
`\def\checknumberline#1\numberline#2#3\@nil{%
\def\next{#1}%
\ifx\next\@empty % \numberline is present
\addpenalty{-\@highpenalty}%
\begin{center}\bfseries\let\numberline\@gobble
\chaptername\ #2\\
% \hbox to\hsize{\hss#3\hss\llap{\keptpage}}
#3
\end{center}\par
\penalty\@highpenalty
\else % \numberline is not present
\@@l@chapter{#1}{\keptpage}
\fi
}`
Ora vediamo che cosa fa \checknumberline dei suoi argomenti. Per prima cosa definisce \next come il primo argomento; poi guarda se questo argomento è vuoto.Se il primo argomento è vuoto, siamo nel caso di un capitolo numerato. Si emette una penalità per facilitare un cambio pagina prima della riga nell’indice poi si apre un ambiente center nel quale imponiamo il carattere nero e ridefiniamo (localmente) \numberline in modo che quel pezzo che rimane nel terzo argomento si espanda a niente. Nella prima riga di center mettiamo “\chaptername\ #2”, cioè “Capitolo 1” nel caso in esame; nella seconda riga mettiamo #3 (si veda più sotto per l’alternativa commentata).
Chiudiamo center ed emettiamo un \par per azzerare i parametri di costruzione del paragrafo, è questo il trucco che permette i rientri delle righe seguenti relative alle sezioni. Poi una penalità alta per scoraggiare un cambio pagina.
Se il primo argomento non è vuoto, siamo nel caso di un capitolo non numerato e quindi eseguiamo \@@l@chapter{#1}{\keptpage}; \keptpage si espande al numero di pagina che avevamo passato a \dopage; in altre parole, facciamo lo stesso lavoro che farebbe \l@chapter originale.
Sezione 5
`\def\dopage#1{\def\keptpage{#1}}
\makeatother`
Questa è appunto la definizione di \dopage che memorizza in \keptpage il numero di pagina. Poi chiudiamo la faccenda con il solito \makeatother, cioè “fine dell’incantesimo”.Sezione 6
Nella forma alternativa, abbiamo, invece che #3 nella seconda riga del center,
`\hbox to\hsize{\hss#3\hss\llap{\keptpage}}`
Una riga larga come la giustezza, in cui il titolo del capitolo è centrato e il numero di pagina è allineato al margine destro.Ciao
Enrico
-
29 Maggio 2009 alle 19:42 #34175
-
29 Maggio 2009 alle 21:13 #34176::
😯 😯 😯 WOW 😯 😯 😯
😀 Probabilmente da solo, sarei arrivato al suicidio!!!In effetti ci ho messo alcuni minuti ieri sera per risolvere un problemino sciocco (bisognava aggiungere {} fra \numberline e \@nil :(). Poi stamattina ho finito di sistemare con le penalità e tutto il resto.
Davvero, sapendo che cosa si vuole non è così difficile. Ma occorre una certa esperienza con le macro, con il TeXbook e source2e (cioè il codice commentato di LaTeX): il forum serve proprio a questo, no?
Ciao
Enrico
-
29 Maggio 2009 alle 22:15 #34177
-
-
AutoreRisposte
- Devi essere connesso per rispondere a questo topic.