从 pdfTeX 迁移到 LuaTeX:重现旧项目输出的问题

从 pdfTeX 迁移到 LuaTeX:重现旧项目输出的问题

我目前正在分析和评估从 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)。\ifluatexinputencluainputenc

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=dvipdfTeX 时,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}

相关内容