PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Luacode - Abfrage ob Variable existiert



MC3330
03-04-2020, 17:53
Hallo,

ich möchte bei Luacode realisieren, dass einer Variable ein Wert nur zugeordnet wird, wenn sie nicht existiert. Dabei beinhaltet der Variablenname einen Latexcounter. Ich habe es hinbekommen, dass der Variablennamen einen Counter enthält (siehe Beispiel 1 im MB). Ich habe es auch hinbekommen, dass ich einen Wert nur zuweise, wenn die Variable vorher nicht existiert (Beispiel 2). Ich kriege es aber nicht hin die Abfrage durchzuführen, wenn ihm Variablenname ein Counter ist. Beim dritten Beispiel ergibt \directlua{tex.print(a\thelua)} bei mir den Wert 1 und nicht 5 oder 8. Demzufolge scheint da irgendein Fehler vorzuliegen.


Ich habe leider auch noch nicht rausgefunden, wo ich Lua-Fehlermeldungen in Latex sehen kann.

Hat jemand eine Idee, was hier der Fehler ist.

Viele Grüße

MB



\documentclass{scrartcl}
\usepackage{luacode}


\begin{document}
\newcounter{lua}

\textbf{Beispiel 1:}\\
\directlua{
a\thelua=\thelua
}
thelua:\directlua{tex.print(a\thelua)} \\
\stepcounter{lua}
thelua:\directlua{tex.print(a\thelua)} \\
\setcounter{lua}{0}
thelua:\directlua{tex.print(a\thelua)} \\\\

\textbf{Beispiel 2:}\\
\directlua{
a= 1
if a then
a = 5
end
}
thelua:\directlua{tex.print(a)} \\\\

\textbf{Beispiel 2:}\\
\directlua{
a\thelua= 1
}
\directlua{
if a\thelua then
a\thelua = 5
end
}
\directlua{
if not a\thelua then
a\thelua = 8
end
}

thelua:\directlua{tex.print(a\thelua)}

\end{document}

rais
05-04-2020, 10:50
ich weiß ja nicht, wie es bei \directlua mit der Expansion von LateX-Befehlen konkret abläuft, aber im Text würde aus
`if a\thelua then' z.B. `if a0then'. Kann also durchaus sein, daß `then' gar nicht als solches ankommt.
An Deiner Stelle würde ich auf nil testen, etwa


\documentclass{scrartcl}
\usepackage{luacode}


\begin{document}
\newcounter{lua}

\textbf{Beispiel 3:}\\
\directlua{
a\thelua= 1
}
%\stepcounter{lua}
\directlua{
if a\thelua == nil then
a\thelua = 8
else
a\thelua = 5
end
}

thelua (\thelua):\directlua{tex.print(a\thelua)}

\end{document}

Wenn Du hier den \stepcounter einkommentierst, bekommst Du Deine 8.

BTW: wenn Du über die Konsole lualatex laufen lässt, bekommst Du da auch etwaige Fehlermeldungen von Lua zu sehen (bzw. -interaction=errorstopmode)

VG

MC3330
05-04-2020, 22:43
Da klappt, perfekt danke.

Wenn du von der Konsole redest, dann meinst du vermutlich Unix?

Ich habe einen Mac und benutzte Textmate. Dann gehe ich vermutlich mal in Macforum um zu fragen, wie es am Mac geht.

rais
06-04-2020, 08:50
Wenn du von der Konsole redest, dann meinst du vermutlich Unix?

nicht wirklich. Gemeint ist eine Eingabeaufforderung, unter MAC nennt sich das Teil auch Terminal.

Ich kenne Textmate nicht, aber wenn es irgendwo die Ausgabe vom (Lua)LaTeX-Lauf mit anzeigt, dann kannst Du auch schauen, ob Du Textmate dazu bewegt bekommst, statt -interaction=nonstopmode (<-vermute ich mal) -interaction=errorstopmode an luaLaTeX zu übergeben, dann hält LuaLaTeX bei Fehler(n) an und Du kannst Dir die Fehlermeldung in Ruhe durchlesen (dann brauchst Du auch nicht via Terminal zu kompilieren).

VG