[99,9% RISOLTO] comando per indice analitico

  • Creatore
    Topic
  • #91893
    Up
    0
    Down
    ::


    Ciao a tutti,
    devo ancora decidere se modificare l’indice come vi andrò a descrivere oppure no. In ogni modo mi si è presentato il problema e colgo l’occasione sia per avere un’opinione vostra sulla cosa in sé sia su come, eventualmente, attuarla (e perché le mie soluzioni non funzionano…)

    Solita premessa, di interesse credo sia sufficiente dirvi che carico: scrbook+classicthesis+arsclassicanohyper (versione identica a quella di Lorenzo a cui ho eliminato la chiamata ad hyperref per inserirla esplicitamente io alla fine del mio preambolo)+imakeidx+bm (per i caratteri grassetti delle lettere greche matematiche) — [se serve la lista completa ve la mando]

    Il comando che ho definito è il seguente

    `\newcommand{\defin}[1]{\textbf{\texttt{#1}}\index{#1}} %definizioni indicizzate con testo formattato`

    che mi mette in risalto la voce principale di una definizione nel testo e la manda direttamente nell’indice così non faccio confusione o me ne dimentico.

    Esempio di utilizzo:

    `\begin{definizione}
    Diciamo che $\tau$ è una \defin{topologia} su $X$ se e solo se è una famiglia di sottoinsiemi chiusa per intersezioni finite, unioni arbitrarie e contenente $X$ stesso così come $\emptyset$.
    \end{definizione}`

    Dopodiché ho creato anche il comando

    `\newcommand{\definpost}[2][]{\textbf{\texttt{#2 #1}}\index{#2!#1}} %definizioni indicizzate con specifica e testo formattato
    `

    il quale inizialmente lo avevo pensato come miglioramento del precedente, per fare delle sottovoci automatiche nei casi in cui fosse utile e solo quelli…o altrimenti (senza opzioni) avrebbe dovuto funzionare come il precedente. Vedendo #1 come argomento opzionale (da cui “post” visto che solitamente la quadra si scrive prima della graffa nel codice ma nel testo viene dopo per il genere di definizioni che uso).

    Esempio di utilizzo

    `\begin{definizione}
    Diciamo \definpost[topologico]{spazio} una coppia $(X,\tau)$ in cui $X$ è un insieme e $\tau$ è una topologia su $X$.
    \end{definizione}

    \begin{definizione}
    Diciamo \definpost[metrico]{spazio} una coppia $(X,d)$ in cui $X$ è un insieme e $d$ è una metrica su $X$.
    \end{definizione}`

    Di fatto però non posso scrivere \definpost{topologia} perché mi inserisce lo spazio anche dopo la parola (visto che “opzionale” è solo #1 e non anche lo spazio tra #2 e #1 :-)).

    OK. Problemi:

    1) come faccio a definire un argomento opzionale inserendo delle “cose” nel comando solo se l’argomento opzionale c’è? Per esempio lo spazio nell’esempio precedente tra #2 e #1 che compare anche se #1 (opzionale) non c’è…senza dover scrivere tale “cosa” direttamente tra le quadre quando richiamo il comando? ( tra l’altro nel nostro caso non andrebbe comunque bene perché tra “!” dell’indicizzazione o lo spazio in “#2 #1” o metto uno o l’altro, in un caso l’errore finisce nell’indice nell’altro finisce nel testo ma sempre un errore c’è :-))

    Un altro esempio che posso presentare (così da buttare anche un idea) che ho testato (ovvero ho testato che non funziona…) per risolvere un altro problema è:

    `\newcommand{\defin}[2][]{\textbf{\texttt{#2}}\index{#1@#2}} %definizioni indicizzate con testo formattato e ordinamento esplicito (opzionale)
    `

    che nella mia fantasia avrebbe dovuto ordinare la voce secondo il parametro opzionale solo se questo ci fosse stato o altrimenti ordinarlo normalmente (il problema è nato pensando a \defin[e]{$\bm\epsilon$-palla})…ma se il parametro opzionale non c’è, ovviamente da errore (infatti \index{@ciao} non ha senso :-))

    2) diciamo che volessi avere l’indice con le iniziali maiuscole e qui da un lato ci stanno le domande: è una porcata? è carino? ha senso? che ne pensate? lo faccio? Dall’altra ci sta il problema, o meglio i problemi (uno l’ho risolto non so se in modo rozzo o sensato).

    Innanzitutto la mia idea (applicabile a tutti gli esempi qui sopra, prendo il primo perché il più semplice, ma è uguale):

    ` \newcommand{\defin}[1]{\textbf{\texttt{#1}}\index{\MakeUppercase#1}} %definizioni indicizzate (iniziale maiuscola) con testo formattato`

    Il problema delle lettere accentate non me lo pongo perché non credo le userò e, comunque (spero) che non inserendo gli accenti esplicitamente come \’e ma con il carattere vero come è il problema non si ponga (come riesce a sillabare le parole con accenti espliciti…riconoscerà che è una e accentata… e quindi deve trasformala in una È?!). Quindi:

    Problema 2a) \defin{$epsilon$-palle} da errore e, come dicevo non so se in modo blasfemo, ho risolto in locale con \defin{\protect{$epsilon$-}palle} (che però così me lo indicizza sotto la “p”, senza \protect lo indicizza all’inizio di tutto). Io vorrei scrivere \defin[e]{\protect{$\epsilon$-}palle} e averlo indicizzato sotto la “e”).

    Problema2b) \defin{T$_0$} e \defin{topologia} me li scrive correttamente nel testo (\textbf{\texttt{T_0} è \textbf{\texttt{topologia}) correttamente nell’indice (T_0 e Topologia) ma ordina (in ordine alfabetico corretto) prima tutte le voci con maiuscola originale (dalla A alla Z) poi tutte le voci che ha trasformato con la maiuscola (dalla a alla z). Questo non sono proprio riuscito a farmi un idea del perché e quindi non sono riuscito ad abbozzare nemmeno una soluzione fuffa.

    Per esempio mi compare
    `
    T_0, 6
    Spazio
    metrico, 7
    topologico, 5
    Topologia, 3
    `

    Qualcuno ha qualche idea o consiglio?

    Grazie mille. 🙂

    Notte notte, 🙂

    Corrado.

Visualizzazione 17 filoni di risposte
  • Autore
    Risposte
    • #91894
      franen
      Partecipante
        Up
        0
        Down
        ::


        Per rispondere alla prima domanda:
        definisci il tuo comando con \DeclareDocumentCommand, guarda la pagina 7 della documentazione di xparse per capire come usate \IfNoValueTF.

        Fran

      • #91895
        Up
        0
        Down
        ::

        franen” post=91458Per rispondere alla prima domanda:
        definisci il tuo comando con \DeclareDocumentCommand, guarda la pagina 7 della documentazione di xparse per capire come usate \IfNoValueTF.

        Fran

        Grazie mille, non lo conoscevo. Ora stampo la documentazione e la leggo! Poi vi facci sapere 🙂

        ciao ciao

        Corrado.

      • #91896
        Up
        0
        Down
        ::


        Davvero un bel pacchetto.

        ho scritto quanto segue, che risolve il problema dell’ordinamento e quello della scrittura naturale (ovvero scrivo \definpower{Spazio}[topologico] invece che \definpost[topologico]{spazio})

        `\NewDocumentCommand \definpower{ o m o}%
        {\IfValueTF {#1}% test per ordinamento
        {\IfNoValueTF {#3}% test per voce secondaria
        {\textbf{\texttt{#2}}\index{#1@#2}%
        }%
        {\textbf{\texttt{#2 #3}}\index{#1@#2!#3}%
        }%
        }%
        {\IfNoValueTF {#3}% test per voce secondaria
        {\textbf{\texttt{#2}}\index{#2}%
        }%
        {\textbf{\texttt{#2 #3}}\index{#2!#3}%
        }%
        }%
        }`

        Resta la questione delle maiuscole (che tra l’altro forse nemmeno mi interessa e non lo farei…ma sarei curioso di capire come funziona, e perché \MakeUppercase attiva la maiuscola ma mescola l’ordinamento)

        comunque problema principale risolto! grazie!!

        ciao ciao

        Corrado.

      • #91897
        OldClaudio
        Partecipante
          Up
          0
          Down
          ::


          A parte controllare se una argomento facoltativo o obbligatorio sia vuoto o blank (che si può fare anche con i test del pacchetto etoolbox; controlla, ma dovrebbe già essere caricato di default quando compilai don pdflatax; leggi con attenzioni il file log cercando la stringa etoolbox), mi pare che tu non abbia letto niente a proposito di come si manda all’indice analitico il materiale da indicizzare; è spiegato nell’arte, è spiegato nella Guida Guit,; è spiegato nel documento originale di documentazione leggibile con texdoc makeindex al §2.2 (e magari leggendo anche il resto).
          Fatto sta che il tuo codice relativo al contenuto del comando \index è sempre errato in tutte el definizioni che dai; ilnotre non esiste al versione bold dei font teletype (almeno non esiste con i font normali) quindi è improbabile che tu possa stampare in neretto con il font teletype; se ci riesci, vuol dire che non stai usando i teletype normali. In generale non è una buona idea evidenzia una cosa sia con un cambio di famiglia, sia con un cambio di serie. Vedi tu, ma prima leggiti la documentazioen di makeindex, perché ci sono tante cosette da capire, ed è meglio leggerle lì, piuttosto che leggere quattro righe in un messaggio qui sul forum.

        • #91898
          Up
          0
          Down
          ::


          che non ho letto le cose su l’indice ha in parte pienamente ragione. Ricordo di averlo letto un sacco di tempo così come so che non mi ricordo nulla..condivido quello che dici, andrò a leggere!

          Riguardo i font so proprio poco o nulla, ho impostato quelli a spaziatura fissa come Beramono (quelli suggeriti da Lorenzo) che, evidentemente, hanno il neretto perché non mi da errore (e se commento la modifica del font, come dici tu non mi fa il neretto ma solo il cambio in teletype). Riguardo lo stile o il cambio simultaneo non so nulla, a me l’effetto sembra carino. Sicuro non solo in neretto perché mi sembrerebbe una cosa importante in generale (e magari non sempre lo è) e solo in teletype non risalta abbastanza da individuarlo a colpo d’occhio (cosa che è l’effetto che vorrei dare) per quello l’abbinata (visto che me la lasciava fare senza problemi). Non so, mi sembrava una personalizzazione carina e funzionale. Il suggerimento alternativo quale sarebbe? Non garantisco il cambio ma sono aperto a ogni idea nuova 🙂

          Ora individuo le parti da leggere sugli indice così nei prossimi giorni le leggo con calma.

          Grazie mille!!

          Notte notte

          Corrado

        • #91899
          OldClaudio
          Partecipante
            Up
            0
            Down
            ::


            Mettere nell’indice analitico qualcosa evidenziato è una cosa che si può senz’altro fare, ma non bisogna esagerare con le evidenziazioni; ogni cambiamento di carattere rispetto al normale costituisce una evidenziazione; oltre a racchiudere fra virgolette e a sottolineare; in tipografia non si sottolinea mai; le virgolette evidenziano solo una parola nel testo, non nell’indice e più che evidenziare, spesso, vengono usate per dire anche la parola è solo una parola, (tipo il verbo “avere” è irregolare) o vengono usate in senso metaforico oppure ironico (tipo: hai fatto proprio un “bel” lavoro…). Restano i cambiamenti di carattere; quindi il neretto potrebbe andare bene, ma non sovrapposto al teletype; il teletype è riservato alle parole informatiche che sono messe in evidenza con il teletype per non confonderle con parole normali. Evidenziare in neretto si può fare ma di solito è poco elegante; normalmente si preferisce il corsivo; il corsivo neretto è eccessivo e non andrebbe usato perché è evidenziato due volte. Il maiuscoletto serve per evidenziare i nomi delle persone e per scrivere gli acronimi perché sono già in tutte maiuscole, e l’acronimo sporgerebbe dal testo; mentre lo stesso acronimo in maiuscoletto non si impone.

          • #91900
            Up
            0
            Down
            ::


            Quindi il consiglio sarebbe quello di usare solo il corsivo? Temo si confonderebbe con l’uso del corsivo fatto per evidenziare il significato della parola nel suo contesto, quando usato normalmente.

            Se ho capito bene (e nel caso allora sono felice del fatto che la pensavo così già da prima), il neretto o il corsivo (il primo in modo meno “carino”) evidenziano il significato di una parola nel contesto del discorso in cui si colloca, mentre le virgolette la evidenziano come parola in sé sempre però nel contesto di ciò che significa quello che si sta leggendo.

            Quello che io vorrei ottenere è un risalto della parola in sé (come insieme di caratteri) all’interno del testo in sé (come insieme di caratteri). Per tale ragione ho fatto la mia scelta: il teletype sposta l’attenzione di chi legge dal contesto dei significati al contesto dei caratteri con cui è stato scritto il testo, il neretto fa risaltare quell’insieme particolare di caratteri tra gli altri insiemi di caratteri. In questo modo si crea una struttura non ambigua (o confondibile) che assume evidentemente e immediatamente il proprio significato (già dalle primissime righe, forse già dal primo uso…è evidente e non ambiguo da subito) e quindi è facilmente isolabile a livello di attenzione. In questo modo si può leggere il testo ignorando del tutto il “teleneretto” (:-)) e concentrandosi solo sul significato di ciò che si legge. Viceversa, nel momento in cui si avesse desiderio di trovare una parola, per cercarne la definizione, in automatico il nostro cervello potrebbe escludere ogni altro carattere effettuando la scansione del testo i modo rapidissimo.

            Nel caso usassi altri metodi avrei paura comunque di confondere le idee. Infatti le virgolette non avrebbero senso e il corsivo lo uso per altro. D’altra parte, non usando mai né il neretto né il teletype (non ho “codice” da scrivere), potrei optare per una tra queste due (prese singolarmente). Avendo fatto il comando non sarà difficile fare delle prove 🙂

            Quello che temo è solo che usando il solo neretto si possa confondere l’uso come un “risalto di contenuti”, mentre con il solo teletype temo che la parola non si “distacchi” dal testo, perdendo in primo luogo il vantaggio della ricerca rapida e in seconda battuta (questo però vale anche per il neretto) ho paura si perda il più importante mio desiderio: riuscire a ignorare il cambio di stile durante la lettura, a livello di concentrazione intendo…ovvio che quando leggo “vedo” il cambio di stile, ma se sono concentrato sul capire cosa sto leggendo allora un neretto o un corsivo (avendo escluso le virgolette che non centrano) di sicuro mi distrarranno da ciò che ho in mente perché “guarda che questo è importante, attento!”…ecco, ho paura che con il teletype da solo si rischi la stessa cosa seppur in modo diverso: “mmm…teletype…mica è codice..vabbé, che stavo leggendo?!…”, mentre sono piuttosto convinto che con la combinazione teletype+neretto si riesca senza problemi a riconoscere a livello inconscio il cambiamento e, pur notandolo, essere in grado di “andare oltre”, senza perdere per nulla il filo del ragionamento. È uno stacco, netto, chiaro e nuovo, che non si sovrappone a nessun’altra convenzione.

            In ogni modo proverò a vedere cosa succede con il solo neretto o il solo teletype (escludo il corsivo perché non voglio usare la medesima struttura con due significati diversi all’interno dello stesso testo e le virgolette non le considero neppure). Ma ripeto sono scettico: quei due modi, nella nostra cultura, hanno già il loro significato, e non è quello che vorrei dare io Comunque vedo!

            PS per Claudio: non so se ho capito bene o male quello che hai scritto

            Mettere nell’indice analitico qualcosa evidenziato è una cosa che si può senz’altro fare, ma non bisogna esagerare con le evidenziazioni;

            Solo per sicurezza: nel mio indice non c’è nulla di evidenziato in alcun modo, né in neretto né in teletype…

            Grazie mille per i consigli.

            Corrado.

          • #91901
            OldClaudio
            Partecipante
              Up
              0
              Down
              ::


              Prego, non c’è di che. Ma mi permetto di darti un altro elemento per decidere.

              Il teletype non è divisibile in sillabe in fin di riga. È voluto ed è scritto “nella pietra” all’interno del file che descrive ele caratteristiche del Beramono mediante il codice [tt]\hyphenchar=-1[/tt]; questo ti può dare dei problemi a livello di giustificazione delle righe; ti garantisco che ne da abbastanza, anche se non tutte le parole scritte in teletype vanno a sbordare fuori dai margini. Leggi una qualunque guida su LaTeX e constati quanti pezzetti scritti in teletype ci sono; che ha scritto quelle guide ha dovuto arrampicarsi sui vetri per rigirare le frasi in modo che quelle parole non cadessero più a fine riga oppure ha dovuto sillabare a mano.

              Allora i comandi che definisci vanno bene, (dopo averli corretti, come certamente hai già fatto, per usare la sintassi corretta richiesta da makeindex) perché se usi sempre quei comandi, avendovi scritto dentro \texttt e constatassi che ci sono troppe parole che sbordano fuori dai margini, fai presto a cambiare il comando in \textbf e così elimini il problema della mancata divisione in sillabe.

            • #91902
              Up
              0
              Down
              ::


              mmm questa è più che un’obiezione/consiglio…la vedo come una norma “nella pietra” 🙂 non ho sicuro intenzione di diventare matto a fare io qualcosa che so che LaTeX fa benissimo…ovvero preoccuparmi della sillabazione! teletype eliminato! Per lo meno finché non saprò e non avrò tempo di creare un nuovo “nome” di caratteri che ovvi il problema :-)…potrei chiamarlo proprio telebold :-)…ma direi che ora ho altre priorità 🙂 vabbé..scherzi a parte..vedrò cosa fare 🙂

              Riguardo invece a quello che dici dell’indice, ho riguardato l’Arte, ho riguardato la Guida e la documentazione (di imakeidx e quella di makeidx..), sinceramente molto velocemente, ma comunque non capisco cosa non ti torna…

              il comando \index è attaccato alla parola che voglio indicizzare

              uso ! per passare dei sotto-lemmi

              uso @ per darne l’ordinamento

              nel primo caso ho una parola a cui voglio dare esplicitamente io l’ordine \index{@} per esempio `$\epsilon$-palla\index{e@$\epsilon$-palla}`
              nel secondo caso do l’ordine e ho un sottolemma (non credo mi accadrà mai) in ogni modo uso \index{@!} per esempio `$\epsilon$-palla aperta\index{e@$\epsilon$-palla!aperta}`

              (OK, non ho considerato il caso in cui sia il sotto lemma a dover essere indirizzato nell’ordinamento ma mi è parso ancora più raro…e non mi è mai capitato fin’ora…in caso lo aggiungo con una quarta opzione, in modo da inserirla solo se è stata inserita anche la terza e non sbalgiare, ovvero della forma `\defin[]{}[][]` che produrrà una cosa del tipo

              `\tesxtbf{ }\index{@!@}`

              nel terzo e quarto caso l’ordinamento è naturale (e le voci passate a \index gli arrivano direttamente dal comando, quindi non formattate né in grassetto né in altro modo)

              davvero non capisco cosa non vada… può essere che sarebbe meglio scrivere separatamente le voci? `\textbf{} \textbf{}\index{@!}`

              se è quello non credevo fosse un problema e correggo subito…se è altro, proprio non lo vedo…quindi, per risponderti, no…al momento non ho corretto nulla…

            • #91903
              OldClaudio
              Partecipante
                Up
                0
                Down
                ::


                Sarebbe che il punto esclamativo che separa i livelli di indicizzazione va usato prima di @; la sintassi del contenuto di \index è:

                \index{primo livello!secondo livello! voce per sorting@\comando{voce vera}|pseudocomando}

                Il primo livello e il suo punto esclamativo c’è se ci sono anche gli altri termini; altrimenti lui manca e il secondo livello diventa il primo.
                Il secondo livello con il suo punto esclamativo c’è se c’è anche qualcosa dopo, altrimenti manca il livello.
                La voce per il sorting deve esserci se sono indicati i livelli, ma può esserci se la sua scrittura è diversa da quella della voce da stampare.

                La voce da stampare, argomento del \comando, o anche una espressione matematica senza \comando, serve per stampare davvero la voce vera.
                Lo pseudo comando serve per formattare il numero di pagina; deve essere un comando LaTeX privato del suo backslash, ma deve essere un comando, non una dichiarazione LaTeX; quindi se volessi il numero della pagina in neretto, dovresti mettere come pseudocomando solo textbf, NON bfseries, perché quest’ultimo è una dichiarazione non un comando che accetta un argomento.

                Allora se vuoi scrivere $\epsilon$ nell’indice devi scrivere [tt]{$\epsilon$\index{epsilon@$\epsilon$}[/tt].
                Se vuoi che la pagina in cui compare quell’epsilon sia composta in corsivo devi scrivere: [tt]{$\epsilon$\index{epsilon@$\epsilon$|textit}[/tt].

                Se vuoi indicizzare l’indice palle apposto a epsilon ma lo vuoi mettere sotto al livello di epsilon, devi scrivere: [tt]{$\epsilon_{palle}$\index{epsilon!palle@palle}[/tt]…
                e via di questo passo; ma a me sembrava che la documentazione di makeindex al paragrafo 2.2. Mi sembrava anche che la cosa fosse piuttosto chiara e ricca di esempi.

                Cercherò di modificare la GuidaGuIT in modo che questa questione dei livelli gerarchici sia più chiara; ma non ti aspettare un upload della Guida nel giro di due giorni, visto che ho appena fatto un upload e non posso chiedere a @robitex di caricare una nuova versione della Guida ogni settimana.

              • #91904
                Up
                0
                Down
                ::


                Ora sembra tutto più chiaro…(a parte che avevo letto la guida di makeidx..davvero scarna e non utile ai miei scopi come quella di makeindex)… non avevo capito nulla…giusto per capire a fondo perché sto facendo confusione tra quello che ho capito e quello che sto capendo che avevo capito male e quello che credo di aver capito, ora, bene 🙂

                in realtà “@” non è detto che vada dopo il “!”, infatti si legge

                If you specify an entry of the form σ@τ, the string σ determines the alphabetical position of the entry, while the string τ produces the text of the entry.

                dove “entry” può essere a quelsiasi livello (quindi anche al secondo, dopo un “!”)

                dunque, per esserne certo, faccio un esempio sciocco ma (a mio avviso) chiarificatore:

                voce1: $\epsilon$
                voce2: $\epsilon$-circolo
                voce3: $\epsilon$-$\lambda$-circolo

                voglio che la voce1, la voce2 e la voce3 siano indicizzate alfabeticamente come “epsilon” e voglio che “$\epsilon$” sia al primo livello per tutte e tre le voci, mentre “circolo” e “$\lambda$-circolo” stiano al secondo livello (nel primo caso “circolo” è la sotto voce, nel secondo caso è tutto “$\lambda$-circolo” la sotto voce di “$\epsilon$”) e voglio che in questo secondo livello venga prima “circolo”. Ovvero voglio che “$\lambda$-circolo” sia inserito in ordine tra le sotto voci di “$\epsilon$” come se fosse “lambda-circolo” (se non facessi nulla “circolo” verrebbe dopo perché “$\lambda$-circolo” inizia con un simbolo, tra l’altro il trattino viene pure gestito bene, da quello che leggo sulla guida makeindex, quindi siamo a cavallo).

                il codice quale sarà?

                Ne butto uno io (quello che ritengo essere giusto…):

                `
                $\epsilon$\index{epsilon@$\epsilon$}
                $\epsilon$-circolo\index{epsilon@$\epsilon$!circolo}
                $\epsilon$-$\lambda$-circolo\index{epsilon@$\epsilon$!lambda-circolo@$\lambda$-circolo}
                `

                Confermi? (a me funziona, senza errori)

                Poi, volendo, in fondo di tutto c’è tutta la parte dopo | che è unica , chiara e non mi crea problemi (sopratutto perché non la uso :-)) di comandi (e non dichiarazioni) che tra l’altro possono essere anche definiti dall’utente, per gestire la parte “numerica” dell’indice.

                Attendo commenti e, spero, conferme 🙂

                Ciao ciao

                Corrado.

              • #91905
                Up
                0
                Down
                ::


                Alla luce di quanto scoperto, e volendo sperimentare la soluzione migliore per “staccare” dal testo le parole che definisco, il mio codice è diventato il seguente:

                `\newcommand{\evidence}[1]{\textbf{\texttt{#1}}}
                \NewDocumentCommand \defin{ o m o o}% inserisce voci formattate nel testo e direttamente nell'indice analitico
                {\IfValueTF{#1}%test per ordinare il lemma
                {\IfValueTF{#4}%test per ordinare il sotto-lemma (se lo passa allora il sottolemma c'è!)
                {\evidence{#2 #3}\index{#1@#2!#4@#3}}%lemma e sotto-lemma ordinati entrambi
                {% (se non passa il test su #4 non so se c'è il sotto-lemma)
                \IfNoValueTF {#3}% test per sotto-lemma
                {\evidence{#2}\index{#1@#2}}% lemma ordinato
                {\evidence{#2 #3}\index{#1@#2!#3}}% lemma ordinato e sotto-lemma
                }%
                }%chiusa questa parentesi so che il lemma non è ordinato
                {\IfValueTF{#4}%test per ordinare il sotto-lemma (se lo passa allora il sottolemma c'è!)
                {\evidence{#2 #3}\index{#2!#4@#3}}%lemma e sotto-lemma ordinato
                {% (se non passa il test su #4 non so se c'è il sotto-lemma)
                \IfNoValueTF {#3}% test per sotto-lemma
                {\evidence{#2}\index{#2}}% lemma
                {\evidence{#2 #3}\index{#2!#3}}% lemma e sotto-lemma
                }%
                }%
                }%`

              • #91906
                OldClaudio
                Partecipante
                  Up
                  0
                  Down
                  ::


                  Per quanto riguarda la sintassi dell’argomento di [tt]\index[/tt] confermo che il tuo modo di procedere con i punti esclamativi dopo @ va bene.

                  Per il resto del tuo codice, se ti piace va bene; a parte la (mia) difficoltà a leggere al volo il codice in linguaggio L3, direi che va bene, ma, appunto, ho difficoltà a leggerlo, quindi non poss dirti niente sulla sua correttezza ed efficacia o se ci sia qualche altro modo per fare meglio (inoltre che autorità ho io per dire: questo è giusto; questo è sagliato, quando lo stesso problema ha molte soluzioni? al massimo si può dire: questo mi piace di più; questo mi piace di meno; ma è una questione di gusti personali, non è né giusto né sbagliato). In ogni caso Hai fatto benissimo a definire \evidence, in modo che cambiando solo la sua definizione puoi modificare in un solo colpo tutte le voci evidenziate e indicizzate.

                • #91907
                  Up
                  0
                  Down
                  ::


                  Ignoranza mia fatti capanna: cos’è il linguaggio L3..che pare io usi senza saperlo?!

                  Ho caricato il paccheto xparse come suggerito per poter usare nuove macro e definire comandi più personalizzabili…ho dato un occhio alla documentazione e ho scritto il codice (una volta individuato cosa usare sembra piuttosto “user friendly” se non ci si addentra in strane opzioni :-)).

                  \NewDocumentCommand {}{}{}{}>}

                  I commenti li ho messi io per capire che facevo tra i vari condizionali senza perdermi 🙂 (e riuscire a risparmiare due test :-))

                  Con \InValueTF{}{}{} (e il corrispondente con “No” in mezzo) il test lo passi se è “qualcosa” (…qualunque “qualcosa” tranne il suo modo di dire “non c’è niente”…che però anche scrivendo “non c’è niente” come lo scrive lui..se ne accorge e lo legge come “qualcosa” 🙂 troppo mitico) (oppure passi il test se è il suo modo, scritto da lui, di dire “non c’è niente” nel caso di \IfNoValueTF).

                  Dunque xparse=L3?! L3=LaTeX3 e le macro di xparse sono quelle che finiranno in LaTeX3? Di LaTeX3 sinceramente non ho ancora letto nulla di nulla e non so nulla 🙂

                  Grazie per la conferma riguardo a \evidence 🙂 e la giusta comprensione di makeindex , appena faccio un po’ di prove e decido cosa fargli fare metterò qui la mia scelta 🙂

                  Resta il fatto che

                  “\index{\MakeUppercase(b)} (che è come \index{\MakeUppercase{B}}) non è come \index{B} (che è uguale a \index{b} e quindi diverso dai primi due, i quali formano una loro gerarchia precedente a quella standard). Come mai?”

                  In ogni modo, al di la della risposta interessante di per sé e che non saprei nemmeno dove andare cercarla se non aspettando qualcuno di voi che me la dia (o mi dica cosa leggere per trovarmela), ho sfruttato la mia nuova conoscenza di makeindex per risolvere il problema di avere tutte le iniziali dei primi livelli di lemma maiuscole (sempre, solo nell’indice e non nel testo) con il seguente codice. (lo riporto nel caso potesse essere utile a qualcuno, se non ci sono errori chiaramente…ma a me non ne da :-))

                  `
                  \NewDocumentCommand \definUp{ o m o o}% inserisce voci formattate nel testo e direttamente nell'indice analitico
                  {\IfValueTF{#1}%test per ordinare il lemma
                  {\IfValueTF{#4}%test per ordinare il sotto-lemma (se lo passa allora il sottolemma c'è!)
                  {\evidence{#2 #3}\index{#1@\MakeUppercase#2!#4@#3}}%lemma e sotto-lemma ordinati entrambi
                  {% (se non passa il test su #4 non so se c'è il sotto-lemma)
                  \IfNoValueTF {#3}% test per sotto-lemma
                  {\evidence{#2}\index{#1@\MakeUppercase#2}}% lemma ordinato
                  {\evidence{#2 #3}\index{#1@\MakeUppercase#2!#3}}% lemma ordinato e sotto-lemma
                  }
                  }
                  {\IfValueTF{#4}%test per ordinare il sotto-lemma (se lo passa allora il sottolemma c'è!)
                  {\evidence{#2 #3}\index{#2@\MakeUppercase#2!#4@#3}}%lemma e sotto-lemma ordinato
                  {% (se non passa il test su #4 non so se c'è il sotto-lemma)
                  \IfNoValueTF {#3}% test per sotto-lemma
                  {\evidence{#2}\index{#2@\MakeUppercase#2}}% lemma
                  {\evidence{#2 #3}\index{#2@\MakeUppercase#2!#3}}% lemma e sotto-lemma
                  }
                  }
                  }
                  `

                  PS: l’idea comporre così l’indice (con iniziali lemmi principali tutti maiuscoli) è una cosa che non è il caso di fare? che si fa e si deve fare? Oppure né una né l’altra e va benissimo come uno preferisce?

                  Buona cena (io vado a cena :-))

                  Corrado.

                • #91908
                  OldClaudio
                  Partecipante
                    Up
                    0
                    Down
                    ::


                    L3 è una abbreviazione per indicare il linguaggio interno di LaTeX3, che ora è l’argomento di studio di Enrico, il quale ha già prodotto diversi pacchetti basati su L3; xparse non è ufficialmente uno di quelli, perché risulta prodotto dal LaTeX3 Team, ma mi pare che Enrico ne faccia parte, almeno collateralmente. xpatch invece è proprio di Enrico.

                    In sostanza si tratta di pacchetti epr usare il nuovo linguaggio rendene abbastanza trasparente le complicazioni interne.

                    Comunque va benissimo.

                    Invece il fatto che \index{\MakeUppercase{b}} si ocmporti diversamente da \index{B} è abbastanza ovvio; il primo viene messo fra i simboli perché manca una chiave per mettere in ordine alfabetico, cioè manca @ e la parte che viene prima; esso si comporterebbe come \index{B} se fosse scritto \index{B@\MakeUppercase{b}}.

                  • #91909
                    Up
                    0
                    Down
                    ::

                    OldClaudio” post=91572L3 è una abbreviazione per indicare il linguaggio interno di LaTeX3, che ora è l’argomento di studio di Enrico, il quale ha già prodotto diversi pacchetti basati su L3; xparse non è ufficialmente uno di quelli, perché risulta prodotto dal LaTeX3 Team, ma mi pare che Enrico ne faccia parte, almeno collateralmente. xpatch invece è proprio di Enrico.

                    In sostanza si tratta di pacchetti epr usare il nuovo linguaggio rendene abbastanza trasparente le complicazioni interne.

                    Grazie ora è più chiaro (e sopratutto a sto punto vado a guardarmi cosa fa xpatch :-))

                    OldClaudio” post=91572
                    Invece il fatto che \index{\MakeUppercase{b}} si ocmporti diversamente da \index{B} è abbastanza ovvio; il primo viene messo fra i simboli perché manca una chiave per mettere in ordine alfabetico, cioè manca @ e la parte che viene prima; esso si comporterebbe come \index{B} se fosse scritto \index{B@\MakeUppercase{b}}.

                    Questo lo intuivo, nel senso che il mio dubbio allora diviene, c’è un modo per tasformare una minuscola in una maiuscola (o viceversa) facendo sostituire il carattere davvero? Ovvero, il problema che non capisco, né so come risolvere, è proprio quello che dici tu: perché \index “vede” \MakeUppercase{b} come un simbolo e non come il carattere “B” che trasforma? Come faccio a dire dentro \index (ma potrebbe essere qualunque altro comando) di fare prima la conversione da minuscolo a maiuscolo e poi applicarci il comando? Ho provato anche con \uppercase ma niente da fare…ho provato con \expandafter\index{\MakeUppercase{b}}, niente

                    vabbé, dai era solo una curiosità, non la userò mai io ne probabilmente nessun altro quindi è inutile continuare a perderci il sonno 🙂

                    notte notte 🙂

                    Corrado.

                  • #91910
                    OldClaudio
                    Partecipante
                      Up
                      0
                      Down
                      ::


                      È vero, non vale la pena perderci il sonno; probabilmente [tt\expandafter\index\expandafter{|makeUppercase{b}}[/tt] potrebbe funzionare, ma potrebbe vare senso se al posto di b ci fosse un numero di argomento, per esempio #2. Il fatto è che \index sterilizza tutto il suo argomento per poterlo scrivere verbatim nel file ausiliario .idx, affinche makeindex ci lavori sopra; makeindex non è TeX, ha i suoi caratteri speciali (sono @, !, “, \) ma non è TeX. Makeindex non interpreta i comandi TeX o LaTeX, semplicemente agisce sulle stringhe di caratteri che ha ricevuto in pasto, ci lavora sopra un po’, poi trasferisce i tutto al file definitivo .ind che verrà letto ed elaborato da un programma del sistema TeX, nel tuo caso pdfLaTeX.

                    • #91911
                      Up
                      0
                      Down
                      ::


                      Ho provato anche con l’argomento creando un comando con il comando 🙂 (il mio \def di fatto gli manda argomenti) ma non funziona 🙂

                      In ogni modo ho già risolto, come si vede, come suggerivi anche tu [tt]\index{#2@\MakeUppercase#2}[/tt] che scritto così ha pure il vantaggio che rende maiuscola solo la prima lettere come volevo, non devo scomodare comandi ancestrali o altro di complicato…il codice è chiaro e lineare..se non crea problemi, lo terrei così 🙂

                      (poi tra l’altro devo ancora decidere se usare \def o \defUp :-))

                      Ora vado a letto!

                      notte notte

                      Corrado.

                  Visualizzazione 17 filoni di risposte
                  • Devi essere connesso per rispondere a questo topic.

                  Go to top