Почему мне должен быть интересен Lua?

Почему мне должен быть интересен Lua?

Я использую LuaLaTex с тех пор, как познакомился с TeX, потому что он легко работает с системными шрифтами, которые мне очень нужны. Пакеты шрифтов в TeX не являются друзьями русского языка, хотя они и являются друзьями языка Lua.

Я нашел несколько примеров здесь:Приведите простой пример того, что можно сделать с помощью LuaTeX?, но я все еще не до конца понимаю, что можно Luaсделать.

Итак, мои вопросы следующие:

  • Был ли он Luaспециально разработан для TeX или это просто язык программирования, который можно реализовать в TeX?Ответ: Это всего лишь язык программирования, не специфичный для TeX.
  • Как его можно использовать при наборе? Может ли он как-то заменить какие-либо пакеты?
  • Зависит ли это от ОС, т.е. есть ли какие-либо особенности при использовании в Windows?
  • Может ли он работать с нелатинскими символами?Ответ: ДА.

решение1

Вы спросили, среди прочего:

Для чего можно использовать [Lua] при наборе текста? Может ли он как-то заменить какие-либо пакеты?

  • Некоторые задачи по набору текста можно выполнить только в LuaTeX, но не в pdfTeX или XeTeX. Мы начинаем видеть все больше и больше пакетов, которыетребоватьLuaLaTeX для достижения своих целей; эти пакеты просто не могли быть написаны в pdfLaTeX или XeLaTeX. Примерами являются пакеты showhyphensи selnolig. (Полное раскрытие информации: я являюсь основным автором пакета selnolig.)

  • Некоторые задачи по набору текста можно выполнить проще (или, по крайней мере, без дополнительных усилий) в LuaLaTeX, чем в pdfLaTeX или XeLaTeX. Сравните, например, следующие два фрагмента кода (из постингаАрифметические временные элементы в тексе). В обоих случаях макрос \StrMidслужит для извлечения подстроки из строки:

    \usepackage{luacode} % for "\luastring" macro
    \newcommand\StrMid[3]{\directlua{tex.sprint(string.sub(\luastring{#1},#2,#3))}}
    

    против

    \usepackage{xparse}
    \ExplSyntaxOn
    \NewExpandableDocumentCommand{\StrMid}{mmm}
     {
      \tl_map_function:fN { \tl_range:onn { #1 } { #2 } { #3 } } \use:n
     }
    \cs_generate_variant:Nn \tl_map_function:nN { f }
    \cs_generate_variant:Nn \tl_range:nnn { o }
    \ExplSyntaxOff
    

    Сравнивая эти два фрагмента кода, я, конечно, не хочу унизить автора кода LaTeX3. Вовсе нет! Я просто хочу показать, что некоторые задачи можно довольно легко выполнить, если хоть немного знать Lua. Это особенно верно, когда дело касается манипуляций со строками, поскольку Lua предоставляет довольно много мощных функций для работы со строками.

  • Если вы привыкли работать с современным языком программирования, но так и не освоили все тонкости языка макрорасширений (я сам должен признать себя виновным хотя бы по этому обвинению...), вам, вероятно, будет гораздо проще программировать некоторые нетривиальные задачи по набору текста, используя код Lua и понятный интерфейс между Lua и TeX, встроенный в LuaTeX.

решение2

Lua — это язык программирования, разработанный для работы на небольшой, легко встраиваемой виртуальной машине (гораздо меньше, чем, например, Java JVM), и поэтому идеально подходящий для встраивания в другие системы (например, он используется в качестве языка конфигурации для нескольких игр).

Таким образом, он не был разработан разработчиками luatex (на самом деле, Lua в настоящее время имеет версию не ниже 5.3, опережая версию Lua 5.2, поставляемую с luatex), а был выбран в качестве подходящего языка расширения.

Его можно использовать для повторной реализации нескольких встроенных алгоритмов TeX.

Это более или менее не зависит от ОС

Да, как вы видите в Luatex, он может обрабатывать шрифты Unicode и строки Unicode (строки Unicode представлены в кодировке UTF-8, поэтому единицей измерения является байт, а не символ).

решение3

В качестве примера того, что можно сделать с LuaLaTeX, я создал скрипт, который автоматически преобразует данные CSV в табличный или матричный формат LaTeX. Это весьма полезно для лабораторных отчетов, поскольку пользователю больше не нужно беспокоиться о ручном обновлении данных или результатов моделирования в файле TeX.

https://gist.github.com/calebreister/8dd7ab503c91dea4dd2c499b9d004231

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