comando speciale che si ridefinisce per l’indice analitico

  • Creatore
    Topic
  • #12240
    Up
    0
    Down
    ::


    Salve ragazzi,
    questa è una domandona per esperti. Dato che non ho voglia di usare tanti pacchetti vorrei avere un comando per l’indice funzionasse in questo modo:
    la prima volta mette in neretto la parola e la mette nell’indice
    la seconda volta che la uso la metta in corsivo e la mette nell’indice.

    Ho provato a smanettare sopra il codice, che si ridefinisce da solo, in questo topic http://www.guit.sssup.it/phpbb/viewtopic.php?t=604 che va benissimo per gli acronimi. Ma le mie conoscenze in latex in questo caso sono troppo scarse…qualcuno sa come crearlo un codice del genere? 🙄

Visualizzazione 12 filoni di risposte
  • Autore
    Risposte
    • #12241
      Up
      0
      Down
      ::

      Salve ragazzi,
      questa è una domandona per esperti. Dato che non ho voglia di usare tanti pacchetti vorrei avere un comando per l’indice funzionasse in questo modo:
      la prima volta mette in neretto la parola e la mette nell’indice
      la seconda volta che la uso la metta in corsivo e la mette nell’indice.

      Ho provato a smanettare sopra il codice, che si ridefinisce da solo, in questo topic http://www.guit.sssup.it/phpbb/viewtopic.php?t=604 che va benissimo per gli acronimi. Ma le mie conoscenze in latex in questo caso sono troppo scarse…qualcuno sa come crearlo un codice del genere? 🙄

      `\makeatletter
      \newcommand{\defspecialword}[1]{%
      \expandafter\gdef\csname sp@word#1\endcsname{%
      \textbf{#1}\index{#1}%
      \expandafter\gdef\csname sp@word#1\endcsname{\textit{#1}\index{#1}}}}
      \newcommand{\spword}[1]{\@nameuse{sp@word#1}}
      \makeatother`
      Userai \defspecialword nel preambolo, per esempio, \defspecialword{Pippo}; poi, nel documento, userai \spword{Pippo}.

      Ciao
      Enrico

    • #12242
      Up
      0
      Down
      ::


      yahoo funziona tutto grande…prima utlizzavo due comandi ma dovevo ricordarmi cosa avevo prima e cosa dopo ora non ho più questo problema!!!!! 😀

    • #12243
      Up
      0
      Down
      ::

      vorrei avere un comando per l’indice funzionasse in questo modo:
      la prima volta mette in neretto la parola e la mette nell’indice
      la seconda volta che la uso la metta in corsivo e la mette nell’indice.

      Solo per curiosità… puoi spiegarmi la logica di questa cosa? Grazie molte.

    • #12244
      Up
      0
      Down
      ::


      Cioè perché agisco in questo modo?
      Beh perché la prima volta che introduco un concetto voglio che si veda chiaramente con un bel neretto, quando certe volte lo ripeto in altri contesti voglio che si veda lo stesso chiaramente ma con qualcosa di meno pesante quindi con il corsivo. Così si notano le parole chiave subito…era questa la risposta che intendevi?

    • #12245
      Up
      0
      Down
      ::

      Cioè perché agisco in questo modo?
      Beh perché la prima volta che introduco un concetto voglio che si veda chiaramente con un bel neretto, quando certe volte lo ripeto in altri contesti voglio che si veda lo stesso chiaramente ma con qualcosa di meno pesante quindi con il corsivo. Così si notano le parole chiave subito…era questa la risposta che intendevi?

      Sì, comunque non preoccuparti, è stato un errore mio: essendo a digiuno di indici analitici, mi ero dimenticato (proprio da un punto di vista «logico») che è possibile ripetere quante volte si vuole il comando «\index» con lo stesso termine, in modo da tener traccia di tutte le pagine in cui esso compare.

      Per qualche ragione, mi ero convinto che il comando «\index» lo si chiamasse una e una sola volta (per termine), e quindi non mi pareva sensato che tu volessi il termine in neretto alla prima composizione e in corsivo dalla seconda in poi. Tanto sarebbe valso farlo direttamente in corsivo, no? 🙄

      Ripeto: errore mio. E grazie per la spiegazione.

    • #12246
      Up
      0
      Down
      ::


      Risollevo un’attimo questo topic da me iniziato. Quel codice che mi era stato dato mi è servito tantissimo. Però mi sono accorto di una pecca. Mi spiego meglio con un esempio:

      vorrei che prendesse una parola chiave e anche un suo sinonimo (per esempio “tabella” e “tabelle”). Infatti ogni volta che mi trovo davanti al plurale della mia parola chiave \spword non posso usarlo perché, ovviamente, non riconosce che sto parlando della stessa cosa. Ora so che questa cosa si può fare con index ma quel codice che mi è stato dato non so come modificarlo…

      Grazie

      PS come vedete lavoro anche a Pasqua…anzi buone vacanze a tutti

    • #12247
      Up
      0
      Down
      ::

      Risollevo un’attimo questo topic da me iniziato. Quel codice che mi era stato dato mi è servito tantissimo. Però mi sono accorto di una pecca. Mi spiego meglio con un esempio:

      vorrei che prendesse una parola chiave e anche un suo sinonimo (per esempio “tabella” e “tabelle”). Infatti ogni volta che mi trovo davanti al plurale della mia parola chiave \spword non posso usarlo perché, ovviamente, non riconosce che sto parlando della stessa cosa. Ora so che questa cosa si può fare con index ma quel codice che mi è stato dato non so come modificarlo…

      Grazie

      PS come vedete lavoro anche a Pasqua…anzi buone vacanze a tutti

      Aggiungi, dopo la definizione di \defspecialword, sempre fra \makeatletter e \makeatother, il codice seguente:
      `\newcommand{\defspecialsyn}[2]{%
      \expandafter\gdef\csname sp@word#1\endcsname{%
      \textit{#1}\index{#2}}}`
      Dato un termine (per esempio, tabella), elencherai anche i suoi “sinonimi”:
      `\defspecialword{tabella}
      \defspecialsyn{tabelle}{tabella}
      \defspecialsyn{Tabella}{tabella}
      \defspecialsyn{Tabelle}{tabella}`
      e poi lavorerai come prima: dando \spword{tabelle}, nel testo verrà scritto “tabelle” in corsivo e sarà indicizzato come “tabella”. Sarà compito tuo far apparire per primo il termine principale (visto che lo vuoi in nero).

      Dopo un lauto pranzo pasquale, una breve sosta al computer ci vuole. 🙂

      Ciao
      Enrico

    • #12248
      Up
      0
      Down
      ::


      risollevo il topic, sempre domandona per esperti:

      non so perché, ma da quando uso la codifica utf8 sotto linux (kubuntu, kile, texlive-full)

      `\makeatletter
      \newcommand{\defspecialword}[1]{%
      \expandafter\gdef\csname sp@word#1\endcsname{%
      \textbf{#1}\index{#1}%
      \expandafter\gdef\csname sp@word#1\endcsname{\textit{#1}\index{#1}}}}

      \newcommand{\spword}[1]{\@nameuse{sp@word#1}}

      \newcommand{\defspecialsyn}[2]{%
      \expandafter\gdef\csname sp@word#1\endcsname{%
      \textit{#1}\index{#2}}}

      \makeatother

      \defspecialword{cecità}`

      non funziona con i caratteri accentati! Infatti mi da il seguente errore:
      `
      [PDFLaTeX] prova.tex => prova.pdf (pdflatex)
      [PDFLaTeX] finished with exit status 1
      ./prova.tex:75:Missing \endcsname inserted. \defspecialword{cecità}
      ./prova.tex:75:Missing \begin{document}. \defspecialword{cecità}
      ./prova.tex:75:Extra \endcsname. \defspecialword{cecità}
      [PDFLaTeX] 3 errors, 0 warnings, 0 badboxes`

      Tutto invece fila liscio se uso \’letteradaaccentare…
      sia per defspecialword che per spword…

      La mia ignoranza in questo caso è abissale dato che di quel codice capisco l’1%…non saprei dove mettere mano 😳

    • #12249
      Up
      0
      Down
      ::


      Mi inserisco nella discussione, non riesco a capire la logica del comando, Prof potresti per favore chiarire come è stato definito?

      Grazie mille

    • #12250
      Up
      0
      Down
      ::

      risollevo il topic, sempre domandona per esperti:

      non so perché, ma da quando uso la codifica utf8 sotto linux (kubuntu, kile, texlive-full)

      `\makeatletter
      \newcommand{\defspecialword}[1]{%
      \expandafter\gdef\csname sp@word#1\endcsname{%
      \textbf{#1}\index{#1}%
      \expandafter\gdef\csname sp@word#1\endcsname{\textit{#1}\index{#1}}}}

      \newcommand{\spword}[1]{\@nameuse{sp@word#1}}

      \newcommand{\defspecialsyn}[2]{%
      \expandafter\gdef\csname sp@word#1\endcsname{%
      \textit{#1}\index{#2}}}

      \makeatother

      \defspecialword{cecità}`

      non funziona con i caratteri accentati! Infatti mi da il seguente errore:
      `
      [PDFLaTeX] prova.tex => prova.pdf (pdflatex)
      [PDFLaTeX] finished with exit status 1
      ./prova.tex:75:Missing \endcsname inserted. \defspecialword{cecità}
      ./prova.tex:75:Missing \begin{document}. \defspecialword{cecità}
      ./prova.tex:75:Extra \endcsname. \defspecialword{cecità}
      [PDFLaTeX] 3 errors, 0 warnings, 0 badboxes`

      Tutto invece fila liscio se uso \’letteradaaccentare…
      sia per defspecialword che per spword…

      La mia ignoranza in questo caso è abissale dato che di quel codice capisco l’1%…non saprei dove mettere mano 😳

      Temo che sia un compito molto arduo riuscire nell’impresa di far digerire a TeX un modo corretto di interpretare UTF8.

      Come funziona UTF8? Alcuni caratteri sono codificati con un byte, altri con due e altri ancora con tre. Per esempio, “à” è codificato come “C3 A0” (indico il numero esadecimale). L’opzione utf8 a inputenc lavora così: rende “attivo” il carattere “C3” (che quindi si comporta come una macro) e lo definisce come un comando con un argomento; in base all’argomento (cioè al carattere che segue), userà l’azione opportuna.

      Viceversa, quando l’opzione T1 del pacchetto fontenc è attiva, una combinazione come \`a viene tradotta in un solo carattere, che rende felice LaTeX, se il carattere accentato è presente nella tabella dei font in codifica T1 (quindi non per gli accenti più esoterici).

      Attendiamo fiduciosi luaTeX, che permetterà l’input diretto di Unicode e la traduzione in fase di input di UTF8 in Unicode.

      Il mio consiglio è di continuare con Latin 1.

      Ciao
      Enrico

    • #12251
      Up
      0
      Down
      ::


      ho capito la metà di quello che hai detto ma attenderemo fiduciosi, peccato che mi tocchi usare utf8 perché sennò il correttore grammaticale di kile non capisce i caratteri immessi…e vabbeh almeno per le special word userò lo slash…grazie comunque 🙂

    • #12252
      Up
      0
      Down
      ::

      Mi inserisco nella discussione, non riesco a capire la logica del comando, Prof potresti per favore chiarire come è stato definito?

      `\makeatletter
      \newcommand{\defspecialword}[1]{%
      \expandafter\gdef\csname sp@word#1\endcsname{%
      \textbf{#1}\index{#1}%
      \expandafter\gdef\csname sp@word#1\endcsname{\textit{#1}\index{#1}}}}

      \newcommand{\spword}[1]{\@nameuse{sp@word#1}}
      \makeatother`
      Quando scrivo \defspecialword{parola}, viene definito il comando
      `\sp@wordparola`
      che ha il seguente effetto: la prima volta che viene usato scrive “parola” in neretto e inserisce un richiamo a “parola” per l’indice analitico; inoltre questo comando ridefinisce sé stesso cosicché, le volte successive che verrà usato, scriverà “parola” in corsivo e inserirà il richiamo a “parola” per l’indice analitico.

      Il comando \sp@wordparola non va usato direttamente, ma tramite \spword{parola}.

      Per definire \sp@wordparola, uso il trucco di \csname…\endcsname; un modo più LaTeX sarebbe stato di scrivere, invece di \expandafter\gdef\csname sp@word#1\endcsname,
      `\global\@namedef{sp@word#1}`
      Ciao
      Enrico

    • #12253
      Up
      0
      Down
      ::


      Grazie Enrico, ieri sera non riuscivo a capire perché funzionasse, ma mi sfuggiva la redifinizione di sè stesso… Forse ero troppo addormentato
      Grazie per la spiegazione
      Michele

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

Go to top