我目前正在分析和评估从 pdfTeX 到 LuaTeX 的迁移过程,以适应我们当前的 TeX 工作流程。由于 LuaTeX 是 pdfTeX 和现有软件包的一个分支,因此luainputenc
在牺牲(部分或大部分)LuaTeX 的新功能的情况下,使用 LuaTeX 重现 pdfTeX 的输出似乎很有希望。
然而,目前我陷入困境,需要你的帮助来决定是否值得进一步挖掘或接受我的发现。我面临两个问题。
这是第一个问题。引擎:pdfTeX 3.1415926-2.4-1.40.13 和 LuaTeX beta-0.70.2-2012052410(均来自 TeX Live 2012)带有--output-format=pdf
。当使用 UTF-8 输入([utf8x]{inputenc}
对于 pdfTeX,[utf8x]{luainputenc}
对于 LuaTeX)和 T1 编码字体([T1]{fontenc}
)时,两个引擎的输出对于某些非 T1 字符会有所不同。
梅威瑟:
\documentclass{article}
\usepackage[utf8x]{luainputenc}
\usepackage[T1]{fontenc}
\renewcommand{\rmdefault}{lmr}
\begin{document}
\begin{tabular}{@{}l*{10}{p{7mm}@{}}}
Some T1 characters: & \# & \$ & \% & Ă & Ň & § & @ & Æ & ß & £ \\[1.5mm]
Some non-T1 characters: & ‡ & ÿ & ‰ & … & ¶ & ½ & ĩ & µ & | | & | | \\
\end{tabular}
\end{document}
注意:如果从 pdfTeX 调用luainputenc
,则转发到。使用和单独加载和inputenc
时输出相同。第二行最后两列中的条之间的空格应该是 Unicode NO-BREAK SPACE(U+00A0)和 THIN SPACE(U+2009)。\ifluatex
inputenc
luainputenc
pdfTeX 输出:(这里一切都很好)
LuaTeX 输出:(注意第二行的最后五列)
其他角色肯定也存在这个问题,这些只是我遇到的一些。
有没有办法从 LuaTeX 获取 pdfTeX 输出?使用不同的 T1 编码字体时,问题是一样的,mathpazo
如果您愿意,可以尝试一下。使用不同的字体编码不是这里有一个选项,因为手头的任务是迁移 TeX 引擎,而不是字体或它们的编码。我是不是错过了一个必须替换才能使用 LuaTeX 的 pdfTeX 包?
lutf8x
(注意前导 L)包选项luainputenc
在这里也无济于事。(这并不奇怪,因为它的用途不同。)根据其手册,我在这里尝试使用的是的“UTF-8 遗留模式” luainputenc
,即通过激活非 ASCII 字符来模拟 pdfTeX 中的行为,inputenc
以确定字符的正确位长等。
也许问题不在于输入端(据我所知,将luainputenc
输入字节转换为 LICR 的工作)而是输出端(据我所知,将 LICR 转换为所用字体的字形位置)?也许 LuaTeX 只是转换为 Unicode 位置,而不是考虑字体的字形位置,就像 EU2 编码一样?
无论如何,问题出在哪里?可以解决吗?如果可以,如何解决?
顺便说一句:当使用带有 EU2 编码的 OpenType-Font 时,它可以与 LuaTeX 配合良好fontspec
,但这不是这里的主要目标。
这是第二个问题。它与第一个紧密相关,可以使用上面的 MWE 进行重现。使用--output-format=dvi
pdfTeX 时,dvips 可以毫无问题地生成 DVI 文件。使用 LuaTeX DVI 文件时,dvips 会停止并显示类似
This is dvips(k) 5.992 Copyright 2012 Radical Eye Software (www.radicaleye.com)
' LuaTeX output 2012.08.01:1700' -> ohnexml-luatex.ps
dvips: ! invalid char 297 from font ec-lmr10
这就是我实际上产生怀疑的原因:对于第一个问题,Unicode 位置而不是字体编码特定的字形位置被写入输出文件,因为 297 是十进制 Unicode 点ĩ
(上面 MWE 中的第二行、倒数第四列)。
如果第一个问题的解决方案不能间接解决这个问题,那么如何解决这个问题呢?
谢谢你的想法。
答案1
首先,我认为你应该使用utf8
而不是utf8x
。utf8x 无人维护,并且存在问题,例如 biblatex。(你必须为 pdflatex 设置一些缺失的定义)。你还必须为 lualatex 添加一些定义,因为它会将未声明的字符映射到它们的 unicode 位置 - 正如你已经发现的那样。例如,这里有 ½ 和 µ 的两个定义:
\documentclass{article}
\usepackage[utf8]{luainputenc}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\renewcommand{\rmdefault}{lmr}
\DeclareUnicodeCharacter{00BD}{\textonehalf}
\DeclareUnicodeCharacter{00B5}{\textmu}
\begin{document}
\begin{tabular}{@{}l*{10}{p{7mm}@{}}}
Some T1 characters: & \# & \$ & \% & Ă & Ň & § & @ & Æ & ß & £ \\[1.5mm]
Some non-T1 characters: & ‡ & ÿ & ‰ & … & ¶ & ½ & µ %ĩ & & | | & | | \\ \end{tabular}
\end{document}