使用 LuaTeX 替代 pdfTeX

使用 LuaTeX 替代 pdfTeX

在这个问题中LuaTeX、ConTeXt 和 XeTeX 之间的区别讨论了 LuaTeX 和 XeTeX(以及 ConTeXt)之间的各种差异。在这个问题中使用 XeLaTeX 代替 pdfLaTeX给出了从 pdfLaTeX 切换到 XeLaTeX 的方法。在这个问题中,我想要一个使用 LuaLaTeX 的类似方法。我特别感兴趣的是 LuaTeX 可以作为 pdfTeX 的替代品使用到何种程度。我不是对 LuaTeX 能做到而 pdfTeX 做不到的事情感兴趣。

所以问题是:

我该怎么办需要如何使用 LuaLaTeX 而不是 pdfLaTeX 来编译现有或新文档?

一些具体的子问题:

  1. 哪些软件包与 pdfLaTeX 兼容,但是不是使用 LuaLaTeX 吗?
  2. 是否有任何特定于 LuaLaTeX 的软件包应该在大多数 LuaLateX 文档中加载?

答案1

我认为我们不需要做太多。我知道的唯一不兼容的事情就是UTF-8编码。

回答子问题:

  1. 任何与输入编码和字体编码相关的包:

    • inputenc。您应该始终使用UTF-8编码来输入文本。为了向后兼容,请使用luainputenc
    • fontenc。不要fontspec明确地使用它。
    • textcomp. 改用xunicode,它由 加载fontspec
    • 大多数旧的字体包(尤其是文本最好不要使用 、 或 字体。例如,使用XITSTeX Gyre TermesLinux Libertine O字体fontspec代替包,并将 Unicode 字体与和(仅限字体数学字体)times一起用于正文,以获得正确的文本字体。mathptmxtxfonts
    • CJK与 LuaTeX 不兼容。目前,只有韩国和日本有少数非官方的 LaTeX 软件包可用。这对西方用户来说可能不是很重要。
  2. fontspec。加载 TrueType/OpenType 字体。我认为这是唯一必要的。此外,luacode和也unicode-math很有用。

答案2

您需要考虑的一件事是:

如果你正在使用(直接或间接)pdftex原语(例如,\pdffilemoddate参见pdftex手册)与 LuaLaTeX,那么你需要加载 Heiko Oberdiek 的pdftexcmds软件包添加了 LuaTeX 中目前缺少的所有这些命令。但是,这些命令是以宏而不是原语的形式提供的,因此不会 100% 以相同的方式做出反应。例如,\pdffilemoddate需要多一个扩展步骤。我相应地对我的filemod软件包进行了编程,以便为 LuaLaTeX 自动加载它,但其他软件包可能不会如此严格地检查这些命令。

我认为这对于大多数文件来说不是一个大问题,但绝对值得一提。

答案3

来自前线:

我在 2013 年中期改用 LuaLaTeX,因为我想要 TTF 字体。我严格使用 *TeX,通过一个已经发展了 20 年(如果没记错的话,实际上是 22 年)的 Makefile。

为了实现这一转变,我最终将框架的所有文件都转换为 UTF8,并改为仅使用 UTF8。当然,我首先将 Makefile 改为使用lualatex而不是pdftex

为了使其发挥作用,我必须添加:

\RequirePackage{ifluatex}
\ifluatex
   \PassOptionsToPackage{usenames,dvipsnames}{color}
   \RequirePackage{fontspec} % will load color
   \RequirePackage[latin1]{luainputenc}
\else
   \RequirePackage[latin1]{inputenc}
   \RequirePackage{times}
\fi

然后当然是字体:

\ifluatex
   \setmainfont[%
           UprightFont = *-regular,
           BoldFont    = *-bold,
           ItalicFont  = *-italic,
           BoldItalicFont  = LMRoman10-Bolditalic,
           SmallCapsFont = lmromancaps10-regular,
           SmallCapsFeatures = {Scale=MatchUppercase},
           SlantedFont = LMRomanslant12-Regular,
           BoldSlantedFont = LMRomanslant10-Bold,
           Renderer=Basic
      ]{lmroman12}
   \fontspec[FakeBold=4]{Latin Modern Roman Caps}
   \setsansfont[Scale=MatchUppercase,
           UprightFont = {* Regular},
           BoldFont    = {* Bold},
           ItalicFont  = {* Regular Italic},
           BoldItalicFont = {* Bold Italic}
      ]{Nimbus Sans L}
   \setmonofont[Scale=MatchLowercase]{Source Code Pro Light}
\else
\usepackage[scaled=.9]{helvet}
\fi

就是这样。我的框架从此就一直正常工作。只有一件事我还没有修复(太小了):使用 lualatex 时,我总是会在结果中得到一点空间--

所以对我来说,它已经作为替代品使用了 3 年。是的,当 UTF8 与 latin1 发生冲突时,它总是会发出一点吱吱声,但除此之外,它仍然正常工作。

使用 lualatex 进行编译运行所需的时间比 pdftex 要长得多。因此,我经常在写作时使用 pdftex,当外观变得更重要时才切换到 lualatex。但是,我的新笔记本电脑有一个 SSD。从那以后就没再使用过 pdftex...


编辑 2016-06-07

我发现了在使用 LaTeX beamer 时遇到的一些其他警告。

\iflualatex
    \RequirePackage{newunicodechar}
    \newcommand{\DeclareUnicodeCharacter[2]{%
        \begingroup\lccode`|=\string"#1\relax
        \lowercase{\endgroup\newunicodechar{|}}{#2}%
    }
    \LoadClass[color={usenames,dvipsnames},17pt,xcolor=table]{beamer}
\else
    \LoadClass[utf8,color={usenames,dvipsnames},17pt,xcolor=table]{beamer}
\fi
\RequirePackage{eurosym}
\DeclareUnicodeCharacter{20AC}{\euro}

因此,当使用 LaTeX beamer 时,utf8 问题的解决方案不同,显然 pdftex 知道,\DelcareUnicodeCharacter而 lualatex 不知道。我很可能从这个网站找到了解决方案...

答案4

据我所知,方法与“使用 XeLaTeX 代替 pdfLaTeX”相同。通常,在 XeLaTeX 中有效的东西在 luaLaTeX 中也应该有效。有些软件包之间不完全兼容,luaLaTeX 中仍然缺少一些新的 XeLaTeX 软件包,但它们尽可能地接近(当然,除了访问 lua)。

相关内容