可以指示 LuaLaTeX 使用 T2A 编码字体吗?

可以指示 LuaLaTeX 使用 T2A 编码字体吗?

正如在回答中所述XeTeX | LuaTeX 可以使用 MetaFont 字体吗?,LuaLaTeX可以使用MetaFont字体。如果是这样,那么如何指示 LuaLaTeX 使用 T2A 编码字体(例如 cm-super)来排版西里尔文本?我以前以为 LuaLaTeX 只能使用那些内部按照 Unicode 编码的字体。我是对的吗?

更新: 以下代码(对@Leo Liu 的回答稍作修改)如果由 pdflatex 编译则打印“Б-Б-Б”,但如果由 lualatex 编译则打印“Б--Б”:

\documentclass{minimal}
\usepackage[T2A]{fontenc} % cyrillic font encoding
\usepackage[utf8]{inputenc} % source file encoding
\begin{document}
\symbol{"C1}-Б-\CYRB
\end{document}

我想知道为什么\usepackage[utf8]{inputenc}对 lualatex 不起作用。我也试过了,luainputenc结果是一样的。请注意,\CYRB命令是由fontenc哪个加载定义的t2aenc.def。至于inputenc它应该将源文件中的 unicode 字符与相应的\cyr...宏匹配。它对 确实如此,pdflatex但没有lualatex

答案1

你可以直接使用它。fontenc与 XeTeX/LuaTeX 配合良好。例如,

\documentclass{article}
\usepackage[T2A]{fontenc}

\begin{document}

\symbol{"C1} % produce Б

\end{document}

但是,您不能将其与 一起使用fontspec。会产生错误:

! NFSS 表已损坏。

而且输入西里尔文也有问题,inputenc不能直接在XeTeX和LuaTeX中使用。

无论如何,如果你想在 XeLaTeX 和 LuaTeX 中使用西里尔文,只需使用CM Unicode 字体。 例如,

\documentclass{article}
\usepackage{fontspec}
\setmainfont{CMU Serif}
\setsansfont{CMU Sans Serif}
\setmonofont{CMU Typewriter Text}

\begin{document}

Русский язык

\textsf{Русский язык}

\texttt{Русский язык}

\end{document}

补充笔记:

inputenc用于 8 位编码的文本。Knuth 的传统 TeX 只能使用 ASCII(0x00--0x7F)。后来的 TeX 实现可以处理 8 位扩展 ASCII(0x00--0xFF)。

大多数西方编码都是某些类型的扩展 ASCII,例如 Latin 1 (ISO 8859-1)、KOI8-R、CP866。ASCII 部分相同,但高位代码(0x80--0xFF)不同。

字体有自己的编码。基本上,字体编码与输入编码相对应。例如,T1编码与 Latin 1 编码非常相似,并且T2A与 Windows 中的代码页 1251 非常相似。也就是说,如果您将 CP1251 的源文件 TeX 化,然后使用\usepackage[T2A]{fontenc},您将获得正确的俄语文本,而无需任何其他软件包。

inputenc使我们能够输入具有不同编码的文本,但仅使用一种字体编码的字体。当您选择utf8x选项并使用T2A字体编码时,字符将从 UTF-8 输入映射到T2A( CP1251)。这就是inputenc所做的事情。

如何inputenc工作?它使字符处于活动状态(catcode 13),并进行映射。对于多字节字符,情况可能更复杂。

为什么inputenc不能在 XeTeX 和 LuaTeX 中使用?XeTeX 和 LuaTeX 使用 UTF-8 编码进行输入。XeTeX/LuaTeX 中的多字节 Unicode 字符仅字符,但在 pdfTeX 中是两个或三个。因此,不同的 TeX 引擎对输入流的看法不同。inputenc在 XeTeX 和 LuaTeX 中失败。

我对 LuaTeX 不太熟悉。在 XeTeX 中,有一个特殊的兼容模式。您可以使用它\XeTeXinputencoding临时更改输入编码,"bytes"编码使 XeTeX 像 8 位 TeX 引擎一样工作。因此,这适用于 XeTeX:

\XeTeXinputencoding "bytes"
\documentclass{article}

\usepackage[T2A]{fontenc}
\usepackage[utf8x]{inputenc}

\begin{document}

Русский язык

\textsf{Русский язык}

\texttt{Русский язык}

\end{document}

(这个技术被过时的软件包所使用xCJK。)

但是,inputenc这可能会导致真正的 Unicode 字体fontspec工作异常。使用它仍然不是一个好主意。


哈立德·霍斯尼

luainputenc可以在这里使用。我不知道。

\documentclass{article}

\usepackage[T2A]{fontenc}
\usepackage[lutf8x]{luainputenc}


\begin{document}

Русский язык

\textsf{Русский язык}

\texttt{Русский язык}

\end{document}

相关内容