Osservate il seguente codice LuaLaTeX:
`\documentclass{article}
\def\calcmod{%
\directlua{
local function mod(n,m)
return n – m*math.floor(n/m)
endtex.sprint(mod(10,3))
}%
}\begin{document}
Il modulo 10 \% 3 fa \calcmod.
\end{document}`si tratta di una funzione modulo (resto della divisione intera), che funziona perfettamente (per provarlo compilate con il programma lualatex).
Se invece si vuole utilizzare l’operatore modulo di Lua 5.1 lo stesso codice diviene molto più semplice: l’operazione si scrive infatti semplicemente 10 % 3. Ecco il codice:
`\documentclass{article}
\def\calcmod{%
\directlua{
tex.sprint(10 \% 3)
}%
}\begin{document}
Il modulo 10 \% 3 fa \calcmod.
\end{document}`Alla lettura del codice Lua interno a \directlua vengono dapprima interpretate le macro. Non si può quindi lasciare un simbolo percento perché verrebbe interpretato come simbolo di commento producendo un codice Lua non corretto. Allora si inserisce il simbolo come macro a singolo carattere per inserire il token % nel codice (ricordate la manciata di caratteri “riservati” di TeX?).
Tuttavia il codice non funziona. L’errore in compilazione è una mancanza di parentesi tonda nel codice Lua.
Invece, se inseriamo lo stesso simbolo del \% in una stringa Lua, tutto torna a funzionare:`\documentclass{article}
\def\pigreco#1{%
\directlua{
tex.sprint(string.format(“\%0.#1f”,math.pi))
}%
}\begin{document}
Il numero \(\pi\) arrotondato a 5 cifre decimali fa \pigreco{5}.Con 6 cifre diventa: \pigreco{6}.
\end{document}`Niente, volevo solo farvelo notare, anche perché capita di dover inserire il carattere % all’interno di \directlua, ma come si è visto, il comodo trucco di \% funziona solo se la sua espansione si trova all’interno di una stringa Lua.
Ciao
`\documentclass{article}
\usepackage{luacode}
\def\calcmod{%
\luaexec{
tex.sprint(10 \% 3)
}%
}
\begin{document}
Il modulo $10 \mathbin{\%} 3$ fa \calcmod.
\end{document}`
Ciao
Enrico