为什么选择 LuaLaTeX 而不是 XeLaTeX?

为什么选择 LuaLaTeX 而不是 XeLaTeX?

TeX.sX 上已经有一些关于 LuaLaTeX 和 XeLaTeX 之间区别的问题(LuaTeX、ConTeXt 和 XeTeX 之间的区别), 从 XeLaTeX 转换到 LuaLaTeX 时应该注意什么 (从 XeTeX 迁移到 LuaTeX 时需要考虑什么?),以及它们在序言中通常有何不同(经常加载的包:XeLaTeX 和 LuaLaTeX 之间的区别)。

然而,从最终用户的角度来看,我还没有看到任何理由说明为什么要从 XeLaTeX 切换到 LuaLaTeX。也就是说,我读过 LuaLaTeX 使用 Lua 脚本引擎的事实,但这与我这样的最终用户无关,因为我不知道这意味着什么。

然而,我注意到 TeX.sX 上的大多数酷孩子似乎更喜欢 LuaLaTeX 而不是 XeLaTex,我很好奇这些原因是什么,更具体地说,它们是否适用于像我这样的“普通”最终用户。

为了尝试 LuaLaTeX,我用 LuaLaTex 重新编译了我的一份旧短讲义,它们看起来基本一模一样。然而,在它们不同的地方,XeLaTeX 显然给出了更好的结果。以下是我在讲义中找到的一些示例:

XeLaTeX:

在此处输入图片描述

LuaLaTeX:

在此处输入图片描述

\documentclass{article}
\usepackage{fontspec}
\setmainfont
    [
        Path = C:/Windows/Fonts/,
        Extension = .otf,
        UprightFont = LinLibertine_R,
        BoldFont = LinLibertine_RZ,
        ItalicFont = LinLibertine_RI,
        BoldItalicFont = LinLibertine_RZI
    ]{libertine}

\begin{document}
mak\textbf{\underline{a}}t
\textit{wund\textbf{\underline{V\char"0306}}de}
\textit{*wund\textbf{\underline{\char"014D}}d\char"0113}
\end{document}

在第二个和第三个单词中,LuaLaTeX 在带下划线的斜体粗体字符前添加了更多空格。在我看来,它添加的太多了。但是请注意,它没有在第一个单词中添加任何额外的空格,因为该单词中的字符不是斜体。

在第二个单词中,XeLaTeX 很好地处理了组合短音符的位置,但 LuaLaTeX 却没有。这可能是一个令人担忧的问题,因为我通常在文档中使用大量组合字符(这是我的讲义中唯一的例子)。

如果说有什么的话,我目前只看到坚持使用 XeLaTeX 的理由,但我仍然很好奇 LuaLaTeX 相对于 XeLaTeX 是否有优势,这些优势可能会弥补我上面发现的缺点。

答案1

就我个人而言(即从我遇到的轶事情况来看),lua(la)tex它看起来确实比 不稳定xe(la)tex,特别是在一些高级字体功能方面(fontspec毕竟是为xe(la)texfirst 开发的)。这在某种程度上是可以预料到的:xe(la)tex它本身比 更老lua(la)tex,因此可以预期它在错误等方面会更成熟。

我认为它的优点lua(la)tex是:

  • lua(la)tex已被选为 的正式继任者pdf(la)tex,因此您可以期待现在和将来会有更多的开发工作。例如,在 下支持的功能比 在 下要microtype多得多,lua(la)texxe(la)tex
  • lua(la)tex将 TeX 的内部结构开放给 Lua 编程语言。对于最终用户来说,这听起来可能像是一些无关紧要的技术细节,但实际上并非如此,因为这可能会启用一些无法通过其他方式实现的高级包/功能,例如河流检测和大多数其他功能impnattypo
  • lua(la)tex不依赖于系统特定的库,因此理论上您不太容易遇到平台特定的问题或输出差异。

答案2

我同意 Xavier 的前两点。

LuaTeX 相对于 XeTeX 的另一个优势是 LuaTeX 使用 pdfTeX 的 PDF 引擎,而 XeTeX 使用自己的引擎。这样做的结果是,PGF 图形包(TikZ 建立于此)的所有功能也应该在 LuaTeX 下可用,而某些功能在 XeTeX 下肯定不可用。

答案3

由于我是的重度用户tikz/pgf,以下是我一直喜欢的一些关键点lualatex

  • pgfplots最适合lualatex。对于中等大小的csv文件,和pdflatex都会xelatex耗尽内存。
  • TikZgraphdrawing库仅适用于lualatex。布局算法是用 Lua 实现的;它们太复杂而无法在 TeX 中实现。
  • Lua如果您正在做一些非常非标准的事情,访问(虽然我希望它是 python)意味着很多,例如在绘制之前从 csv 中只读取 n 行;用 'Y' 替换 'X',写入文件等。这些都是非标准用例,但它们Lua比使用某些 latex 包处理得更好。

可以肯定地说,你能用 做什么XeLatex,就能用 做什么lualatex,但反过来就不行(请参阅以下评论)。

答案4

切换到 LuaTeX 的一个很好的理由是 XeTeX 不能使用字体私有使用区域中的字形名称。因此,如果您尝试从 pdf 输出中复制来自 PUA 的任何字形,最终都会变成乱码文本。此问题已在小型大写字母、旧式数字和一些连字符会在 PDF 复制文本中产生奇怪的符号吗?使用 XeTeX 的 \pdfglyphtounicode。我不知道这个问题是否有可能得到解决,因为 XeTeX 维护者显然坚持认为字体根本不应该使用 PUA。但只要有许多字符尚未包含在 Unicode 中,字体就需要在 PUA 中添加这些额外的字符。

LuaTeX 似乎没有这个问题。然而,正如 OP 的问题所示,LuaTeX 在字体输出的许多其他方面处理得并不好……

相关内容