Ho approfittato di questo topic per rispolverare un po’ di LaTeX3. Propongo una soluzione che funziona (per quanto ho potuto sperimentare). Necessita di due compilazioni perché usa hyperref e non il pacchetto bookmark per creare i segnalibri. Spero che le spiegazioni nel codice siano abbastanza chiare.
Se qualcuno volesse dare consigli sulla struttura del codice, sarei felice.
Riporto file .te x e .ist.
Fran
.tex:`\documentclass{book}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[italian]{babel}
\usepackage{xparse}
\usepackage{expl3}
\ExplSyntaxOn
% creo una \seq avendo cura di accertarmi che sia vuota.
%In questa sequenza inserirò tutti i segnalibri
% man mano che verranno creati
\NewDocumentCommand{\createlists}{}{
\seq_clear_new:N \g_indexbkm_seq
% creo una \tl che conterrà il testo dei segnalibri
\tl_gclear_new:N \g_bkmtext_tl
% e una \tl che conterrà il testo dell'ultimo segnalibro creato
\tl_gclear_new:N \g_lastused_bkm_tl
}
% creo la funzione che inserisce i segnalibri nell'indice
\cs_new:Npn \create_bkm:n #1 { % l'unico argomento è l'argomento di \indexgroup (vedere il file .ist)
% estraggo da \lista_bkm il testo che il segnalibro deve mostrare,
% in funzione della lettera (cioè se ho la lettera B il segnalibro deve essere A-C).
% Inserisco questo testo nella tl \g_bkmtext_tl
\prop_get:NnN \lista_bkm {#1} \g_bkmtext_tl
% poi vedo qual è l'ultimo elemento di \g_indexbkm_seq,
% cioè l'ultimo segnalibro inserito e lo associo a \g_lastused_bkm_tl
\seq_get_right:NN \g_indexbkm_seq \g_lastused_bkm_tl
% se \g_lastused_bkm_tl e \g_bkmtext_tl sono uguali vuol dire
% che ho già inserito il segnalibro, altrimenti inserisco il segnalibro con \pdfbookmark
\tl_if_eq:NNTF \g_bkmtext_tl \g_lastused_bkm_tl {\scan_stop:} {
\pdfbookmark[1]{\tl_use:N \g_bkmtext_tl}{name-\g_bkmtext_tl}}
% inserisco il segnalibro appena creato nella \g_indexbkm_seq
\seq_put_right:Nx \g_indexbkm_seq { \g_bkmtext_tl }
}
% qui sotto la prop list con lettere e segnalibri associati.
\prop_new:N \lista_bkm
\prop_put:Nnn \lista_bkm {Numbers}{Numbers}
\prop_put:Nnn \lista_bkm {Numeri}{Numeri}
\prop_put:Nnn \lista_bkm {Symbols}{Symbols}
\prop_put:Nnn \lista_bkm {Simboli}{Simboli}
%%%%% la gestione di queste prime 4 voci è da ottimizzare%%%%
\prop_put:Nnn \lista_bkm {A}{A-C}
\prop_put:Nnn \lista_bkm {B}{A-C}
\prop_put:Nnn \lista_bkm {C}{A-C}
\prop_put:Nnn \lista_bkm {D}{D-F}
\prop_put:Nnn \lista_bkm {E}{D-F}
\prop_put:Nnn \lista_bkm {F}{D-F}
\prop_put:Nnn \lista_bkm {G}{G-I}
\prop_put:Nnn \lista_bkm {H}{G-I}
\prop_put:Nnn \lista_bkm {I}{G-I}
\prop_put:Nnn \lista_bkm {J}{J-L}
\prop_put:Nnn \lista_bkm {K}{J-L}
\prop_put:Nnn \lista_bkm {L}{J-L}
\prop_put:Nnn \lista_bkm {M}{M-O}
\prop_put:Nnn \lista_bkm {N}{M-O}
\prop_put:Nnn \lista_bkm {O}{M-O}
\prop_put:Nnn \lista_bkm {P}{P-R}
\prop_put:Nnn \lista_bkm {Q}{P-R}
\prop_put:Nnn \lista_bkm {R}{P-R}
\prop_put:Nnn \lista_bkm {S}{S-U}
\prop_put:Nnn \lista_bkm {T}{S-U}
\prop_put:Nnn \lista_bkm {U}{S-U}
\prop_put:Nnn \lista_bkm {V}{V-X}
\prop_put:Nnn \lista_bkm {W}{V-X}
\prop_put:Nnn \lista_bkm {X}{V-X}
\prop_put:Nnn \lista_bkm {Y}{Y-Z}
\prop_put:Nnn \lista_bkm {Z}{Y-Z}
% la funzione richiamata in stile.ist
\NewDocumentCommand{\insertmybookmark}{m}{%
\create_bkm:n {#1}
}
\ExplSyntaxOff
\usepackage{imakeidx}
\makeindex[options= -s stile.ist]
\usepackage{hyperref}
\begin{document}
Ciao
\index{Albatros}
\index{Burgundi}
\index{Èremo}
\index{Saltimbanco}
\index{Seppia}
\index{Toro}
\printindex
\end{document}` stile.ist:`% stile.ist
preamble ”
\\begin{theindex}
\\createlists
\\providecommand*\\indexgroup[1]{\\indexspace
\\item \\textbf{#1}\\insertmybookmark{#1}\\nopagebreak}
”
postamble “\n\n\\end{theindex}\n”
group_skip ” %\n \\indexspace\n %\n”
headings_flag 1
heading_prefix ” %\n \\indexgroup{”
heading_suffix “}\n %\n”
numhead_positive “Numbers”;
numhead_negative “Numbers”;
symhead_positive “Symbols”;
symhead_negative “Symbols”;`Edit: tolto dal codice un messaggio di errore che mi serviva per il debug.