我為什麼要對 Lua 感興趣?

我為什麼要對 Lua 感興趣?

自從熟悉 TeX 以來,我一直在使用 LuaLaTex,因為它可以輕鬆使用我真正需要的系統字體。 TeX 中的字體包不是俄語的朋​​友,儘管它們是俄語的朋​​友Lua

我在這裡找到了一些例子:可以用 LuaTeX 做些什麼的簡單例子嗎?,但我仍然不完全明白能做什麼Lua

所以,我的問題如下:

  • Lua專門為 TeX 設計的,還是只是一種可以在 TeX 中實現的程式語言?答:它只是一種程式語言,並不是 TeX 特有的。
  • 怎樣才能運用到排版中呢?它可以以某種方式取代任何軟體包嗎?
  • 它是否依賴作業系統,即在 Windows 上使用它時有什麼特殊之處嗎?
  • 它可以與非拉丁字元一起使用嗎?答:是的。

答案1

您除其他外還詢問:

【Lua】可以用來排版做什麼?它可以以某種方式取代任何軟體包嗎?

  • 有些排版任務只能在 LuaTeX 中實現,而不能在 pdfTeX 或 XeTeX 中實現。我們開始看到越來越多的軟體包要求LuaLaTeX 來實現他們的目標;這些包根本不可能用 pdfLaTeX 或 XeLaTeX 編寫。範例是showhyphensselnolig包。 (全面披露:我是該包的主要作者selnolig。)

  • 有些排版任務在 LuaLaTeX 中比在 pdfLaTeX 或 XeLaTeX 中更容易完成(或至少不需要更多工作)。例如,比較以下兩個程式碼區塊(來自發布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

相關內容