Utilizzo di \newcommand e LuaLaTeX

  • Questo topic ha 3 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 8 anni fa da robitex.
  • Creatore
    Topic
  • #113808
    Up
    0
    Down
    ::


    Ciao a tutti,
    sto avendo qualche difficoltà nel far funzionare un pezzo di codice in lua all’interno di un \newcommand: nello specifico volevo scrivere una macro che semplicemente calcola la trasformazione fra libbre e kg, nel senso che l’input sono le libbre e ritorna l’equivalente in kg.
    In allegato il mio tentativo.
    Molte grazie!

    Attachments:
    You must be logged in to view attached files.
Visualizzazione 2 filoni di risposte
  • Autore
    Risposte
    • #113809
      robitex
      Amministratore del forum
        Up
        0
        Down
        ::


        Ciao,
        leggi la documentazione delle funzioni della serie tex.print.
        Aprila con il comando:
        `$ texdoc luatex`
        Saprai così che questa famiglia di funzioni tex.print accettano un primo argomento intero opzionale per individuare la tabella di catcode.
        Questo numero non viene stampato… se la tabella non esiste il numero viene ignorato.
        La soluzione è usare tostring() oppure string.format() per chiamare tex.sprint() con una stringa già dal primo argomento.

        Attento che commetti un errore importante nel definire una funzione senza la keyword local davanti al nome (a parte il fatto che come probabilmente sai nell’aver costruito l’esempio minimo compilabile, non vi è alcun bisogno di definire una funzione per quello scopo).
        In quel modo ogni volta dopo la prima che chiami la macro \lbs, la stessa funzione viene assegnata alla stessa variabile.
        Un errore importante non perché ciò impedisce la compilazione o la rallenti impercettibilmente, ma perché è fonte di guai.

        Happy LuaTeXing!
        R.

      • #113810
        Up
        0
        Down
        ::


        Grazie mille per la risposta, saresti così gentile da spiegarmi come procederesti nel mio caso? Ho provato a guardare un po’ in giro (compreso in texdoc luatex) ma sono ancora poco in chiaro su come far funzionare il tutto…

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


          Ciao,
          non conosco le tue necessità. Se vuoi solo applicare un fattore a un numero potresti eliminare la definizione della funzione così:
          `\newcommand{\lbs}[1]{\directlua{
          local lbs = #1;
          local factor = 0.453592
          local res = factor * lbs
          tex.sprint(string.format(string.char(37)..[[0.0f]], res))
          }}`

          L’uso di string.format è più corretto rispetto a math.floor perché approssima all’intero più vicino con il formato “%0.0f”.
          Se desideri inserire l’unità di misura puoi usare il pacchetto siunitx oppure:
          `\newcommand{\lbs}[1]{\directlua{
          local lbs = #1;
          local factor = 0.453592
          local res = factor * lbs
          tex.sprint(string.format(string.char(37)..[[0.0f]], res))
          } kg}`

          R.

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

      Go to top