Re: Introduzione a LuaLaTeX

#55097
robitex
Amministratore del forum
    Up
    0
    Down
    ::

    Da notare che in Lua un carattere può essere espresso anche in formato ascii.

    Ho provato con \luaexec ma non ci sono riuscito. L’esempio di cui sotto, potresti adattarlo per un numero in 3 o 4 cifre significative?
    `\documentclass{article}
    \usepackage{amsmath,ar}
    \newcommand{\ARvalue}[2]{%
    \directlua{
    b=#1
    S=#2
    AR=b^2/S
    tex.sprint(AR)
    }
    }
    \begin{document}
    [\ldots] considerando una apertura alare di $b=10$~m si ha
    \[
    \AR=\dfrac{b^2}{S}=\ARvalue{10}{9}
    \]
    pertanto [\ldots]
    \end{document}`

    Ciao,
    ansys.

    Ciao,
    ci sono due soluzioni: la prima è interamente interna al codice Lua, dove il numero è prima arrotondato a due cifre (numero passato come opzione al comando modificato), e poi formattato a due cifre con la funzione string.format() che deriva dalla sintassi di printf del C (naturalmente nel codice bisognerebbe scrivere anche una serie di controlli sui dati di input che ho omesso):
    `
    \documentclass{article}
    \usepackage{amsmath,ar}
    \newcommand{\calcARvalue}[3][2]{\directlua{
    % ricordati di premettere local alle variabili
    % che spariscono alla chiusura del comando
    local b=#2
    local S=#3
    local AR=b^2/S

    % arrotondamento
    local tenpower = tonumber(#1)
    local posdec = 10^tenpower
    local AR = math.floor(AR*posdec)/posdec

    % formattazione di uscita del risultato
    local frmt = “\string\037.” ..tostring(tenpower)..”f”
    tex.sprint(string.format(frmt,AR))
    }
    }
    \begin{document}
    [\ldots] considerando una apertura alare di $b=10$~m si ha
    \[
    \AR=\dfrac{b^2}{S}=\calcARvalue{10}{9}
    \]

    pertanto [\ldots]

    se tuttavia variamo il numero di cifre significative del calcolo si ottiene:
    \[
    \AR=\dfrac{b^2}{S}=\calcARvalue[4]{10}{9}
    \]

    pertanto [\ldots]
    \end{document}`

    Oppure, possiamo far eseguire al pacchetto siuntix il lavoro, esternamente al codice Lua (naturalmente preferisco la prima soluzione poiché l’arrotondamento è gestito dal calcolo).
    In questo caso ci si può scontrare con le capacità di calcolo di TeX. Prova il seguente codice:
    `
    \documentclass{article}
    \usepackage{siunitx}
    \usepackage{amsmath,ar}

    \sisetup{output-decimal-marker={,}}

    \newcommand{\calcARvalue}[3][2]{\directlua{
    local b=#2
    local S=#3
    local AR=b^2/S
    AR = math.floor(AR*10^8)/10^8

    local bs = “\string\\” % backslash char
    tex.sprint(bs..”num[round-mode=places,round-precision=#1]{“..AR..”}”)
    }
    }
    \begin{document}
    [\ldots] considerando una apertura alare di $b=10$~m si ha
    \[
    \AR=\dfrac{b^2}{S}=\calcARvalue{10}{9}
    \]

    pertanto [\ldots]

    se tuttavia variamo il numero di cifre significative del calcolo si ottiene:
    \[
    \AR=\dfrac{b^2}{S}=\calcARvalue[4]{10}{9}
    \]

    pertanto [\ldots]
    \end{document}`
    …dovrebbe funzionare ma il numero il virgola mobile ha troppi decimali e produce un errore di “Number too big!”, così è necessario introdurre un arrotondamento “forzato” all’ottava cifra decimale, e passare il numero a siunitx.

    La prima soluzione si può comunque adattare per l’uso con siunitx in modo da rappresentare i valori numerici con unità di misura.
    Occorre però controllare che il numero di decimali di arrotondamento non superi il valore di 8,10.

    Bye

    Go to top