Problema com sintaxe sobre chaves na tabela lua

Problema com sintaxe sobre chaves na tabela lua

Eu uso uma tabela z={}: as chaves são nomes de pontos e os valores estão nas minhas coordenadas de exemplo.

Exemplo: z.a = {0,1}prefiro esta notação a essa z[a]. Tento manter a sintaxe o mais simples possível sabendo que no final as chaves se tornarão nomes de coordenadas no TikZ.

Portanto, não testei z.O_0 = {0,0}nenhum problema no momento, exceto um pouco mais tarde.

Então com o Tikz é possível usar arquivos a'. Depois de ler a documentação, percebi que não poderia usar a sintaxe do sugar com o ., também testei z["a'"]. Isso é correto, mas doloroso de escrever. Novo teste ap = "a'"e como eu esperava z[ap]é aceito mas surpresa z.aptambém.

- Primeira pergunta: Por que é z.apaceito? aptem tipo "string" mas aqui é uma variável?

Agora para simplificar a sintaxe novamente tentei a = z.a b=z.b ap = z[ap] c_a = z.c_ae bp = z.bpcom sucesso. Isso parece lógico porque aponta para a mesma tabela.

- Segunda pergunta: eu gostaria de usar uma função para isoobter todas as igualdades de uma vez.

Eu tentei algo como:

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

mas não encontrei uma solução.

Último problema quando quis testar o armazenamento das coordenadas. Não vi esse problema antes porque o código foi injetado no código TikZ, mas neste caso você pode usar _nos nomes das coordenadas ou dos nós. Ao simplificar o código para fazer minha pergunta vi que tinha que usar $$para exibir algo parecido c_amas agora estou com um problema para usar $$no tex.print.

Eu costumava z.c_a=niltirá-lo do circuito

- Última pergunta: como imprimir todas as chaves do arquivo for loop. Não posso usar \\_como antes.

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

insira a descrição da imagem aqui

Responder1

O site funciona melhor com uma pergunta por pergunta :-) Mas para destacar o que considero ser a principal confusão;

bp = z.bp

Não há relação entre o bp. A primeira é a variável bp, mas z.bpé um açúcar sintático, pois z["bp"]acessa a entrada da tabela com key bp.

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

Você não pode atribuir nada a uma string literal, então não importa o que você coloque depois do=

Vi que precisava usar $$ para exibir algo como c_a

Somente se você quiser exibir isso como um subscrito matemático. Aqui você quer apenas c_aum nome de variável, então use \texttt{\detokenize{c_a}}ou similar.

Segunda pergunta: gostaria de usar uma função como iso para obter todas as igualdades de uma vez.

Não consegui ver o que você queria aqui.

informação relacionada