Lua テーブルのキーに関する構文の問題

Lua テーブルのキーに関する構文の問題

私はテーブルを使用しますz={}。キーはポイントの名前で、値はサンプルの座標です。

例:z.a = {0,1}私はこの表記法を より好みますz[a]。最終的にはキーが TikZ の座標名になることがわかっているので、構文をできるだけシンプルに保つようにしています。

z.O_0 = {0,0}そのため、少し後を除いて、現時点では問題はないことをテストしました。

次に、Tikz を使用すると、 を使用できますa'。ドキュメントを読んだ後、 ではシュガー構文を使用できないことに気付き.、 もテストしました z["a'"]。これは正しいですが、書くのは面倒です。新しいテストap = "a'"と は予想どおりz[ap]受け入れられましたが、驚きz.apもありました。

-- 最初の質問: がz.ap受け入れられるのはなぜですか?apの型は「文字列」ですが、ここでは変数ですか?

ここで、構文をもう一度簡略化しようと試みa = z.a b=z.b ap = z[ap] c_a = z.c_abp = z.bp成功しました。同じテーブルを指しているので、これは論理的であると思われます。

iso-- 2 番目の質問:すべての等式を一度に取得するような 1 つの関数を使用したいと思います。

私は次のようなことを試しました:

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

しかし解決策は見つかりませんでした。

座標の保存をテストしたいときに最後に問題が発生しました。コードが TikZ コードに挿入されていたため、以前はこの問題は発生しませんでしたが、この場合は座標またはノード名で を使用できます。質問をするためにコードを簡略化すると、 のように表示するために_を使用する必要があることがわかりましたが、で使用すると問題が発生します。$$c_a$$tex.print

私はz.c_a=nilループから外れていました

-- 最後の質問: 内のすべてのキーを印刷するにはどうすればいいですか。以前のようにfor loop使用できません。\\_

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

ここに画像の説明を入力してください

答え1

このサイトは、質問ごとに 1 つの質問で最もうまく機能します :-) しかし、私が考える主な混乱点をピックアップすると、

bp = z.bp

の間には関係がありませんbp。最初は変数 bp ですが、z.bpの糖衣構文なのでz["bp"]、キー を持つテーブル エントリにアクセスしますbp

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

文字列リテラルには何も代入できないので、=

c_aのようなものを表示するには$$を使う必要があることがわかりました

それを数式の下付き文字として表示したい場合のみです。ここではc_a変数名としてのみ必要なので、\texttt{\detokenize{c_a}}または同様のものを使用します。

2 番目の質問: iso のような 1 つの関数を使用して、すべての等式を一度に取得したいと思います。

ここで何を望んでいるのか分かりませんでした。

関連情報