MC3330
29-04-2020, 21:36
Hallo,
ich habe verschiedene Kommandos in denen ich in LUA Ergebnisse berechne. Diese Ergebnisse greife ich teilweise in anderen Kommandos wieder auf. Da ich teilweise Kommandos mehrfach verwende, bevor ich die Ergebnisse wieder aufgreife habe ich die Variablen über einen Counter unterscheidbar gemacht. Das klappt auch soweit.
Seit ein paar Tagen klappt es bei einer Funktion leider nicht mehr. Ich habe es jetzt soweit debuggt, dass ich weiß, dass es irgendwie mit der Funktion table.shuffle zusammen hängt. Komischerweise klappt es in dem Fall, wenn die Variable keinen Counter enthält und es klappt nicht, wenn es einen Enthält.
Im MB sieht man, dass die Zuordnung mit Counter auch klappt, bei der Funktion table.shuffle aber irgendwas schief läuft. Eventuell geht es nicht, mit der Übergabe des Counter an die LUA-Funktion.
MB
\documentclass{scrartcl}
\usepackage{luacode}
\begin{luacode}
function table.shuffle(tbl)
local tbl2={}
for i = 1,#tbl,1 do
tbl2[i]= tbl[i]
end
for i = #tbl2, 2, -1 do
local j = math.random(i)
tbl2[i], tbl2[j] = tbl2[j], tbl2[i]
end
return tbl2
end---
\end{luacode}
\newcounter{tableid}
\newcommand\einso[1][]{%//
\directlua{
ergebnisohne={1,2,3,4,5,6,7,8,9,10}
}
}%\\
\newcommand\zweio[1][]{%//
\directlua{
ergebnisohneneu=ergebnisohne
shuffleohne = table.shuffle(ergebnisohneneu)
}
}%\\
\newcommand\einsm[1][]{%//
\directlua{
ergebnismit\thetableid={1,2,3,4,5,6,7,8,9,10}
}
}%\\
\newcommand\zweim[1][]{%//
\directlua{
ergebnismitneu\thetableid=ergebnismit\thetableid
shufflemit\thetableid = table.shuffle(ergebnismitneu\thetableid)
}
}%\\
\newcommand\dreim[1][]{%//
\directlua{
shufflemitohneshuffle\thetableid=ergebnismit\theta bleid
}
}%\\
\begin{document}
\einso
\zweio
\textbf{Ergebnis Ohne ID}\\
ergebnis ohne id: \directlua{tex.print(ergebnisohne)}\\
ergebnis neu ohne id: \directlua{tex.print(ergebnisohneneu)}\\
shuffle ohne id: \directlua{tex.print(shuffleohne)}\\\\
\einsm
\zweim
\dreim
\textbf{Ergebnis mit ID}\\
ergebnis mit id: \directlua{tex.print(ergebnismit\thetableid)}\\
ergebnis neu mit id: \directlua{tex.print(ergebnismitneu\thetableid)}\\
shuffle mit id: \directlua{tex.print(shufflem\thetableid)}\\
ergebnis neu mit id ohne shuffle: \directlua{tex.print(shufflemitohneshuffle\thetabl eid)}
\end{document}
Fehlermeldung
load luc: /Users/malte/Library/texlive/2018/texmf-var/luatex-cache/generic/font
s/otl/lmroman10-bold.luc)[\directlua]:1: unexpected symbol near '='.
\\zweim ...e.shuffle(ergebnismitneu\thetableid ) }
l.58 \dreim
The lua interpreter ran into a problem, so the
remainder of this lua chunk will be ignored.
[\directlua]:1: no string to print
stack traceback:
[C]: in function 'print'
[\directlua]:1: in main chunk.
l.61 ...ectlua{tex.print(ergebnismitneu\thetableid)}
\\
The lua interpreter ran into a problem, so the
remainder of this lua chunk will be ignored.
[\directlua]:1: no string to print
stack traceback:
[C]: in function 'print'
[\directlua]:1: in main chunk.
l.62 ...: \directlua{tex.print(shufflem\thetableid)}
\\
The lua interpreter ran into a problem, so the
remainder of this lua chunk will be ignored.
ich habe verschiedene Kommandos in denen ich in LUA Ergebnisse berechne. Diese Ergebnisse greife ich teilweise in anderen Kommandos wieder auf. Da ich teilweise Kommandos mehrfach verwende, bevor ich die Ergebnisse wieder aufgreife habe ich die Variablen über einen Counter unterscheidbar gemacht. Das klappt auch soweit.
Seit ein paar Tagen klappt es bei einer Funktion leider nicht mehr. Ich habe es jetzt soweit debuggt, dass ich weiß, dass es irgendwie mit der Funktion table.shuffle zusammen hängt. Komischerweise klappt es in dem Fall, wenn die Variable keinen Counter enthält und es klappt nicht, wenn es einen Enthält.
Im MB sieht man, dass die Zuordnung mit Counter auch klappt, bei der Funktion table.shuffle aber irgendwas schief läuft. Eventuell geht es nicht, mit der Übergabe des Counter an die LUA-Funktion.
MB
\documentclass{scrartcl}
\usepackage{luacode}
\begin{luacode}
function table.shuffle(tbl)
local tbl2={}
for i = 1,#tbl,1 do
tbl2[i]= tbl[i]
end
for i = #tbl2, 2, -1 do
local j = math.random(i)
tbl2[i], tbl2[j] = tbl2[j], tbl2[i]
end
return tbl2
end---
\end{luacode}
\newcounter{tableid}
\newcommand\einso[1][]{%//
\directlua{
ergebnisohne={1,2,3,4,5,6,7,8,9,10}
}
}%\\
\newcommand\zweio[1][]{%//
\directlua{
ergebnisohneneu=ergebnisohne
shuffleohne = table.shuffle(ergebnisohneneu)
}
}%\\
\newcommand\einsm[1][]{%//
\directlua{
ergebnismit\thetableid={1,2,3,4,5,6,7,8,9,10}
}
}%\\
\newcommand\zweim[1][]{%//
\directlua{
ergebnismitneu\thetableid=ergebnismit\thetableid
shufflemit\thetableid = table.shuffle(ergebnismitneu\thetableid)
}
}%\\
\newcommand\dreim[1][]{%//
\directlua{
shufflemitohneshuffle\thetableid=ergebnismit\theta bleid
}
}%\\
\begin{document}
\einso
\zweio
\textbf{Ergebnis Ohne ID}\\
ergebnis ohne id: \directlua{tex.print(ergebnisohne)}\\
ergebnis neu ohne id: \directlua{tex.print(ergebnisohneneu)}\\
shuffle ohne id: \directlua{tex.print(shuffleohne)}\\\\
\einsm
\zweim
\dreim
\textbf{Ergebnis mit ID}\\
ergebnis mit id: \directlua{tex.print(ergebnismit\thetableid)}\\
ergebnis neu mit id: \directlua{tex.print(ergebnismitneu\thetableid)}\\
shuffle mit id: \directlua{tex.print(shufflem\thetableid)}\\
ergebnis neu mit id ohne shuffle: \directlua{tex.print(shufflemitohneshuffle\thetabl eid)}
\end{document}
Fehlermeldung
load luc: /Users/malte/Library/texlive/2018/texmf-var/luatex-cache/generic/font
s/otl/lmroman10-bold.luc)[\directlua]:1: unexpected symbol near '='.
\\zweim ...e.shuffle(ergebnismitneu\thetableid ) }
l.58 \dreim
The lua interpreter ran into a problem, so the
remainder of this lua chunk will be ignored.
[\directlua]:1: no string to print
stack traceback:
[C]: in function 'print'
[\directlua]:1: in main chunk.
l.61 ...ectlua{tex.print(ergebnismitneu\thetableid)}
\\
The lua interpreter ran into a problem, so the
remainder of this lua chunk will be ignored.
[\directlua]:1: no string to print
stack traceback:
[C]: in function 'print'
[\directlua]:1: in main chunk.
l.62 ...: \directlua{tex.print(shufflem\thetableid)}
\\
The lua interpreter ran into a problem, so the
remainder of this lua chunk will be ignored.