Проблема с синтаксисом ключей в таблице 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имеет тип "string", но здесь это переменная?

Теперь, чтобы упростить синтаксис снова, я попытался a = z.a b=z.b ap = z[ap] c_a = z.c_aи bp = z.bpс успехом. Это кажется логичным, потому что указывает на ту же таблицу.

-- Второй вопрос: Я хотел бы использовать одну функцию, чтобы isoполучить все равенства сразу.

Я попробовал что-то вроде:

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

Сайт лучше всего работает, когда на каждый вопрос есть свой ответ:-) Но если выделить то, что, по моему мнению, вызывает наибольшее недоумение, то:

bp = z.bp

Там нет никакой связи между bp. Первая — это переменная bp, но z.bpона является синтаксическим сахаром для z["bp"]so обращается к записи таблицы с ключом bp.

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

Вы не можете ничего присвоить строковому литералу, поэтому не имеет значения, что вы поместите после него.=

Я увидел, что мне нужно использовать $$, чтобы отобразить что-то вроде c_a

Только если вы хотите отобразить это как математический индекс. Здесь вы просто хотите c_aкак имя переменной, поэтому используйте \texttt{\detokenize{c_a}}или подобное.

Второй вопрос: я хотел бы использовать одну функцию, например iso, чтобы получить все равенства одновременно.

Я не понял, что вы хотели здесь сказать.

Связанный контент