- Questo topic ha 4 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 8 anni, 9 mesi fa da .
-
Topic
-
Ciao.
Vi sottopongo alcune domande su questo codice:
`% !TeX program = LuaTeXw%
\begingroup
\endlinechar=10\relax\directlua{%
local s = [[
12
3
4
5]]
print[[ciao]]local t = 0
for line in string.gmatch(s, [[(.-)]]..string.char(10)) do
t = t+1
print(line)
end
print(t)
print[[ciao]]
}\endgroup%
w\bye`
In console vedrete stampato:
`This is LuaTeX, Version 1.0.4 (TeX Live 2017/W32TeX)
restricted system commands enabled.
(./r.texciao
12
3
4
58
ciao
[1{c:/texlive/2017/texmf-var/fonts/map/pdftex/updmap/pdftex.map}])
Output written on r.pdf (1 page, 8448 bytes).
SyncTeX written on r.synctex.gz.
Transcript written on r.log.
`Lo scopo del codice è poter leggere una stringa all’interno del sorgente e separarla nelle singole linee.
Il codice funziona, il ciclo for itera correttamente su tutte le linee della stringa s, anche quelle vuote.
Infatti il contatore vale alla fine 8.
Senza la correzione dell’endlinechar invece non funziona perché la macro \directlua espande completamente il suo contenuto prima di passarlo a Lua, perciò la stringa s non ha più i caratteri fine riga.Come mai funziona solamente con il numero 10?
R.
- Devi essere connesso per rispondere a questo topic.