Anzeige:
Ergebnis 1 bis 4 von 4

Thema: Luacode - Abfrage ob Variable existiert

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

    Luacode - Abfrage ob Variable existiert

    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

    Code:
    \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}

  2. #2
    Registrierter Benutzer Avatar von rais
    Registriert seit
    18.07.2005
    Beiträge
    5.859
    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
    Code:
    \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
    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
    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.

  4. #4
    Registrierter Benutzer Avatar von rais
    Registriert seit
    18.07.2005
    Beiträge
    5.859
    Zitat Zitat von swizz Beitrag anzeigen
    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
    Rainer
    There's nothing a good whack with a hammer won't fix!

Lesezeichen

Berechtigungen

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