Problem mit der Syntax bezüglich Schlüsseln in der Lua-Tabelle

Problem mit der Syntax bezüglich Schlüsseln in der Lua-Tabelle

Ich verwende eine Tabelle z={}: Die Schlüssel sind Namen von Punkten und die Werte liegen in meinen Beispielkoordinaten.

Beispiel: z.a = {0,1}Ich bevorzuge diese Notation gegenüber der anderen z[a]. Ich versuche, die Syntax so einfach wie möglich zu halten, da ich weiß, dass die Schlüssel letztendlich zu Koordinatennamen in TikZ werden.

Ich habe also z.O_0 = {0,0}im Moment kein Problem beim Testen festgestellt, außer etwas später.

Dann ist es mit Tikz möglich, zu verwenden a'. Nachdem ich die Dokumentation gelesen hatte, wurde mir klar, dass ich die Sugar-Syntax nicht mit verwenden konnte ., außerdem habe ich getestet z["a'"]. Das ist richtig, aber mühsam zu schreiben. Neuer Test ap = "a'"und wie erwartet z[ap]wird es akzeptiert, aber z.apauch Überraschung.

- Erste Frage: Warum wird es z.apakzeptiert? apEs hat den Typ „String“, ist hier aber eine Variable?

Nun habe ich versucht, die Syntax noch einmal zu vereinfachen, a = z.a b=z.b ap = z[ap] c_a = z.c_aund bp = z.bpdas mit Erfolg. Das erscheint logisch, da es auf dieselbe Tabelle verweist.

- Zweite Frage: Ich möchte eine Funktion verwenden, um isoalle Gleichungen auf einmal zu erhalten.

Ich habe so etwas versucht:

for k,v in pairs(z) do
   k = ...
end

aber ich habe keine Lösung gefunden.

Letztes Problem, als ich die Speicherung der Koordinaten testen wollte. Ich habe dieses Problem vorher nicht gesehen, weil der Code in TikZ-Code eingefügt wurde, aber in diesem Fall können Sie _die Koordinaten- oder Knotennamen verwenden. Als ich den Code vereinfachte, um meine Frage zu stellen, sah ich, dass ich verwenden musste, $$um etwas wie anzuzeigen, c_aaber jetzt habe ich ein Problem mit der Verwendung $$in tex.print.

Früher habe ich z.c_a=niles aus der Schleife bekommen

- Letzte Frage: Wie drucke ich alle Schlüssel im for loop? Ich kann es nicht mehr so ​​verwenden \\_wie vorher.

\documentclass{article}
\usepackage{luacode}

\begin{document}
\parindent = 0pt
\begin{luacode}
tp=tex.print
z = {}
z.a = {5,2}
z.b = {3,-2}
z.c_a = {3,2}

ap = "a'"
bp = "b'"

tex.print("type of ap is :".. type(ap)) -- > string
tex.print('\\\\')

z[ap] = {99,0}   -- z."a'" = {1,1} -- > error it's ok
z.bp = {66,55} -- 
tex.print("x coordinate for z[ap] is ".. z[ap][1])
tex.print('\\\\')
tex.print("x coordinate for z.bp= \\{66,0\\} is ".. "z.bp[1] = " ..z.bp[1])
tex.print('\\\\')


bp = z.bp --  but  "a'" = z["a'"] is not possible
--tex.print(" ap works like :" .. z[ap][1])
tex.print('\\\\')

tp("Sugar syntax : a=z.a b=z.b ap =z[ap] bp=z.bp")
a=z.a
b=z.b
bp = z.bp
ap = z[ap]
c_a = z.c_a

tex.print('\\\\')
tp("Test with sugar syntax :"..'\\\\')
tp("y coordinate for a[2] is ".. "a[2]= "..a[2]) 
tp('\\\\')
tp("y coordinate for ap[2] is ".. "ap[2]= "..ap[2])
tp('\\\\')
tp("y coordinate with bp[2]= "..bp[2]) 
tp('\\\\')
tp("y coordinate with c\\_a[1]= "..c_a[1]) 
tp('\\\\')

tex.print("The stored coordinates are : "..'\\\\')
z.c_a = nil. -- when `k=c_a` $$ are required but `$k$`does not work
for k,v in pairs(z) do
   tp(k) tp(tostring(" represents :")) tp(tostring("(" .. v[1]..","..v[2]..")"))
  tex.print('\\\\')
end     
\end{luacode}
\end{document}

Bildbeschreibung hier eingeben

Antwort1

Die Site funktioniert am besten mit einer Frage pro Frage :-) Aber um das herauszupicken, was meiner Meinung nach die größte Verwirrung ausmacht:

bp = z.bp

Es besteht keine Beziehung zwischen den bp. Die erste ist die Variable bp, z.bpist aber syntaktischer Zucker für , z["bp"]greift also auf den Tabelleneintrag mit dem Schlüssel zu bp.

"a'" = z["a'"] is not possible

Sie können einem Stringliteral nichts zuweisen, daher ist es egal, was Sie nach dem=

Ich sah, dass ich $$ verwenden musste, um etwas wie c_a anzuzeigen

Nur wenn du das als mathematischen Index anzeigen möchtest. Hier möchtest du einfach c_aals Variablennamen, also verwende \texttt{\detokenize{c_a}}oder ähnlich.

Zweite Frage: Ich möchte eine Funktion wie iso verwenden, um alle Gleichungen auf einmal zu erhalten.

Ich konnte nicht erkennen, was Sie hier wollten.

verwandte Informationen