当我们有如下 MWE 时:
\documentclass[twoside]{book}
\usepackage[T2A]{fontenc}
\usepackage[russian]{babel}
\begin{document}
\chapter{Титульная страница}
More text
\end{document}
我们得到输出:
这是我们期望的:
- 西里尔文俄语文本
- 章节一词翻译成俄语和西里尔文
- 文本“更多文本”就像 ASCII 中的英语一样
而我们有希腊文的对应词:
\documentclass[twoside]{book}
\usepackage[greek]{babel}
\usepackage{alphabeta}
\begin{document}
\chapter{Κύρια Σελίδα} More text
\end{document}
我们得到输出:
这是我们期望的:
- 希腊字母书写的希腊文
- 章节一词翻译成希腊文和希腊文
但这并不是我们所期望的:
- 文字“更多文字”就像希腊文中的英语一样
我知道在 tex 中在语言之间切换的可能性,但这里的问题是我们在这里使用了文本“更多文本”,这可以起作用,但在现实生活中的例子中,这也可以是一行代码,printf("More text\n");
在printf("Κύρια Σελίδα\n");
这里我们不能使用切换方法,特别是因为我们不知道双引号之间的内容是什么,并且输出是自动生成的(doxygen)。
这个“希腊”问题有解决办法吗?
答案1
希腊输出编码 LGR 相对于其他输出编码来说有点奇怪。T<number>
编码的要求是它在 ASCII 字母槽中有拉丁字母。
西里尔文编码 T2A、T2B 和 T2C 符合要求。西里尔文被分为三种不同的编码,因为它包含的字符比 256 个字符位所能容纳的字符多得多;然而,除了满足上述要求外,这三种编码中的每一种都涵盖俄语和其他一些语言。
这对于多音希腊文来说是不可能的:即使填满 256 个位置,也会遗漏一些罕见字符。
希腊字体的字体布局实际上早于 LaTeX 输出编码和 Unicode 的概念。
在设计第一批希腊字体时,一个常见的问题是如何输入他们。字体设计师 Claudio Beccari 和一些希腊语专家设计了一种方法:几乎每个拉丁字母都对应一个希腊字母。因此,从中a
可以得到一个 alpha,从中可以得到b
一个 beta,等等。
也许可以为现代(单调)希腊文定义一种“真正的”输出编码,因为所需的字形数量可以满足 256 个限制,同时也满足 ASCII 位置上拉丁字母的要求。然而,这也需要设计出一套全新的字体,并根据这种新编码进行适当布局。
这项工作不需要创建字体,因为可以使用虚拟字体,甚至可以“机械化”翻译。无论如何,这是个大项目。
另一方面,如果您使用 XeLaTeX 或 LuaLaTeX 和支持希腊语的主字体,您将获得预期的结果。
\documentclass[twoside]{book}
\usepackage{fontspec}
\usepackage[greek]{babel}
\setmainfont{Libertinus Serif}
\begin{document}
\chapter{Κύρια Σελίδα}
More text
\end{document}