PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ergebnisse von LUACode in eigener Datei abspeichern



MC3330
15-05-2020, 06:04
Hallo,

ich benutzte bei LUA-Code häufig Kommandos mit zufallsgenerierte Zahlen, die ich innerhalb eines Dokuments mehrfach verwende. Ich mache es so, dass bei den jeweiligen Variablen erst abgefragt wird ob sie existieren und sie nur im Fall, dass es sie noch nicht gibt, neu berechnet werden.

Das führt aber dazu, dass jedes mal wenn ich das Dokument neu setzte alle Zahlen neu berechnet werden.


Ich suche eine Möglichkeit, dass sich die Daten auch bei neuer Setzung des Dokuments nicht ändern. Ich hatte überlegt, ob es eventuell möglich ist den aktuellen LUA-Datensatz in einer Datei zu speichern, so das die Variablen auch bei neuer Setzung erhalten bleiben.

Kennt da jemand eine Möglichkeit?

Viele Grüße MC



\documentclass{scrartcl}
\usepackage{luacode}
\newcommand\asdf{
\directlua{
if a == nil then
a=math.random(10)
end
}
}
\begin{document}
\asdf
a1:\directlua{tex.print(a)}\\
\asdf
aa2:\directlua{tex.print(a)}\\
\end{document}

rais
17-05-2020, 15:05
Du kannst so etwas versuchen:


\documentclass{scrartcl}
%\usepackage{luacode}
\newcommand*\rndcurrentvar{}
\makeatletter
\newcommand*\getrnd[1]{%
\@nameuse{rnd@var@#1}%
}
\newcommand*\asdf[1][a]{%
\edef\rndcurrentvar{#1}
\@ifundefined{rnd@var@#1}{%
\directlua{
if \rndcurrentvar == nil then
\rndcurrentvar = math.random(10)
end
}
\@namedef{rnd@var@#1}{\directlua{tex.print(\rndcur rentvar)}}%
}{}
\write\@mainaux{\string\global\string\@namedef{rnd @var@#1}{\getrnd{#1}}}%
}
\makeatother
\begin{document}
\asdf
a1:\getrnd{a}\\
\asdf
aa2:\getrnd{a}\\
\end{document}

Das kommt sogar ohne extra-Datei aus;-)
Wenn die Zahlen dann doch mal wieder neu berechnet werden sollen, brauchst Du hier nur vor einem LuaLaTeX-Lauf die .aux zu löschen.

VG

MC3330
17-05-2020, 15:21
Danke, du hast echt immer eine Antwort. Ich schau gleich mal, ob ich das bei mir implementiert bekomme.