Re: Composizione di dizionario: indice secondario

#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

Go to top