Indice dei nomi con tre tipologie di occorrenze

  • Creatore
    Topic
  • #60348
    Up
    0
    Down
    ::


    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 nota

    Esempio:

    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

Visualizzazione 21 filoni di risposte
  • Autore
    Risposte
    • #60349
      Up
      0
      Down
      ::

      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 nota

      Esempio:

      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}
      \mainmatter

      Agostino\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

    • #60350
      Up
      0
      Down
      ::


      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

    • #60351
      Up
      0
      Down
      ::

      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

      Il “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

    • #60352
      Up
      0
      Down
      ::


      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

    • #60353
      Up
      0
      Down
      ::

      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

    • #60354
      Up
      0
      Down
      ::


      Bene! Ora è chiaro…
      Grazie ancora,
      Luca

    • #60355
      Up
      0
      Down
      ::

      Bene! Ora è chiaro…
      Grazie ancora,
      Luca

      Ah, la x stava solo per “testo della nota”.

      Ciao
      Enrico

    • #60356
      Up
      0
      Down
      ::


      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,
      Luca

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

    • #60357
      Up
      0
      Down
      ::

      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,
      Luca

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

    • #60358
      Up
      0
      Down
      ::


      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…
      Ciao,
      Luca

    • #60359
      Up
      0
      Down
      ::

      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

    • #60360
      Up
      0
      Down
      ::


      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

    • #60361
      Up
      0
      Down
      ::

      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

      Copiato l’esempio su un file nuovo, funziona alla perfezione. Con la 2010 e con la 2011/test. 🙂

      Ciao
      Enrico

    • #60362
      Up
      0
      Down
      ::


      Anche a me funzionava l’esempio! Ma appunto devo capire cosa succede quando incollo le nuove macro sul mio file, tutto qui…
      Ti terrò aggiornato.
      Ciao,
      Luca

    • #60363
      Up
      0
      Down
      ::


      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,
      Luca

    • #60364
      Up
      0
      Down
      ::

      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,
      Luca

      Non 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

    • #60365
      Up
      0
      Down
      ::


      😥 Dunque devo rinunciare all’indice dei nomi così strutturato o cambiare classe?
      Luca

    • #60366
      Up
      0
      Down
      ::

      😥 Dunque devo rinunciare all’indice dei nomi così strutturato o cambiare classe?
      Luca

      Perché 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

    • #60367
      Up
      0
      Down
      ::


      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

    • #60368
      Up
      0
      Down
      ::

      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

      Usa il terminale per lanciare makeindex. La compilazione pdflatex puoi farla benissimo da TexmakerX (TeXStudio).

      Ciao
      Enrico

    • #60369
      Up
      0
      Down
      ::


      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

    • #60370
      Up
      0
      Down
      ::


      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}}%
      }
      \makeatother

      Tuttavia 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

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

Go to top