我为什么应该对 Lua 感兴趣?

我为什么应该对 Lua 感兴趣?

自从我熟悉 TeX 以来,我一直在使用 LuaLaTex,因为它可以轻松使用系统字体,而这正是我真正需要的。TeX 中的字体包并不是俄语的朋友,尽管它们是俄语的朋友Lua

我在这里找到了一些例子:您可以使用 LuaTeX 做什么的简单示例是什么?,但我还是不完全明白可以Lua做什么。

因此,我的问题如下:

  • Lua专门为 TeX 设计的,还是仅仅是一种可以用 TeX 实现的编程语言?答:它只是一种编程语言,并不特定于 TeX。
  • 它如何在排版中使用?它能以某种方式替代任何包吗?
  • 它是否依赖于操作系统,即在 Windows 上使用它时是否有任何特殊之处?
  • 它能处理非拉丁字符吗?答案:是的。

答案1

您除其他外还询问:

[Lua] 在排版中可以做什么?它可以替代任何软件包吗?

  • 有些排版任务只能在 LuaTeX 中实现,而不能在 pdfTeX 或 XeTeX 中实现。我们开始看到越来越多的软件包要求LuaLaTeX 来实现其目标;这些包根本就不可能用 pdfLaTeX 或 XeLaTeX 编写。示例是showhyphensselnolig包。(完全披露:我是该包的主要作者selnolig。)

  • 与 pdfLaTeX 或 XeLaTeX 相比,LuaLaTeX 可以更轻松地(或至少无需更多工作)完成某些排版任务。例如,比较以下两个代码块(来自帖子tex 中的算术临时变量)。在这两种情况下,宏都\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 代码以及 LuaTeX 中内置的 Lua 与 TeX 之间的清晰接口来编写一些非平凡的排版任务要容易得多。

答案2

Lua 是一种编程语言,设计用于在小型易于嵌入的虚拟机(例如比 Java JVM 小得多)中运行,因此非常适合嵌入到其他系统中(例如,它被用作多种游戏的配置语言)。

因此它不是由 luatex 人员开发的(事实上 Lua 本身目前至少是 5.3 版本,领先于 luatex 附带的 Lua 5.2 版本),而是被选为合适的扩展语言。

它可以用来重新实现几个内置的 TeX 算法

它或多或少独立于操作系统

是的,正如你在 Luatex 中看到的,它可以处理 Unicode 字体和 Unicode 字符串(Unicode 字符串以 UTF-8 编码形式显示,因此单个单位是一个字节而不是一个字符)

答案3

作为 LuaLaTeX 功能的一个示例,我创建了一个脚本,可自动将 CSV 数据转换为 LaTeX 表格或矩阵格式。这对于实验报告非常有用,因为用户不再需要担心手动更新 TeX 文件中的数据或模拟结果。

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

相关内容