Composizione di dizionario: indice secondario

  • Creatore
    Topic
  • #50350
    Up
    0
    Down
    ::


    Salve,
    mi presento: mi chiamo Guido Sette, e collaboro come fotocompositore freelance con alcune piccole case editrici, in Italia e Francia, soprattutto nel mondo non-scientifico. Grazie ad alcuni amici ho scoperto da pochi mesi TeX, LaTeX e XeLaTEX, e ne sono entusiasta. Quando posso li uso invece di InDesign o Quark. I risultati sono senza dubbio superiori e danno maggiore soddisfazione non solo ai committenti, ma anche a me, come artigiano. Sono molto grato ai membri di questo Forum, per la qualità delle risorse e delle risposte che vi si trovano.

    Vorrei sottoporre un problema che non riesco proprio a risolvere. Ho cercato sia qui che sui gruppi Usenet, ma senza risultati concreti. Un preambolo al problema:

    Mi trovo a comporre un dizionario dei personaggi della Comedie Humaine. Ogni voce è intitolata dal nome del personaggio, ha una descrizione più o meno breve, e in fondo una lista dei titoli dei romanzi balzachiani ove il personaggio appare o vi è menzionato.

    Un brevissimo esempio: «ALBERTINE, cameriera di Madame de Bargeton, dal 1821 al 1824. [Illusioni perdute. Massimilla Doni. Beatrix.]» (Nota: la voce del dizionario comprende un solo titolo, il primo. Ho aggiunto gli altri due per facilitare la mia descrizione)

    Il dizionario elenca più di 2000 personaggi che compaiono nelle 137 opere della Comedie Humaine. L’editore vuole che ci sia anche un Indice dei titoli, che elenchi i 137 titoli in ordine alfabetico, con i personaggi che sono presenti in ciascun romanzo, circa in questo modo:

    `
    […]
    Beatrix:
    […]
    Albertine
    ecc.
    […]
    Illusioni perdute:
    […]
    Albertine
    Madame de Bargeton
    ecc.
    […]
    Massimilla Doni:
    […]
    Albertine
    ecc.
    `

    Ecco il mio problema: Come si potrebbero raccogliere i titoli che appaiono all’interno di ogni voce di personaggio, ed elencarle in un indice generale dei titoli?

    Pensavo che si potrebbe usare makeindex; il problema però è che quello raccoglie il valore del contatore della pagina ove un dato \index{key} appare.

    `
    \documentclass{minimal}
    \usepackage{makeidx}
    \makeindex
    \begin{document}
    \section{ALBERTINE}, cameriera di Madame de Bargeton, dal 1821 al 1824. [Illusioni perdute.\index{Illusioni perdute} Massimilla Doni.\index{Massimilla Doni} Beatrix.\index{Beatrix}]
    \backmatter
    \printindex
    \end{document}
    `

    Come potrei fare invece per avere makeindex raccogliere il valore della sezione ove \index{key} compare?

    Generalizzando, c’è qualche modo in cui potrei creare un indice in cui le voci siano elencate non (solamente) dal contatore di pagina, ma da altri contatori?

    Grazie in anticipo per l’aiuto o anche un consiglio di dove andare a studiare la cosa.

    Guido Sette

