- Questo topic ha 15 risposte, 3 partecipanti ed è stato aggiornato l'ultima volta 15 anni, 11 mesi fa da
GuidoSette.
-
CreatoreTopic
-
23 Settembre 2010 alle 14:16 #50350::
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
-
CreatoreTopic
-
AutoreRisposte
-
-
23 Settembre 2010 alle 14:18 #50351::
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.
-
23 Settembre 2010 alle 14:38 #50352::
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.
-
23 Settembre 2010 alle 15:00 #50353::
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
-
23 Settembre 2010 alle 15:25 #50354::
Mica vero:
http://www.boekplan.comGrazie 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
-
23 Settembre 2010 alle 15:37 #50355::
Mica vero:
http://www.boekplan.comPer 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.
-
23 Settembre 2010 alle 15:58 #50356::
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
-
23 Settembre 2010 alle 17:07 #50357::
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 compaionoBeatrix
AlbertineIllusioni perdute
AlbertineMassimilla Doni
AlbertineModeste 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.
-
23 Settembre 2010 alle 21:06 #50358::
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 compaionoBeatrix
AlbertineIllusioni perdute
AlbertineMassimilla Doni
AlbertineModeste 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
EnricoNota: modificato alle 23:30 del 23/9
Nota: modificato alle 13:30 del 24/9
-
24 Settembre 2010 alle 11:29 #50359::
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.
-
24 Settembre 2010 alle 11:42 #50360::
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
-
24 Settembre 2010 alle 12:23 #50361::
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
-
24 Settembre 2010 alle 12:44 #50362::
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
-
24 Settembre 2010 alle 13:16 #50363::
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
-
24 Settembre 2010 alle 13:29 #50364::
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
-
24 Settembre 2010 alle 13:36 #50365
-
-
AutoreRisposte
- Devi essere connesso per rispondere a questo topic.