正如在回答中所述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}