Visualizzazione 14 filoni di risposte
  • Autore
    Risposte
    • #50351
      Up
      0
      Down
      ::

      Salve,
      mi presento: mi chiamo Guido Sette, e collaboro come fotocompositore freelance con alcune piccole case editrici, in Italia e Francia, soprattutto nel mondo non-scientifico. Grazie ad alcuni amici ho scoperto da pochi mesi TeX, LaTeX e XeLaTEX, e ne sono entusiasta. Quando posso li uso invece di InDesign o Quark. I risultati sono senza dubbio superiori e danno maggiore soddisfazione non solo ai committenti, ma anche a me, come artigiano. Sono molto grato ai membri di questo Forum, per la qualità delle risorse e delle risposte che vi si trovano.

      Dovresti anche vedere ConTeXt, allora.

    • #50352
      Up
      0
      Down
      ::

      Dovresti anche vedere ConTeXt, allora.

      Purtroppo ConTeXt non è per me un’opzione possibile in questo momento. Le case editrici (quelle disponibili ad accettare impaginati non in InDesign o Quark) non accetterebbero altro che LaTeX/XeTeX. Inoltre, diversi package che uso non sono ancora disponibili per ConTeXt.

    • #50353
      Up
      0
      Down
      ::

      Dovresti anche vedere ConTeXt, allora.

      Purtroppo ConTeXt non è per me un’opzione possibile in questo momento. Le case editrici (quelle disponibili ad accettare impaginati non in InDesign o Quark) non accetterebbero altro che LaTeX/XeTeX. Inoltre, diversi package che uso non sono ancora disponibili per ConTeXt.

      Mica vero:
      http://www.boekplan.com

    • #50354
      Up
      0
      Down
      ::

      Mica vero:
      http://www.boekplan.com

      Grazie per quel riferimento. Intendevo che le case editrici per cui io personalmente lavoro, se sono “illuminate” abbastanza da accettare un impaginato non in InDesign o Quark, accettano comunque solo codice LaTeX/XeLaTex. Spero un giorno di poter lavorare per editori in sintonia con ConTeXt.

      Per adesso, quel problema del dizionario mi assilla. Per caso avrebbe dei suggerimenti, da implementare in LaTeX?

      Grazie di nuovo

    • #50355
      Up
      0
      Down
      ::

      Mica vero:
      http://www.boekplan.com

      Per adesso, quel problema del dizionario mi assilla. Per caso avrebbe dei suggerimenti, da implementare in LaTeX?

      Grazie di nuovo

      No perché … uso ConTeXt 😀

      Ma scommetto che entro le 20:00 avrà almeno una risposta corretta.

      CMQ, per i libri non punterei tanto su editori che conoscono LaTeX, quanto su quelli che accettano il pdf. LaTeX richiede sempre una certa dose di programmazione che un editore non necessariamente ritiene di sua competenza — costa tempo quindi denaro.
      Un autore (pdf)LaTeX con un certo “allenamento” è in grado di produrre il pdf finito senza alcun successivo intervento di editing.

      Indesign & Quark sono diversi, la programmazione richiesta è minima.

    • #50356
      Up
      0
      Down
      ::

      Vorrei sottoporre un problema che non riesco proprio a risolvere.

      Benvenuto! E grazie per il problema. 🙂

      Ma scommetto che entro le 20:00 avrà almeno una risposta corretta.

      Difficile, entro le 20. 🙂

      Il problema del numero di pagina è facilmente risolvibile con uno stile apposito per makeindex. Poi basta ridefinire correttamente \item e \subitem.

      `\index{Illusioni perdute}
      \index{Illusioni perdute!Albertine|xx}
      \index{Illusioni perdute!Madame de Bargeton|xx}
      \index{Massimilla Doni|xx}
      \index{Massimilla Doni!Albertine|xx}`
      Quando appare un romanzo lo indicizzi; poi indicizzi ogni personaggio quando trovi a parlarne nella descrizione del romanzo. Oppure te li annoti in un file a parte senza preoccuparti dell’ordine alfabetico o di romanzo.

      Occorre un pacchetto che gestisca più di un indice, per esempio imakeidx, se hai bisogno anche di un indice analitico propriamente detto.

      Puoi fare un esempio, non troppo prolisso, di una situazione reale? Probabilmente si riesce a trovare un insieme di macro che possano alleviare il problema di come inserire i dati. Ti domanderai a che serve |xx alla fine. Be’, è il trucco che permette di eliminare i numeri di pagina.

      Ciao
      Enrico

    • #50357
      Up
      0
      Down
      ::


      Grazie Sig. Luigi e grazie Sig. Enrico!

      Puoi fare un esempio, non troppo prolisso, di una situazione reale? Probabilmente si riesce a trovare un insieme di macro che possano alleviare il problema di come inserire i dati. Ti domanderai a che serve |xx alla fine. Be’, è il trucco che permette di eliminare i numeri di pagina.

      Il codice che segue proviene dal documento reale che sto preparando, con i suggerimenti da lei fatti (lasciando perdere la formattazione dei singoli lemmi, qui per semplicità li ho messi in maiuscoletto). Adesso che me lo ha detto, userò imakeidx per gestire due indici, uno generale, e uno dei titoli. Siccome l’opera è un dizionario dei nomi (della Commedia Umana), non penso ci dovrebbe essere bisogno di un indice delle persone.

      Ho inserito i suggerimenti da lei fatti, sostituendo per adesso allo stile “|xx” di cui parlava, il codice “|texit”, giusto per avere un’idea.

      Eccolo:

      `
      \documentclass{book}
      \usepackage{imakeidx}
      \makeindex[title=Repertorio delle opere con i personaggi che vi compaiono,columns=1]
      \begin{document}

      \chapter{Dizionario dei personaggi della Commedia Umana}
      [\ldots]
      \textsc{Albertine}, cameriera di Madame de Bargeton, dal 1821 al 1824.
      [Illusioni perdute.\index{Illusioni perdute}\index{Illusioni perdute!Albertine|textit} Massimilla Doni.\index{Massimilla Doni}\index{Massimilla Doni!Albertine|textit} Beatrix.\index{Beatrix}\index{Beatrix!Albertine|textit}]

      \textsc{Althor} (Jacob), banchiere di Amburgo. Apre una filiale a Havre nel 1815. Ha un figlio che, nel 1829, M. e Mme. Mignon desiderano come genero.
      [Modeste Mignon.\index{Modeste Mignon}\index{Modeste Mignon!Althor|textit}]

      \textsc{Amaury} (Madame), proprietaria, nel 1829, di un padiglione a Sauvic, vicino a Ingouville, che Canalis affittò quando andò a Havre per incontrare Mlle. Mignon
      [Modeste Mignon.\index{Modeste Mignon}\index{Modeste Mignon!Amaury|textit}]

      \printindex
      \end{document}
      `

      Il risultato di cui avrei bisogno partendo dai tre lemmi del codice, nell’indice dei nomi sarebbe:

      `
      Repertorio delle opere con i personaggi che vi compaiono

      Beatrix
      Albertine

      Illusioni perdute
      Albertine

      Massimilla Doni
      Albertine

      Modeste Mignon
      Althor
      Amaury
      `

      Un secondo problema sarebbe anche l’inserire tutti quei codici per gli indici (occhio e croce, alcune migliaia!)

      Come lei ha detto, sarebbe splendido avere una macro che allievi il problema di inserire i dati.

      Pensavo di usare le RegEx per iniettare i codici dell’indice, ma il riuscire ad estrarre il nome del personaggio, e quello dei titoli connessi, è al di fuori della mia portata.

      Vi molto grato per l’aiuto, ed anche per l’opportunità di imparare di più su questo linguaggio tipografico superlativo.

    • #50358
      Up
      0
      Down
      ::

      Grazie Sig. Luigi e grazie Sig. Enrico!

      Puoi fare un esempio, non troppo prolisso, di una situazione reale? Probabilmente si riesce a trovare un insieme di macro che possano alleviare il problema di come inserire i dati. Ti domanderai a che serve |xx alla fine. Be’, è il trucco che permette di eliminare i numeri di pagina.

      Il codice che segue proviene dal documento reale che sto preparando, con i suggerimenti da lei fatti (lasciando perdere la formattazione dei singoli lemmi, qui per semplicità li ho messi in maiuscoletto). Adesso che me lo ha detto, userò imakeidx per gestire due indici, uno generale, e uno dei titoli. Siccome l’opera è un dizionario dei nomi (della Commedia Umana), non penso ci dovrebbe essere bisogno di un indice delle persone.

      Ho inserito i suggerimenti da lei fatti, sostituendo per adesso allo stile “|xx” di cui parlava, il codice “|texit”, giusto per avere un’idea.

      Eccolo:

      `
      \documentclass{book}
      \usepackage{imakeidx}
      \makeindex[title=Repertorio delle opere con i personaggi che vi compaiono,columns=1]
      \begin{document}

      \chapter{Dizionario dei personaggi della Commedia Umana}
      [\ldots]
      \textsc{Albertine}, cameriera di Madame de Bargeton, dal 1821 al 1824.
      [Illusioni perdute.\index{Illusioni perdute}\index{Illusioni perdute!Albertine|textit} Massimilla Doni.\index{Massimilla Doni}\index{Massimilla Doni!Albertine|textit} Beatrix.\index{Beatrix}\index{Beatrix!Albertine|textit}]

      \textsc{Althor} (Jacob), banchiere di Amburgo. Apre una filiale a Havre nel 1815. Ha un figlio che, nel 1829, M. e Mme. Mignon desiderano come genero.
      [Modeste Mignon.\index{Modeste Mignon}\index{Modeste Mignon!Althor|textit}]

      \textsc{Amaury} (Madame), proprietaria, nel 1829, di un padiglione a Sauvic, vicino a Ingouville, che Canalis affittò quando andò a Havre per incontrare Mlle. Mignon
      [Modeste Mignon.\index{Modeste Mignon}\index{Modeste Mignon!Amaury|textit}]

      \printindex
      \end{document}
      `

      Il risultato di cui avrei bisogno partendo dai tre lemmi del codice, nell’indice dei nomi sarebbe:

      `
      Repertorio delle opere con i personaggi che vi compaiono

      Beatrix
      Albertine

      Illusioni perdute
      Albertine

      Massimilla Doni
      Albertine

      Modeste Mignon
      Althor
      Amaury
      `

      Un secondo problema sarebbe anche l’inserire tutti quei codici per gli indici (occhio e croce, alcune migliaia!)

      Come lei ha detto, sarebbe splendido avere una macro che allievi il problema di inserire i dati.

      Pensavo di usare le RegEx per iniettare i codici dell’indice, ma il riuscire ad estrarre il nome del personaggio, e quello dei titoli connessi, è al di fuori della mia portata.

      Vi molto grato per l’aiuto, ed anche per l’opportunità di imparare di più su questo linguaggio tipografico superlativo.

      In questo forum è usanza darsi del tu: fra cultori di TeX si è tutti amici. 🙂

      Prova a vedere se questo fa per te
      `\documentclass[a4paper]{book}
      \usepackage[T1]{fontenc}
      \usepackage[latin1]{inputenc}
      \usepackage[italian]{babel}

      \usepackage{imakeidx}
      \makeindex[name=opere,title=Repertorio delle opere con i personaggi che vi
      compaiono,columns=1,options=-s balzac]
      \indexsetup{headers={\shortindexname}{\shortindexname}}
      \newcommand{\shortindexname}{\indexname}
      \newcommand{\ignore}[1]{}

      \makeatletter
      \let\@indexspace\indexspace
      \def\indexspace{\let\indexspace\@indexspace}
      \def\@preserve#1{\unexpanded\expandafter{\detokenize{#1}}}
      \newcommand{\person}[1]{%
      \xdef\@person{\@preserve{#1}}%
      \textsc{#1}}
      \newcommand{\book}[1]{%
      #1.%
      \edef\temp{\noexpand\index[opere]{\@preserve{#1}|ignore}}\temp
      \edef\temp{\noexpand\index[opere]{\@preserve{#1}!\@person|ignore}}%
      \temp}
      \makeatother

      \frenchspacing
      \begin{document}

      \chapter{Dizionario dei personaggi della Commedia Umana}
      [\ldots]

      \person{Albertine}, cameriera di Madame de Bargeton, dal 1821 al 1824.
      [\book{Illusioni perdute}
      \book{Massimilla Doni}
      \book{Beatrix}]

      \person{Althor} (Jacob), banchiere di Amburgo. Apre una filiale a Havre nel 1815. Ha un
      figlio che, nel 1829, M. e Mme. Mignon desiderano come genero.
      [\book{Modeste Mignon}]

      \person{Amaury} (Madame), proprietaria, nel 1829, di un padiglione a Sauvic, vicino a
      Ingouville, che Canalis affittò quando andò a Havre per incontrare Mlle. Mignon
      [\book{Modeste Mignon}]

      \renewcommand{\shortindexname}{Repertorio delle opere}
      \printindex[opere]
      \end{document}`
      Se la struttura del tuo dizionario è sempre la stessa, dovrebbe funzionare molto bene. L’idea è che teniamo a mente il personaggio e poi specifichiamo i libri in cui compare. Siccome i libri vanno comunque scritti, uso una macro per fare sia il lavoro di composizione del testo sia il lavoro di indicizzazione.

      Occorre nella cartella di lavoro anche un file che va chiamato “balzac.ist”:
      `group_skip “”
      item_0 “\n\n\\indexspace\n”
      delim_0 “”
      delim_1 “”`
      Sono quasi le 23, scusa per il ritardo. 🙂

      Ciao
      Enrico

      Nota: modificato alle 23:30 del 23/9
      Nota: modificato alle 13:30 del 24/9

    • #50359
      Up
      0
      Down
      ::

      In questo forum è usanza darsi del tu: fra cultori di TeX si è tutti amici. 🙂

      Grazie di cuore!

      Se la struttura del tuo dizionario è sempre la stessa, dovrebbe funzionare molto bene. L’idea è che teniamo a mente il personaggio e poi specifichiamo i libri in cui compare. Siccome i libri vanno comunque scritti, uso una macro per fare sia il lavoro di composizione del testo sia il lavoro di indicizzazione.

      Occorre nella cartella di lavoro anche un file che va chiamato “balzac.ist”:
      `group_skip “”
      item_0 “\n\n\\indexspace\n”
      delim_0 “”
      delim_1 “”`
      Sono quasi le 23, scusa per il ritardo. 🙂

      Grazie infinite per il codice, e la spiegazione.

      Non hai idea del senso di meraviglia che mi ha dato il tuo uso di codice TeX dentro LaTeX. Come se avessi di fronte Gandalf…

      Ho provato ad eseguirlo, e ho incontrato due intoppi. Il primo era un problema di gestione di caratteri accentati, probabilmente dipendente dal mio sistema: uso TeX Live 2010 (su OS X 10.6).

      L’ho risolto usando XeLaTeX (anche se dopo aver capito la tua soluzione, vorrei scoprire come mai avevo quel problema.)

      Il secondo è che il codice, così modificato:
      `

      %!TEX TS-program = xelatex
      %!TEX encoding = UTF-8 Unicode

      \documentclass[a4paper]{book}

      \usepackage{fontspec}
      \usepackage{xunicode}
      \usepackage{xltxtra}

      \usepackage{polyglossia}
      \setdefaultlanguage{italian}

      \usepackage{imakeidx}
      \makeindex[name=opere,title=Repertorio delle opere con i personaggi che vi
      compaiono,columns=1,options=-s balzac]
      \indexsetup{headers={\shortindexname}{\shortindexname}}
      \newcommand{\shortindexname}{\indexname}
      \newcommand{\ignore}[1]{}

      \makeatletter
      \let\@indexspace\indexspace
      \def\indexspace{\let\indexspace\@indexspace}
      \def\@preserve#1{\unexpanded\expandafter{\detokenize{#1}}}
      \newcommand{\person}[1]{%
      \xdef\@person{\@preserve{#1}}%
      \textsc{#1}}
      \newcommand{\book}[1]{%
      #1.%
      \edef\temp{\noexpand\index[opere]{\@preserve{#1}|ignore}}\temp
      \edef\temp{\noexpand\index[opere]{\@preserve{#1}!\@person|ignore}}%
      \temp}
      \makeatother

      \frenchspacing

      \begin{document}

      \chapter{Dizionario dei personaggi della Commedia Umana}

      [\ldots]

      \person{Albertine}, cameriera di Madame de Bargeton, dal 1821 al 1824.
      [\book{Illusioni perdute}
      \book{Massimilla Doni}
      \book{Beatrix}]

      \person{Althor} (Jacob), banchiere di Amburgo. Apre una filiale a Havre nel 1815. Ha un
      figlio che, nel 1829, M. e Mme. Mignon desiderano come genero.
      [\book{Modeste Mignon}]

      \person{Amaury} (Madame), proprietaria, nel 1829, di un padiglione a Sauvic, vicino a Ingouville, che Canalis affittò quando andò a Havre per incontrare Mlle. Mignon
      [\book{Modeste Mignon}]

      \renewcommand{\shortindexname}{Repertorio delle opere}

      \printindex

      \end{document}

      `

      mi dà questo errore:

      `
      ./balzac.tex:57: Package imakeidx Error: Misplaced \printindex.
      `

      Non riesco a capire cosa ci sia di sbagliato.

      Digitando “r” alla consolle ottengo la pagina con il testo, ma niente indice.

      Ho creato il file bazac.ist con il contenuto indicato, che risiede nella stessa directory del codice sopra (che ho chiamato balzac.tex).

      Guido Sette

      PS: Mi scuso per averti tenuto in piedi così tardi! Non so come ringraziarti. Spero un giorno di poter contraccambiare in qualche modo.

    • #50360
      Up
      0
      Down
      ::

      In questo forum è usanza darsi del tu: fra cultori di TeX si è tutti amici. 🙂

      Grazie di cuore!

      Se la struttura del tuo dizionario è sempre la stessa, dovrebbe funzionare molto bene. L’idea è che teniamo a mente il personaggio e poi specifichiamo i libri in cui compare. Siccome i libri vanno comunque scritti, uso una macro per fare sia il lavoro di composizione del testo sia il lavoro di indicizzazione.

      Occorre nella cartella di lavoro anche un file che va chiamato “balzac.ist”:
      `group_skip “”
      item_0 “\n\n\\indexspace\n”
      delim_0 “”
      delim_1 “”`
      Sono quasi le 23, scusa per il ritardo. 🙂

      Grazie infinite per il codice, e la spiegazione.

      Non hai idea del senso di meraviglia che mi ha dato il tuo uso di codice TeX dentro LaTeX. Come se avessi di fronte Gandalf…

      Ho provato ad eseguirlo, e ho incontrato due intoppi. Il primo era un problema di gestione di caratteri accentati, probabilmente dipendente dal mio sistema: uso TeX Live 2010 (su OS X 10.6).

      L’ho risolto usando XeLaTeX (anche se dopo aver capito la tua soluzione, vorrei scoprire come mai avevo quel problema.)

      Il secondo è che il codice, così modificato:
      `

      %!TEX TS-program = xelatex
      %!TEX encoding = UTF-8 Unicode

      \documentclass[a4paper]{book}

      \usepackage{fontspec}
      \usepackage{xunicode}
      \usepackage{xltxtra}

      \usepackage{polyglossia}
      \setdefaultlanguage{italian}

      \usepackage{imakeidx}
      \makeindex[name=opere,title=Repertorio delle opere con i personaggi che vi
      compaiono,columns=1,options=-s balzac]
      \indexsetup{headers={\shortindexname}{\shortindexname}}
      \newcommand{\shortindexname}{\indexname}
      \newcommand{\ignore}[1]{}

      \makeatletter
      \let\@indexspace\indexspace
      \def\indexspace{\let\indexspace\@indexspace}
      \def\@preserve#1{\unexpanded\expandafter{\detokenize{#1}}}
      \newcommand{\person}[1]{%
      \xdef\@person{\@preserve{#1}}%
      \textsc{#1}}
      \newcommand{\book}[1]{%
      #1.%
      \edef\temp{\noexpand\index[opere]{\@preserve{#1}|ignore}}\temp
      \edef\temp{\noexpand\index[opere]{\@preserve{#1}!\@person|ignore}}%
      \temp}
      \makeatother

      \frenchspacing

      \begin{document}

      \chapter{Dizionario dei personaggi della Commedia Umana}

      [\ldots]

      \person{Albertine}, cameriera di Madame de Bargeton, dal 1821 al 1824.
      [\book{Illusioni perdute}
      \book{Massimilla Doni}
      \book{Beatrix}]

      \person{Althor} (Jacob), banchiere di Amburgo. Apre una filiale a Havre nel 1815. Ha un
      figlio che, nel 1829, M. e Mme. Mignon desiderano come genero.
      [\book{Modeste Mignon}]

      \person{Amaury} (Madame), proprietaria, nel 1829, di un padiglione a Sauvic, vicino a Ingouville, che Canalis affittò quando andò a Havre per incontrare Mlle. Mignon
      [\book{Modeste Mignon}]

      \renewcommand{\shortindexname}{Repertorio delle opere}

      \printindex

      \end{document}

      `

      mi dà questo errore:

      `
      ./balzac.tex:57: Package imakeidx Error: Misplaced \printindex.
      `

      Non riesco a capire cosa ci sia di sbagliato.

      Digitando “r” alla consolle ottengo la pagina con il testo, ma niente indice.

      Ho creato il file bazac.ist con il contenuto indicato, che risiede nella stessa directory del codice sopra (che ho chiamato balzac.tex).

      Guido Sette

      PS: Mi scuso per averti tenuto in piedi così tardi! Non so come ringraziarti. Spero un giorno di poter contraccambiare in qualche modo.

      Mancava una modifica alla modifica! Siccome ho pensato che fosse meglio creare fin da subito un indice “secondario”, cioè con un nome proprio, ho cambiato il codice in modo che desse \index[opere]{…}, ma ho scordato di cambiare \printindex in \printindex[opere].

      La questione delle codifiche è una di quelle che non fanno dormire! Più semplicemente, ricordati che TeXShop è, di default, con UTF-8 e quindi, quando ci incolli sopra, usa quella codifica. Nel testo originale sarebbe bastato cambiare \usepackage[latin1]{inputenc} in \usepackage[utf8]{inputenc}

      Ma per la tua impresa è probabile che XeLaTeX sia nettamente più indicato.

      Correggo anche nel messaggio precedente. Ah, non preoccuparti: le 23:30 per me sono quasi sera. 🙂 Era solo un riferimento alla scommessa di Luigi.

      Ciao
      Enrico

    • #50361
      Up
      0
      Down
      ::

      Mancava una modifica alla modifica! Siccome ho pensato che fosse meglio creare fin da subito un indice “secondario”, cioè con un nome proprio, ho cambiato il codice in modo che desse \index[opere]{…}, ma ho scordato di cambiare \printindex in \printindex[opere].

      La questione delle codifiche è una di quelle che non fanno dormire! Più semplicemente, ricordati che TeXShop è, di default, con UTF-8 e quindi, quando ci incolli sopra, usa quella codifica. Nel testo originale sarebbe bastato cambiare \usepackage[latin1]{inputenc} in \usepackage[utf8]{inputenc}

      Ma per la tua impresa è probabile che XeLaTeX sia nettamente più indicato.

      Correggo anche nel messaggio precedente. Ah, non preoccuparti: le 23:30 per me sono quasi sera. 🙂 Era solo un riferimento alla scommessa di Luigi.

      Adesso il codice produce esattamente l’elenco che serviva. Sono senza parole, per quella macro che hai scritto, e anche per il tempo che ti ci è voluto (è vero che l’hai scritta come un fulmine, ma in fondo è pur sempre il tuo tempo personale che hai usato!), e per la tua gentilezza. Altro che Gandalf! 🙂

      Da buon studente cercherò adesso di capire come funziona la macro, senza subissarti di domande (anche se una cosa so già che non la capirò, come mai XeLaTeX generi l’indice a pagina 3, quando, a quanto capisco, dovrebbe essere a pagina 2. Andrò a leggere il manuale di imakeidx, probabilmente è un default in quel pacchetto, di generare la prima pagina dell’indice su pagina dispari.)

      Ero molto ispirato da TeX, adesso lo sono ancora di più.

      Grazie di cuore, per l’aiuto e per l’ispirazione.

      Guido Sette

    • #50362
      Up
      0
      Down
      ::

      Mancava una modifica alla modifica! Siccome ho pensato che fosse meglio creare fin da subito un indice “secondario”, cioè con un nome proprio, ho cambiato il codice in modo che desse \index[opere]{…}, ma ho scordato di cambiare \printindex in \printindex[opere].

      La questione delle codifiche è una di quelle che non fanno dormire! Più semplicemente, ricordati che TeXShop è, di default, con UTF-8 e quindi, quando ci incolli sopra, usa quella codifica. Nel testo originale sarebbe bastato cambiare \usepackage[latin1]{inputenc} in \usepackage[utf8]{inputenc}

      Ma per la tua impresa è probabile che XeLaTeX sia nettamente più indicato.

      Correggo anche nel messaggio precedente. Ah, non preoccuparti: le 23:30 per me sono quasi sera. 🙂 Era solo un riferimento alla scommessa di Luigi.

      Adesso il codice produce esattamente l’elenco che serviva. Sono senza parole, per quella macro che hai scritto, e anche per il tempo che ti ci è voluto (è vero che l’hai scritta come un fulmine, ma in fondo è pur sempre il tuo tempo personale che hai usato!), e per la tua gentilezza. Altro che Gandalf! 🙂

      Da buon studente cercherò adesso di capire come funziona la macro, senza subissarti di domande (anche se una cosa so già che non la capirò, come mai XeLaTeX generi l’indice a pagina 3, quando, a quanto capisco, dovrebbe essere a pagina 2. Andrò a leggere il manuale di imakeidx, probabilmente è un default in quel pacchetto, di generare la prima pagina dell’indice su pagina dispari.)

      Ero molto ispirato da TeX, adesso lo sono ancora di più.

      Grazie di cuore, per l’aiuto e per l’ispirazione.

      È la classe book che decide di cominciare tutti i capitoli su pagina dispari. Se non desideri questo comportamento, ma non saprei giustificare questa scelta, da’ l’opzione “openany” alla classe.

      Le macro non sono molto intuitive, temo, e richiedono una conoscenza TeXnica abbastanza profonda. Ma l’idea è semplice, tutto sommato.

      La descrizione del personaggio comincia con il suo nome e in fondo aggiungi i titoli dei libri in cui compare. Perciò la macro \person fa due cose: stampa il nome del personaggio (in maiuscoletto) dopo aver messo in memoria nella macro \@person il nome stesso. La macro ausiliaria \@preserve, che ho definito prima, serve a evitare problemi con le lettere accentate.

      Quando incontriamo il titolo di un libro, dato come argomento di \book, viene intanto stampato quello, seguito dal punto. Poi vengono generate le stringhe che serviranno per l’indice. Questo è il punto difficile: dato “Illusioni perdute” come titolo relativo al personaggio “Albertine”, occorre generare
      `\index[opere]{Illusioni perdute|ignore}\index[opere]{Illusioni perdute!Albertine|ignore}`
      Questo è compito di \edef, che esegue definizioni con espansione; l’unico token da non espandere è proprio \index. Generata la lista di token opportuna come testo di definizione di \temp, eseguo \temp (che è come un foglietto su cui si scarabocchia per tenere in mente qualcosa).

      Con \index[opere]{Illusioni perdute|ignore} si avrà nel file .idx qualcosa come
      `\item Illusioni perdute\ignore{3}`
      e siccome la definizione di \ignore è di non fare niente con l’argomento, abbiamo ciò che ci serve.

      Il contenuto di balzac.ist è facile da capire.

      1) “group_skip” è ciò che makeindex inserisce tra una lettera dell’alfabeto e la successiva. A noi non serve niente, quindi lo azzeriamo.

      2) “item_0” è ciò che viene messo da makeindex prima di una voce principale; vogliamo che sia spaziata da quella che precede, quindi ci metto “\n\n\\indexspace\n”, cioè due ritorni, \indexspace e a capo.

      3) “delim_0” è quello che makeindex mette tra una voce principale e il numero di pagina, di solito è “virgola + spazio”. Analogamente per “delim_1” che riguarda le voci secondarie.

      Un ultimo trucco: con queste definizioni, tra \begin{index} e la prima voce viene \indexspace. Uffa! 👿 Allora tengo a mente la definizione di \indexspace nel comando \@@indexspace e poi ridefinisco \indexspace in modo che definisca \indexspace come \@@indexspace! Niente meno. 😀

      Che succede, in parole povere? La prima occorrenza di \indexspace nell’indice analitico ha come effetto di eseguire \let\indexspace\@@indexspace; quindi, dalla seconda volta in poi, \indexspace agisce secondo il significato originale. 🙂

      Ciao
      Enrico

    • #50363
      Up
      0
      Down
      ::


      Grazie infinite per la spiegazione.

      Se me lo permetti, vorrei esprimere la mia gratitudine nel colophon dei libri che mi permetteranno di comporre con *TeX.

      Il nome, che ho visto in altri scritti qui sul Forum, è Enrico Gregorio, vero? Da quello che ho capito, il volume dovrebbe uscire agli inizi dell’anno prossimo, prima nel testo inglese, poi in quello italiano (se si metteranno d’accordo con il traduttore per finire la traduzione). Se andrà tutto bene, ti manderò una copia.

      Grazie di nuovo, per tutto!

      Guido Sette

    • #50364
      Up
      0
      Down
      ::

      Grazie infinite per la spiegazione.

      Se me lo permetti, vorrei esprimere la mia gratitudine nel colophon dei libri che mi permetteranno di comporre con *TeX.

      Il nome, che ho visto in altri scritti qui sul Forum, è Enrico Gregorio, vero? Da quello che ho capito, il volume dovrebbe uscire agli inizi dell’anno prossimo, prima nel testo inglese, poi in quello italiano (se si metteranno d’accordo con il traduttore per finire la traduzione). Se andrà tutto bene, ti manderò una copia.

      Con TeX si guadagna! 😀 Grazie mille dell’offerta. Non conosco affatto Balzac, se devo dire la verità. 🙁 Ma può essere una buona occasione per cominciare a frequentarlo.

      Il forum è sempre a disposizione per risolvere i problemi che ti si porranno.

      Ciao
      Enrico

    • #50365
      Up
      0
      Down
      ::


      Non mancherò di approfittare, sperando che un giorno potrò offrire qualcosa anch’io ai frequentatori del forum.

      Grazie ancora.
      Guido Sette

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

Go to top