LuaLaTeX

From A-Eskwiki
Jump to: navigation, search


Compilen

Zet eerst je compiler op "PDFLuaLaTeX". In TeXstudio:

- voor een los bestand: Zet bovenaan  % !TeX program = lualatex

- voor alle bestanden: Verander de compiler in 'Build' in 'Options'->'Configure TeXstudio'.

- op commando: Voeg in 'Build' een 'user command' toe, bijvoorbeeld user5:LuaCompile. Selecteer daarachter de moersleutel en kies daar LuaLaTeX en verwijder de 'unkown'. Nu is ALT+SHIFT+F5 een sneltoets om LuaLaTeX te compileren. Voor ALT+SHIFT+F3 gebruik je user3: ipv user5:.

Lua basics

Je begint een stuk Lua in LaTeX met \directlua{}. Met behulp van het luacode package kan dat ook met \begin{luacode} ... \end{luacode}, wat voor lange code handiger is. Het luacode package geeft ook luaexec. Het verschil is wie de prioriteit krijgt qua compileren: eerst LaTeX, dan Lua of andersom. Zo wordt \luaexec niet eerst door LaTeX bekeken dus kun je er \\commando's in gebruiken. In \directlua moet je er dan een \noexpand o.i.d. voor gooien. Commentaar in een stuk lua doe je enkellijns met --commentaar en multilijn met

 --[[ commentaar
 meer commentaar --]] .

Escape Strings

Je schrijft binnen lua code tex output met behulp van tex.print("TEKST"); en gelijksoortig print je een een variabele met tex.print(var). Om in de LaTeX code tekens te krijgen, moet je er in Lua een backslash voor zetten. Zo wordt tex.print("\\euro") gecompileerd naar \euro in LaTeX. Escape strings zijn in ieder geval nodig voor $, \, %, @, waarschijnlijk voor veel meer dingen.

Functies in lua

De volgende code maakt een functie met 2 argumenten (een string en een geheel getal) en print dan zo vaak als het gehele getal de string.

 \begin{luacode}
 
 function printvaak(s, n)
 local i = 1
 while i <= n do
 tex.print(s,"\\newline") --De luacode environment komt uit de luacode package, dus hierin hebben we geen noexpands nodig.
 i = i + 1
 end --while
 end --function
 
 \end{luacode}

Lua functies in LaTeX, en andersom

Gegeven een Lua functie foo(a, b). Dan kunnen we een LaTeX functie maken die foo aanroept, dat kan met:

 \directlua{
   post(#1,#2)
 }

Een voorbeeld is de bovengenoemde printvaak functie, daarbij zouden we kunnen doen: \newcommand{\printvaak}[2]{\directlua{printvaak("#1", #2)}} Om een LaTeX commando te maken dat de tekst (eerste argument) zo vaak print als het tweede argument.

Andersom kunnen we een LaTeX functie bar{a}{b}{c} aanroepen in Lua met behulp van 'format'. Dit kan met:

 tex.print(
   string.format("\\bar{\%s}{\%s}{\%s}",a,b,c)
 )

Meer informatie met formats: https://www.gammon.com.au/scripts/doc.php?lua=string.format

Overig nuttig

Strings samenvoegen gaat met '..', dus "Lua".."LaTeX" wordt "LuaLaTeX"