Re: Caso speciale di note a fine libro

#94885
franen
Partecipante
    Up
    0
    Down
    ::


    Non so se ho capito bene come è tua intenzione scrivere il codice del libro in questione, spero quantomeno di essermi avvicinato.
    Ho fatto la supposizione che tutte le etichette abbiano la struttura CBnnn, se così non fosse fammi sapere…
    Ho supposto che nel caso di gruppi di etichette (CB 4-7) ci si premuri manualmente che tutti i testi (4,5,6,7) siano citati. Altrimenti occorre pensare qualche riga di codice in più.

    le spiegazioni sono nel codice (che se qualcuno volesse correggere sarei felice 🙂 ).
    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).
    \newcommand{\chapterlabel}[2]{%
    \csdef{#1}{#2}}

    % usp il linguaggio di programmazinoe LaTeX3, o almeno ci provo, mi scuso se non hai dimestichezza conquesto tipo di codice, ma non saprei fare altrimenti.

    \ExplSyntaxOn

    \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 .
    %voelndo 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

    \chapter{}
    \chapterlabel{tavolarotonda}{CB2}
    \chapterlabel{reArtu}{CB52}
    \chapterlabel{remo}{CB3}
    \chapterlabel{tavolarotonde}{CB4}
    \chapterlabel{reArte}{CB8}
    \chapterlabel{reme}{CB6}
    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.
    Morbi et hendrerit velit, sed volutpat purus. Lorem ipsum dolor sit amet,
    consectetur adipiscing elit. Duis at pharetra velit. Sed aliquam commodo tristique. Donec sit amet vulputate justo. Maecenas nulla enim, fermentum vitae dapibus at, rutrum vitae libero.
    Proin faucibus nulla eros, ac tincidunt diam rutrum vel. Aenean eu erat at justo malesuada consequat sed vel erat. Vivamus gravida est quis sem semper, sed venenatis sem euismod.
    Etiam quis orci quam. Ut a massa lacus.

    \chapter{}

    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.
    Morbi et hendrerit velit, sed volutpat purus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis at pharetra velit. Sed aliquam commodo tristique. Donec sit amet vulputate justo.
    Maecenas nulla enim, fermentum vitae dapibus at, rutrum vitae libero. Proin faucibus nulla eros, ac tincidunt diam rutrum vel. Aenean eu erat at justo malesuada consequat sed vel erat.
    Vivamus gravida est quis sem semper, sed venenatis sem euismod. Etiam quis orci quam. Ut a massa lacus.
    \newpage

    %\PrintNoteLabel{\tavolarotonda,\reartu}
    \PrintNoteLabel{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.

    \end{document}`

    Go to top