Dal momento che i numeri delle etichette sono consequenziali ho usato un altro approccio per la stampa delle etichette relative a una Parte: ho usato una \seq al posto di una \clist, in modo da poterne prelevare direttamente il primo e l’ultimo elemento, senza dover cercare il max e il min dei valori della clist (cosa necessaria se le etichette fossero in ordine sparso).
Ogni volta che si usa un comando [tt]\chapterlabel[/tt] si aggiunge l’etichetta CBnn alla \seq \g_guido_partlist_ETICHETTA-DELLA-PARTE _seq.
Viene creata una seq per ogni Parte.
Alla fine si stampano i riferimenti prendendo il primo e l’ultimo elemento di ogni \seq che interessa.
Francesco
`\documentclass[12pt]{book}
\usepackage{etoolbox,xparse,l3sort}
\title{Test}
% definisco un comando da usare all'interno del testo, magari appena dopo \chapter. Questo assegna a un'etichetta di facile memorizzazione (reArtu) l'etichetta che si vorrà usare nelle note (CB1, scritto senza spazi).
% uso il linguaggio di programmazinoe LaTeX3, o almeno ci provo, mi scuso se non hai dimestichezza con questo tipo di codice, ma non saprei fare altrimenti.
\ExplSyntaxOn
\tl_new:N \g_guido_current_part_name_tl
\NewDocumentCommand{\partlabel}{m m}
{
\csdef{#1}{#2}
\tl_set:Nn \g_guido_current_part_name_tl {#1}
\seq_new:c {g_guido_partlist_\tl_use:N \g_guido_current_part_name_tl _seq}
}
\NewDocumentCommand{\chapterlabel}{ m m}{
\csdef{#1}{#2}
\seq_gput_right:cn {g_guido_partlist_\tl_use:N \g_guido_current_part_name_tl _seq} {#2}
}
\tl_new:N \l_guido_first_part_tl
\tl_new:N \l_guido_last_part_tl
\NewDocumentCommand {\PrintNotePartLabel} {m}
{
\tl_set:Nn \l_tempa_tl {#1}
\seq_get_left:cN {g_guido_partlist_\tl_use:N \l_tempa_tl _seq} \l_guido_first_part_tl
\seq_get_right:cN {g_guido_partlist_\tl_use:N \l_tempa_tl _seq} \l_guido_last_part_tl
\tl_remove_all:Nn \l_guido_first_part_tl {CB}
\tl_remove_all:Nn \l_guido_last_part_tl {CB}
CB~ \tl_use:N \l_guido_first_part_tl — \tl_use:N \l_guido_last_part_tl .
}
\tl_new:N \g_guido_numbers_tl %token list per memorizzare la serie di numeri delle etichette
\fp_new:N \g_guido_numbers_max_value_fp % valore massimo delle etichette
\fp_new:N \g_guido_numbers_min_value_fp % valore minimo delle etichette
\clist_gclear_new:N \g_guido_labels_clist %clist in cui immagazzino le etichette compreso il CB
\clist_gclear_new:N \g_guido_labels_numbers_clist % clist in cui immagazzino solo i numeri delle etichette
\int_new:N \l_guido_list_population_int % intero che mi dice quanti elementi contiene una lista.
% Alla fine del documento uso il comando \PrintNoteLabels per stampare la scritta “CB nn'' o “CB xx-yy''. Vule come argomento una lista separata da virgole
%dei nomi assegnati ai libri (il reArtu di prima).
\NewDocumentCommand{\PrintNoteLabel}{m}{\guido_print_labels_cs:n {#1}}
% Il comando di cui sopra richiama un altro comando:
\cs_new_protected:Npn \guido_print_labels_cs:n #1
{
\clist_gclear:N \g_guido_labels_clist % pulisco \g_guido_labels_clist
\clist_gclear:N \g_guido_labels_numbers_clist %pulisco \g_guido_labels_numbers_clist
\clist_gset:Nn \g_guido_labels_clist {#1} %assegno a \g_guido_labels_clist l'argomento di \PrintNoteLabel
\clist_map_inline:Nn \g_guido_labels_clist {\guido_read_labels:n {##1}} % mappo la lista (eseguo un'operazione su ogni elemento della lista) eseguendo il comando
% \guido_read_labels:n. Questo crea una lista contenente solo numeri, cioè se prima avevo CB1,CB2 ora ho 1,2.
% Conto poi quanti elementi contiene la lista di soli numeri.
\int_set:Nn \l_guido_list_population_int {\clist_count:N \g_guido_labels_numbers_clist}
% se ho un solo elemento le cose sono semplici, e stampo l'etichetta
\int_compare:nNnTF {\l_guido_list_population_int}={1}
{CB~ \clist_use:Nnnn \g_guido_labels_numbers_clist {}{}{} . }
% se ci sono più elementi devo fare un po' di operazioni.
{
% valuto il valore massimo e il valore minimo
\tl_clear:N \g_guido_numbers_tl
\clist_map_inline:Nn \g_guido_labels_numbers_clist
{ \tl_gput_right:Nn \g_guido_numbers_tl {,##1} }
\tl_gremove_once:Nn \g_guido_numbers_tl {,}
\fp_set:Nn \g_guido_numbers_max_value_fp {\fp_eval:n { max(\tl_use:N \g_guido_numbers_tl) }}
\fp_set:Nn \g_guido_numbers_min_value_fp {\fp_eval:n { min(\tl_use:N \g_guido_numbers_tl) }}
% e li uso per stampare l'etichetta nel formato CB xx-yy
CB~ \fp_use:N \g_guido_numbers_min_value_fp — \fp_use:N \g_guido_numbers_max_value_fp .
% volendo potresti stampare tutti i valori tipo CB 4, 5, 6 e 7
%\clist_use:Nnnn \g_guido_labels_numbers_clist { ~e~ } { ,~ } { ,~e~ } .
}
}
% NB. Se le note si riferissero a un insieme di libri tipo CB 1-4, 8, 10-13 occorrerebbe modificare il codice! Fammi sapere
% la funzione richiamata prima, serve per togliere il CB dalle etichette e lasciare solo i numeri.
\cs_new_protected:Npn \guido_read_labels:n #1
{
\tl_set:Nx \l_tempa_tl {\use:c {#1}}
\tl_remove_once:Nn \l_tempa_tl {CB}
\clist_gput_right:NV \g_guido_labels_numbers_clist \l_tempa_tl
}
\ExplSyntaxOff
\begin{document}
\maketitle
\part{}
\partlabel{interviste}{CB1e}
\chapter{}
\chapterlabel{tavolarotonda}{CB1}
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent
consectetur nisi sit amet vulputate lacinia. Cras fermentum faucibus
fermentum. Phasellus vel egestas velit, et sollicitudin leo.
\chapter{}
\chapterlabel{reArtu}{CB2}
Morbi et
hendrerit velit, sed volutpat purus. Lorem ipsum dolor sit amet,
consectetur adipiscing elit. Duis at pharetra velit. Sed aliquam
commodo tristique.
\chapter {}
\chapterlabel{remo}{CB3}
Donec sit amet vulputate justo. Maecenas nulla
enim, fermentum vitae dapibus at, rutrum vitae libero. Proin faucibus
nulla eros, ac tincidunt diam rutrum vel.
\part{}
\partlabel{altreinterviste}{CB2e}
\chapter{}
\chapterlabel{tavolarotonde}{CB4}
Aenean eu erat at justo malesuada consequat sed vel erat.
\chapter {}
\chapterlabel{reArte}{CB5}
Vivamus gravida est quis sem semper, sed venenatis sem euismod.
\chapter{}
\chapterlabel{reme}{CB6}
Etiam quis orci quam. Ut a massa lacus.
\newpage
\PrintNoteLabel{remo,tavolarotonda,reArtu,remo} Layamon – Historia Regum Britanniae […]
\PrintNoteLabel{reme,reArte} Following is the text of an interview with Mr. Akira Inoue, Co-ordinator of Geoffrey of Monmouth Association.
\PrintNoteLabel{tavolarotonde} According to the Historia Brittonum, and the writings of Gildas.
\PrintNotePartLabel{interviste}
\end{document}`