Я использую таблицу 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, чтобы получить все равенства одновременно.
Я не понял, что вы хотели здесь сказать.