在这个问题中LuaTeX、ConTeXt 和 XeTeX 之间的区别讨论了 LuaTeX 和 XeTeX(以及 ConTeXt)之间的各种差异。在这个问题中使用 XeLaTeX 代替 pdfLaTeX给出了从 pdfLaTeX 切换到 XeLaTeX 的方法。在这个问题中,我想要一个使用 LuaLaTeX 的类似方法。我特别感兴趣的是 LuaTeX 可以作为 pdfTeX 的替代品使用到何种程度。我不是对 LuaTeX 能做到而 pdfTeX 做不到的事情感兴趣。
所以问题是:
我该怎么办需要如何使用 LuaLaTeX 而不是 pdfLaTeX 来编译现有或新文档?
一些具体的子问题:
- 哪些软件包与 pdfLaTeX 兼容,但是不是使用 LuaLaTeX 吗?
- 是否有任何特定于 LuaLaTeX 的软件包应该在大多数 LuaLateX 文档中加载?
答案1
我认为我们不需要做太多。我知道的唯一不兼容的事情就是UTF-8
编码。
回答子问题:
任何与输入编码和字体编码相关的包:
inputenc
。您应该始终使用UTF-8
编码来输入文本。为了向后兼容,请使用luainputenc
。fontenc
。不要fontspec
明确地使用它。textcomp
. 改用xunicode
,它由 加载fontspec
。- 大多数旧的字体包(尤其是文本最好不要使用 、 或 字体。例如,使用
XITS
、TeX Gyre Termes
或Linux Libertine O
字体fontspec
代替包,并将 Unicode 字体与和(仅限字体数学字体)times
一起用于正文,以获得正确的文本字体。mathptmx
txfonts
CJK
与 LuaTeX 不兼容。目前,只有韩国和日本有少数非官方的 LaTeX 软件包可用。这对西方用户来说可能不是很重要。
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)。