Anzeige:
Ergebnis 1 bis 3 von 3

Thema: Problem bei LUA-Variablen

  1. #1
    Registrierter Benutzer
    Registriert seit
    12.11.2008
    Beiträge
    219

    Problem bei LUA-Variablen

    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

    Code:
    \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\thetableid
    	}
    }%\\
    
    
    
    
    
    \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\thetableid)}
    
    \end{document}
    Fehlermeldung
    Code:
    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.

  2. #2
    Registrierter Benutzer Avatar von rais
    Registriert seit
    18.07.2005
    Beiträge
    5.859
    \directlua mag es wohl nicht, wenn eine Zeile auf einem LaTeX-Makro endet (hier \thetableid) und in der nächsten Zeile noch was geschehen soll.
    Ändere
    Code:
    \newcommand\zweim[1][]{%//
    	\directlua{
    		ergebnismitneu\thetableid=ergebnismit\thetableid
    		shufflemit\thetableid = table.shuffle(ergebnismitneu\thetableid)
    	}
    }%\\
    zu
    Code:
    \newcommand\zweim[1][]{%//
    	\directlua{
    		ergebnismitneu\thetableid=ergebnismit\thetableid;
    		shufflemit\thetableid = table.shuffle(ergebnismitneu\thetableid)
    	}
    }%\\
    Damit das Ergebnis auch angezeigt wird, ändere zusätzlich
    Code:
    shuffle mit id: \directlua{tex.print(shufflem\thetableid)}\\
    zu
    Code:
    shuffle mit id: \directlua{tex.print(shufflemit\thetableid)}\\
    dann sollte es fehlerfrei durchlaufen.
    Wozu Du allerdings Deine Makros mit optionalen Parametern definierst, die Du dann doch nicht verwendest...

    VG
    Rainer
    There's nothing a good whack with a hammer won't fix!

  3. #3
    Registrierter Benutzer
    Registriert seit
    12.11.2008
    Beiträge
    219
    Super vielen Dank. Eigentlich benutzt ich die optionalen Parameter, ich habe es nur für das Minimalbeispiel soweit zusammen gekürzt, dass das nicht mehr vorkommt. Das ist dann im Minimalbeispiel übrig geblieben.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •