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