- Questo topic ha 22 risposte, 3 partecipanti ed è stato aggiornato l'ultima volta 11 anni, 9 mesi fa da
Andrea.
-
CreatoreTopic
-
21 Giugno 2011 alle 8:32 #60348::
Prima di tutto buona estate a tutti!
Devo (senza fretta) impostare l’indice dei nomi del mio prossimo lavoro; nel precedente volume avevo distinto i nomi che comparivano nel testo da quelli che si trovavano in nota utilizzando le seguenti macro:
`\renewcommand{\edindex}[1]{\index{#1}}
\newcommand{\formatonota}[1]{\textbf{#1}}
\newcommand{\nindex}[1]{\index{#1|formatonota}}`
Dove, ovviamente, il comando \edindex indicizza le occorrenze dei nomi del testo e \nindex quelli che occorrono in nota.
Ora, invece di distinguerli col grassetto mi piacerebbe realizzare un indice che registrasse le seguenti occorrenze:- a) nome nel testo
b) nome nel testo e in nota
c) nome solo in notaEsempio:
Agostino d’Ippona, santo, 25, 27 e n, 30n
Vi assicuro che non è una richiesta/esigenza peregrina, perché è prassi abbastanza diffusa nella letteratura umanistica. Cosa dite?
Ciao e al solito grazie,
Luca
-
CreatoreTopic
-
AutoreRisposte
-
-
21 Giugno 2011 alle 10:17 #60349::
Prima di tutto buona estate a tutti!
Devo (senza fretta) impostare l’indice dei nomi del mio prossimo lavoro; nel precedente volume avevo distinto i nomi che comparivano nel testo da quelli che si trovavano in nota utilizzando le seguenti macro:
`\renewcommand{\edindex}[1]{\index{#1}}
\newcommand{\formatonota}[1]{\textbf{#1}}
\newcommand{\nindex}[1]{\index{#1|formatonota}}`
Dove, ovviamente, il comando \edindex indicizza le occorrenze dei nomi del testo e \nindex quelli che occorrono in nota.
Ora, invece di distinguerli col grassetto mi piacerebbe realizzare un indice che registrasse le seguenti occorrenze:- a) nome nel testo
b) nome nel testo e in nota
c) nome solo in notaEsempio:
Agostino d’Ippona, santo, 25, 27 e n, 30n
Vi assicuro che non è una richiesta/esigenza peregrina, perché è prassi abbastanza diffusa nella letteratura umanistica. Cosa dite?
Ciao e al solito grazie,
Luca`\begin{filecontents*}{nomiinnota.ist}
item_0 “\\stoprange \n\\item ”
delim_0 “\\startrange ”
postamble “\\stoprange\n\n\\end{theindex}\n”
\end{filecontents*}
\documentclass[a4paper]{book}
\usepackage{imakeidx,etoolbox}
\makeindex[options=-r -s nomiinnota]\newcommand\nindex[1]{\index{#1|innota}}
\newcommand\innota[1]{#1n}\makeatletter
\let\stoprange\relax
\def\startrange#1\stoprange{\begingroup\process@range{#1}\endgroup}
\def\process@range#1{\def\in@range{#1}\def\in@list{\unskip}%
\@for\next:=\in@range\do
{\expandafter\process@entry\next\@nil}
\in@list}
\def\process@entry{\@ifnextchar\innota{\process@nota}{\process@reg}}
\def\process@reg#1\@nil{%
\@namedef{exists#1}{, #1}%
\appto\in@list{\csname exists#1\endcsname}}
\def\process@nota#1#2\@nil{%
\@ifundefined{exists#2}
{\@namedef{exists#2}{, #2n}\appto\in@list{\csname exists#2\endcsname}}
{\@namedef{exists#2}{, #2 e n}}%
}
\makeatother\begin{document}
\mainmatterAgostino\index{Agostino}
\newpage
Agostino\index{Agostino}\footnote{Agostino\nindex{Agostino}}
\newpage
Agostino\index{Agostino}
\newpage
Agostino\footnote{x\nindex{Agostino}}
\backmatter
\printindex\end{document}`
Rimane il problema degli “implicit ranges” che per ora ho risolto ignorandolo. Makeindex, normalmente, genera da sé un intervallo (come 1–3) se un nome compare su tre o più pagine di seguito. Ti serve?Note tecniche: per indicizzare un nome scrivi \index{nome} se compare nel testo, scrivi \nindex{nome} se compare in una nota.
Ciao
Enrico
-
21 Giugno 2011 alle 11:10 #60350::
Enrico, grazie di cuore del tempo!
Ti chiedo subito se le prime righe del codice che mi hai postato
`\begin{filecontents*}{nomiinnota}
item_0 “\\stoprange \n\\item ”
delim_0 “\\startrange ”
postamble “\\stoprange\n\n\\end{theindex}\n”
\end{filecontents*} `
devono essere collocate necessariamente prima di evocare la classe, come hai fatto tu.
Poi ho un ulteriore dubbio, più serio. Come faccio a sapere quando indicizzo se il nome comparirà solo in nota, visto che non conosco ex ante come impaginerà LaTeX? Perché, se ho interpretato correttamente i comandi, il terzo caso
`Agostino\footnote{x\nindex{Agostino}} `
cioè l’occorrenza del nome solo in nota, prevede che io abbia questa informazione.
Infine, gli “implicit ranges”: sì, mi servono, ma qui si può semplificare e gli intervalli generati automaticamente potrebbero bastare, distinguendo solo i casi omogenei e non quelli misti, che mi pare che Makeindex faccia già di suo. Attendo lumi…
Ciao,
Luca
-
21 Giugno 2011 alle 12:07 #60351::
Enrico, grazie di cuore del tempo!
Ti chiedo subito se le prime righe del codice che mi hai postato
`\begin{filecontents*}{nomiinnota}
item_0 “\\stoprange \n\\item ”
delim_0 “\\startrange ”
postamble “\\stoprange\n\n\\end{theindex}\n”
\end{filecontents*} `
devono essere collocate necessariamente prima di evocare la classe, come hai fatto tu.
Poi ho un ulteriore dubbio, più serio. Come faccio a sapere quando indicizzo se il nome comparirà solo in nota, visto che non conosco ex ante come impaginerà LaTeX? Perché, se ho interpretato correttamente i comandi, il terzo caso
`Agostino\footnote{x\nindex{Agostino}} `
cioè l’occorrenza del nome solo in nota, prevede che io abbia questa informazione.
Infine, gli “implicit ranges”: sì, mi servono, ma qui si può semplificare e gli intervalli generati automaticamente potrebbero bastare, distinguendo solo i casi omogenei e non quelli misti, che mi pare che Makeindex faccia già di suo. Attendo lumi…
Ciao,
LucaIl “filecontents” serve solo per avere a disposizione il file “nomiinnota.ist”, che è essenziale per la faccenda.
Non capisco l’obiezione: quando scrivi sai se il nome che stai indicizzando è in nota, visto che sei nell’argomento di \footnote. C’è qualcosa che non riesco a capire?
Per gli “implicit ranges” automatici è piuttosto complicato. Ma già così com’è, se hai una situazione come
- 1 2 3 3n 4 5n
ottieni nell’indice
- 1-3, 3n, 4, 5n
Basta eliminare “-r” dalle opzioni a \makeindex.
Ciao
Enrico
-
21 Giugno 2011 alle 13:31 #60352::
Sì, son io che mi sono spiegato male, e quello che dici è ovvio: se sono nell’ambiente \footnote, dovrei sapere di esserci…
Il punto, sempre che abbia capito bene, è che i nomi in nota possono essere indicizzati con due comandi:
\nindex se so che il nome compare anche nel testo di quella stessa pagina
x\nindex se invece sono sicuro che il nome compare solo in nota
Però mi chiedo se quell’x in quell’ultimo tuo esempio non sia un refuso, e che i nomi in nota si debbano richiamare con un unico comando, \nindex. E’ così?
Per gli “implicit ranges” è inutile fasciarsi la testa prima: provo a lavorarci un po’ e poi vediamo le eventuali esigenze.
Ciao e grazie,
Luca
-
21 Giugno 2011 alle 13:42 #60353::
Sì, son io che mi sono spiegato male, e quello che dici è ovvio: se sono nell’ambiente \footnote, dovrei sapere di esserci…
Il punto, sempre che abbia capito bene, è che i nomi in nota possono essere indicizzati con due comandi:
\nindex se so che il nome compare anche nel testo di quella stessa pagina
x\nindex se invece sono sicuro che il nome compare solo in nota
Però mi chiedo se quell’x in quell’ultimo tuo esempio non sia un refuso, e che i nomi in nota si debbano richiamare con un unico comando, \nindex. E’ così?
Per gli “implicit ranges” è inutile fasciarsi la testa prima: provo a lavorarci un po’ e poi vediamo le eventuali esigenze.
Ciao e grazie,
Luca\footnote{…\nindex{nome}…}
Solo così. Se poi il nome compare nella stessa pagina, sono le macro ad arrangiarsi.
Ciao
Enrico
-
21 Giugno 2011 alle 14:15 #60354
-
21 Giugno 2011 alle 14:19 #60355
-
21 Giugno 2011 alle 15:07 #60356::
Ho passato una ad una le lettere del tuo codice per trovare traccia di quella ‘x’ e solo allora mi è venuto il dubbio che non c’entrasse nulla con la tua alchimia…
Ciao,
LucaP.S.
Compilandolo da solo come esempio funziona, ma nel mio file deve esserci qualche conflitto perché mi dà errore: appena ho un po’ di calma provo a vedere se riesco a capire dove nasce l’inghippo (ovviamente ho tolto ciò che da me c’è già, come \begin{document} et similia.
-
21 Giugno 2011 alle 15:16 #60357::
Ho passato una ad una le lettere del tuo codice per trovare traccia di quella ‘x’ e solo allora mi è venuto il dubbio che non c’entrasse nulla con la tua alchimia…
Ciao,
LucaP.S.
Compilandolo da solo come esempio funziona, ma nel mio file deve esserci qualche conflitto perché mi dà errore: appena ho un po’ di calma provo a vedere se riesco a capire dove nasce l’inghippo (ovviamente ho tolto ciò che da me c’è già, come \begin{document} et similia.Controlla che il file sia identico a quello che ho indicato (esclusa l’opzione “-r”). Ho fatto una lieve modifica a una parte che potrebbe essere la causa del tuo problema.
Ciao
Enrico
-
21 Giugno 2011 alle 15:45 #60358
-
21 Giugno 2011 alle 15:49 #60359::
Infatti l’editore mi dà questa indicazione:
Missing \begin{document}. \makeindex[options=-r -s nomiinnota]
Ho provato anche a spostare il comando \begin{document}, ma senza successo.
Il codice è per forza di cose identico perché copio e incollo…Ho l’impressione che quell’errore possa dipendere dal fatto che non hai imakeidx installato. Sostituisci “imakeidx” con “makeidx”, togli l’argomento opzionale a \makeindex e, per avere l’indice, esegui dopo la compilazione
`makeindex -s nomiinnota`
e ricompila. Ah! Questi che usano Ubuntu e la sua vetusta TeX Live 2009! 🙂Ciao
Enrico
-
21 Giugno 2011 alle 16:08 #60360::
Veramente ho Ubuntu nella sua ultima versione e TeXLive 2010 (il rilascio ufficiale della 2011 ho letto che è previsto per il primo di luglio, e quindi non sono ancora vecchio…). E poi per l’occasione ho aperto il terminale e ho verificato che il pacchetto imakeidx è presente nella mia distribuzione (e così ho scoperto anche chi sono gli autori…).
No, il pasticcio deve essere da un’altra parte, ma non capisco dove 😥
Ciao,
Luca
-
21 Giugno 2011 alle 16:11 #60361::
Veramente ho Ubuntu nella sua ultima versione e TeXLive 2010 (il rilascio ufficiale della 2011 ho letto che è previsto per il primo di luglio, e quindi non sono ancora vecchio…). E poi per l’occasione ho aperto il terminale e ho verificato che il pacchetto imakeidx è presente nella mia distribuzione (e così ho scoperto anche chi sono gli autori…).
No, il pasticcio deve essere da un’altra parte, ma non capisco dove 😥
Ciao,
LucaCopiato l’esempio su un file nuovo, funziona alla perfezione. Con la 2010 e con la 2011/test. 🙂
Ciao
Enrico
-
21 Giugno 2011 alle 16:48 #60362
-
22 Giugno 2011 alle 9:19 #60363
-
22 Giugno 2011 alle 9:25 #60364::
Ecco qui l’errore che mi dà compilando con TeXworks
`! Package imakeidx Error: Incompatible package won't be loaded.
See the imakeidx package documentation for explanation`.
Con cosa sarà incompatibile? Se è necessario posto il file sorgente.
Ciao,
LucaNon si può usare imakeidx con memoir. Questo non impedisce di avere indici multipli, come spiega il manuale di memoir; solo che non si può automatizzare la composizione degli indici e occorre chiamare makeindex manualmente.
Ciao
Enrico
-
22 Giugno 2011 alle 9:44 #60365
-
22 Giugno 2011 alle 9:47 #60366::
😥 Dunque devo rinunciare all’indice dei nomi così strutturato o cambiare classe?
LucaPerché dovresti rinunciare? Il pacchetto imakeidx non è affatto necessario. Se quello è il tuo unico indice analitico, scrivi
`\usepackage{makeidx}
\makeindex`
e compila con makeindex alla fine della composizione con pdflatex, come al solito, solo che devi dare l’opzione da riga di comando “-s nomiinnota”. Dov’è il problema?Ciao
Enrico
-
22 Giugno 2011 alle 10:04 #60367::
Sì, è l’unico indice analitico: il problema è la riga di comando 😳
Fammi capire, ad es. con TeXmakerX: compilo con pdflatex, e fino a qui ci sono, poi compilo con makeindex (nell’editor è preimpostata la scorciatoia con F12) e poi apro il terminale? O devo compilare tutto da terminale?
Ciao,
Luca
-
22 Giugno 2011 alle 11:50 #60368::
Sì, è l’unico indice analitico: il problema è la riga di comando 😳
Fammi capire, ad es. con TeXmakerX: compilo con pdflatex, e fino a qui ci sono, poi compilo con makeindex (nell’editor è preimpostata la scorciatoia con F12) e poi apro il terminale? O devo compilare tutto da terminale?
Ciao,
LucaUsa il terminale per lanciare makeindex. La compilazione pdflatex puoi farla benissimo da TexmakerX (TeXStudio).
Ciao
Enrico
-
22 Giugno 2011 alle 14:54 #60369::
Grazie, ora ho capito! Cioè, ho capito i passaggi: così finalmente mi avventurerò nell’aprire il mio file dal terminale (cosa che non ho mai fatto) e, appunto, a lanciare, makeindex.
A proposito, avevi ragione a dirmi che mi devo aggiornare: ora, dal forum, ho imparato che TexmakerX si chiama TeXStudio… Qui uno esce fuori un attimo per prendere una boccata d’aria, rientra, e trova le pareti di casa di un altro colore!
Ciao,
Luca
-
11 Dicembre 2014 alle 18:33 #60370::
Buongiorno,
ammetto subito di essere un neofita del linguaggio LaTex e quindi accetto il rischio di porre una domanda che paga la mia inesperienza. Il problema è questo: sto scrivendo la tesi di laurea e anch’io ho bisogno di un indice di nomi secondo tre tipologie di occorrenza come qui sotto già richiesto.
Ora, ho copiato sul mio documento sia questa sintassi:\begin{filecontents*}{nomiinnota.ist}
item_0 “\\stoprange \n\\item ”
delim_0 “\\startrange ”
postamble “\\stoprange\n\n\\end{theindex}\n”
\end{filecontents*}che quella successiva:
\usepackage{imakeidx,etoolbox}
\makeindex[options=-r -s nomiinnota]\newcommand\nindex[1]{\index{#1|innota}}
\newcommand\innota[1]{#1n}\makeatletter
\let\stoprange\relax
\def\startrange#1\stoprange{\begingroup\process@range{#1}\endgroup}
\def\process@range#1{\def\in@range{#1}\def\in@list{\unskip}%
\@for\next:=\in@range\do
{\expandafter\process@entry\next\@nil}
\in@list}
\def\process@entry{\@ifnextchar\innota{\process@nota}{\process@reg}}
\def\process@reg#1\@nil{%
\@namedef{exists#1}{, #1}%
\appto\in@list{\csname exists#1\endcsname}}
\def\process@nota#1#2\@nil{%
\@ifundefined{exists#2}
{\@namedef{exists#2}{, #2n}\appto\in@list{\csname exists#2\endcsname}}
{\@namedef{exists#2}{, #2 e n}}%
}
\makeatotherTuttavia questi comandi funzionano soltanto per un nome – che nell’esempio riportato sotto è Agostino. Quale sintassi devo dunque mutare – o numero – per far sì che possa inserire in Indice quanti nomi voglio siano essi in testo, in testo e nota o solo in nota?
Grazie
-
-
AutoreRisposte
- Devi essere connesso per rispondere a questo topic.