- Questo topic ha 6 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 21 anni, 2 mesi fa da
jimmi.
-
CreatoreTopic
-
3 Luglio 2005 alle 17:02 #6286::
Ciao,stò scrivendo un documento in formato book composto da molte sezioni
corte, e vorrei raggiungere ognuna di queste tramite “parole chiave”
riunite nell’indice analitico.Purtroppo mi sono accorto che se la stessa voce di indice è ripetuta
su più pagine consecutive il risultato nell’indice è qualcosa del
genere:
…
parola chiave 51-56
…mentre io vorrei ottenere questo:
…
parola chiave 51, 52, 52, 53, 54, 55, 56
…In pratica vorrei avere elencato nell’indice ogni singola occorrenza di “parola chiave”; il doppio 52 significa che in quella pagina vi sono 2 sezioni che trattano dell’argomento.
Esiste un modo per evitare che makeidx mi accorpi la numerazione delle
pagine, od esiste un’altro pacchetto che mi permetta di ottenere
questo?Grazie in anticipo
Jimmi
-
CreatoreTopic
-
AutoreRisposte
-
-
3 Luglio 2005 alle 18:03 #6287::
stò scrivendo un documento in formato book composto da molte sezioni
corte, e vorrei raggiungere ognuna di queste tramite “parole chiave”
riunite nell’indice analitico.
Purtroppo mi sono accorto che se la stessa voce di indice è ripetuta
su più pagine consecutive il risultato nell’indice è qualcosa del
genere:
…
parola chiave 51-56
…
mentre io vorrei ottenere questo:
…
parola chiave 51, 52, 52, 53, 54, 55, 56
…
In pratica vorrei avere elencato nell’indice ogni singola occorrenza di “parola chiave”; il doppio 52 significa che in quella pagina vi sono 2 sezioni che trattano dell’argomento.
Esiste un modo per evitare che makeidx mi accorpi la numerazione delle
pagine, od esiste un’altro pacchetto che mi permetta di ottenere
questo?Non mi pare che makeidx accorpi i numeri di pagina da solo; è l’utente che lo fa con`\index{parolachiave|(}
\index{parolachiave|)}`Sinceramente, il ripetere il numero di pagina per indicare ripetizione dell’occorrenza non mi sembra una buona idea. Non credo che makeindex possa fare quello che chiedi, se non con un bieco trucco, che richiede di usare comandi diversi.`
\newcommand{\xxa}[1]{#1}
\newcommand{\xxb}[1]{#1}
\newcommand{\xxc}[1]{#1}
…
\index{parolachiave|xxa}
…
\index{parolachiave|xxb}`
Se i due comandi index cadono nella stessa pagina, saranno indicizzati due volte. Puoi definire quanti comandi del tipo \xxvuoi. Proviamo?`\newcommand{\xxa}[1]{#1}
\newcommand{\xxb}[1]{#1}
\newcommand{\xxc}[1]{#1}
\newcommand{\xxd}[1]{#1}
\newcommand{\xxe}[1]{#1}
\newcommand{\xxf}[1]{#1}\newcounter{idxcount}
\newcommand{\idxsuffix}{\ifcase\value{idxcount}%
a\or b\or c\or d\or e\or f\fi}\newcommand{\myindex}[1]{%
\index{#1|xx\idxsuffix}%
\stepcounter{idxcount}%
\ifnum\value{idxcount}=6\relax
\setcounter{idxcount}{0}\fi}`
Così usi \myindex per quelle parole chiave che soffrono del tuo problema. Hai un limite di sei occorrenze su una pagina, ma credo siano sufficienti. Se no, dovrebbe essere chiaro come si può aumentarle. Chiedo scusa in anticipo, visto che non ho usato il pacchetto ifthen e ho mostrato alcuni trucchi segreti dei maghi.Ciao
EnricoPS: dimenticavo! “Sto” si scrive senza accento.
-
4 Luglio 2005 alle 11:04 #6288::
Non mi pare che makeidx accorpi i numeri di pagina da solo; è l’utente che lo fa con`\index{parolachiave|(}
\index{parolachiave|)}`Ti devo contraddire, ho costruito un semplice esempio composto da:
`\section{sezione}\index{uno}\index{due}
testo testo …\section{sezione}\index{uno}\index{due}
testo testo …`ripetuto diverse volte fino a riempire 4 pagine ed il risultato è stato:
Index
due, 1–4
uno, 1–4Sinceramente, il ripetere il numero di pagina per indicare ripetizione dell’occorrenza non mi sembra una buona idea.
Infatti neanche a me ora piace molto usare makeidx per questo scopo, ma è l’unica soluzione che conosco, essendo un pò agli inizi. Sapete suggerirmi qualche altro mezzo più efficace per costruire un “database” di occorrenze ?
8–
Proviamo?
8–Urca! 😯 Potente scorre la Forza nei tuoi tasti, o grande maestro.
Proverò a seguire umilmente la tua ombra studiandomi come usare ifthen. 😉PS: dimenticavo! “Sto” si scrive senza accento.
E ciài raggione… E sono anche figlio di una maestra, se mi vedesse ora. 😥
-
4 Luglio 2005 alle 12:32 #6289::
Non mi pare che makeidx accorpi i numeri di pagina da solo; è l’utente che lo fa con`\index{parolachiave|(}
\index{parolachiave|)}`Ti devo contraddire, ho costruito un semplice esempio composto da:
“\section{sezione}\index{uno}\index{due}
testo testo …\section{sezione}\index{uno}\index{due}
testo testo …”ripetuto diverse volte fino a riempire 4 pagine ed il risultato è stato:
Index
due, 1–4
uno, 1–4Cito dalla manpage di makeindex:`
-r Disable implicit page range formation; page ranges must be
created by using explicit range operators; see SPECIAL
EFFECTS below. By default, three or more successive pages
are automatically abbreviated as a range (e.g. 1–5).`
Devo dire che non ricordavo questa proprietà di makeindex. Dunque, usare makeindex -r, che così non accorpa.Quanto alle ripetizioni nell’indice analitico: il numero di pagina da solo dice che il termine compare in quella pagina. Se compare più volte in sezioni diverse, dovrebbe bastare. Altrimenti dovresti arricchire l’indice; per esempio con numero di pagina e numero di sezione, magari fra parentesi. Come si può fare? Mi viene in mente una soluzione.
`
\def\sectionlabel#1{\label{#1}%
\def\currentlabel{#1}%
\expandafter\edef\csname richindex#1\endcsname##1{##1~(\ref{\currentlabel})}}\newcommand{\myindex}[1]{\index{#1|richindex\currentlabel}}
`
Poi usi la faccenda così:`
\section{Prima}\sectionlabel{uno}
Testo…\myindex{prima}…\section{Seconda}\sectionlabel{due}
Testo…\myindex{seconda}…
`
Attento che come argomento di \sectionlabel puoi usare solo lettere, non come in una \label normale; puoi usare \ref al modo usuale, però. Prima di usare makeindex devi assicurarti che i riferimenti incrociati siano risolti (cioè che non ci siano più avvisi del tipo “Label(s) may have changed. Rerun to get cross-references right.”).Wow 8) Ho usato: \expandafter, \edef, \csname…\endcsname e anche una definizione con parametro dentro una definizione 😮 Roba da duri 😀
Ciao
Enrico
-
4 Luglio 2005 alle 14:32 #6290::
Cito dalla manpage di makeindex:
Azz! lo sapevo che prima o poi un bel RTFM me lo beccavo 😳
Comunque -r funziona egregiamente, per ora un bel miglioramento.Quanto alle ripetizioni nell’indice analitico:
8–E con questo ne ho da studiare per un pò 😮
Ti ringrazio molto per la pazienza, magari quando ho trovato la soluzione ottimale posto il risultato.
Ciao
Jimmi
-
4 Luglio 2005 alle 15:47 #6291::
Quanto alle ripetizioni nell’indice analitico:
8–E con questo ne ho da studiare per un pò 😮
Ti ringrazio molto per la pazienza, magari quando ho trovato la soluzione ottimale posto il risultato.
Non c’è molto da studiare. La parte fondamentale è`\def\sectionlabel#1{\label{#1}%
\def\currentlabel{#1}%
\expandafter\edef\csname richindex#1\endcsname##1{##1~(\ref{\currentlabel})}}
`A parte i trucchi magici, guarda dove c’è scritto`{##1~(\ref{\currentlabel})}`Qui ho messo come uscirà l’indice: numero di pagina (##1), uno spazio (senza a capo) e, fra parentesi, il numero di sezione (\ref{\currentlabel}). Nota che \currentlabel non è un comando standard, così come \sectionlabel. Infatti \currentlabel produce l’ultima etichetta introdotta con il comando \sectionlabel. Lì puoi sbizzarrirti e decidere il formato come ti pare. Vuoi le parentesi quadre e il numero in nero? Attento al \noexpand (non è una bestia pericolosa, ma va trattata con cautela :D).
`{##1~[\noexpand\textbf{\ref{\currentlabel}}]}`
Con una opportuna ridefinizione di “theindex” puoi anche indicare che formato stai usando
`\makeatletter
\renewenvironment{theindex}
{\if@twocolumn
\@restonecolfalse
\else
\@restonecoltrue
\fi
\twocolumn[\section*{\indexname}%
\myexplanation]%
\@mkboth{\MakeUppercase\indexname}%
{\MakeUppercase\indexname}%
\thispagestyle{plain}\parindent\z@
\parskip\z@ \@plus .3\p@\relax
\columnseprule \z@
\columnsep 35\p@
\let\item\@idxitem}
{\if@restonecol\onecolumn\else\clearpage\fi}
\newcommand{\myexplanation}{{\small Per ogni elemento dell'indice \`e
indicato il numero di pagina in cui compare e, tra parentesi,
il numero di sezione\par}\bigskip}
\makeatother`Ovviamente in \myexplanation puoi mettere quello che ti pare.E, suvvia, “pò” è come “stò”: un errore. 😉
Ciao
Enrico
-
5 Luglio 2005 alle 10:46 #6292
-
-
AutoreRisposte
- Devi essere connesso per rispondere a questo topic.