Opzione pacchetto con LaTeX3

  • Creatore
    Topic
  • #102152
    robitex
    Amministratore del forum
      Up
      0
      Down
      ::


      Ciao, sono un po’ arrugginito in fatto di programmazione di pacchetti 🙂

      sto cercando di aggiungere opzioni come chiave=valore in LuaLaTeX a un pacchetto.
      Una delle opzioni vuole dare la possibilità all’utente di caricare una libreria Lua con un nome di variabile personalizzato.
      La chiave potrebbe essere ‘libname’ quindi scrivendo:
      `\usepackage[libname=lib]{nomepacchetto}`
      dovrei poter accedere alla libreria con la variabile lib e non con il nome della variabile del modulo assegnato dal codice:
      `
      \directlua{lib.func1(arg1)}
      `

      Mi conviene usare xkeyval, macro standard di LaTeX, codice Lua o funzionalità LaTeX3?
      Da quello che ho capito, LaTeX3 viene precaricato in LuaLaTeX.
      Grazie del contributo.
      R.

    Visualizzazione 3 filoni di risposte
    • Autore
      Risposte
      • #102153
        robitex
        Amministratore del forum
          Up
          0
          Down
          ::


          Ho risolto.
          R.

        • #102154
          claudio
          Partecipante
            Up
            0
            Down
            ::


            e come? 😀
            claudio

          • #102155
            Up
            0
            Down
            ::


            Sono curioso anch’io: è sempre interessante scoprire qualcosa su come costruire i pacchetti.

          • #102156
            robitex
            Amministratore del forum
              Up
              0
              Down
              ::


              Eh, eh curiosi eh. Molto bene.
              Dunque, ho utilizzato pochissime righe di codice di LaTeX3 per creare la chiave e far processare il relativo codice.
              Davvero semplice.
              Non posso riportarvi tutto il codice del pacchetto perché è ancora segretissimo 😀 ma quello che interessa si:
              `
              \RequirePackage{expl3}
              \RequirePackage{l3keys2e}

              \ProvidesExplPackage{secretpack}{2015/06/15}{0.1}{An absolutely secret package}

              \cs_new_nopar:Nn \secretpack_libname:
              {
              secretpack
              }

              \keys_define:nn { secretpack }
              {
              lib-name .code:n =
              \cs_set_nopar:Nn \secretpack_libname:
              { #1 }
              }

              \ProcessKeysOptions { secretpack }

              \directlua{\secretpack_libname: = require “secretpack”}
              `
              Ovvio che si possono apportare modifiche per soddisfare i gusti personali.
              Funziona così: viene definita una macro dove è memorizzato il nome standard della libreria Lua. Con l’opzione lib-name si attiva la sovrascrittura della macro con il nome scelto dall’utente che generalmente desidera accorciarlo.

              Infatti la primitiva \directlua espande tutto l’argomento prima di passare all’esecuzione da parte di Lua. Dunque se non viene specificata l’opzione lib-name è come se si scrivesse:
              `
              \directlua{ secretpack = require “secretpack” }

              % che equivale al più semplice e normale
              \directlua{ require “secretpack” }
              `
              altrimenti si ha:
              `\directlua{ nomesceltodallutente = require “secretpack” }`

              Notare come i nomi delle funzioni in LaTeX3 vengono distinte dai nomi delle variabili e costanti con il due punti. Dopo tale carattere devono essere specificati gli argomenti della funzione perciò la funzione \secretpack_libname: rimane solo con questo simbolo finale.
              R.

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

          Go to top