使用 \usepackage[greek]{babel} 时以希腊文脚本设置的 ASCII 文本

使用 \usepackage[greek]{babel} 时以希腊文脚本设置的 ASCII 文本

当我们有如下 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}

在此处输入图片描述

相关内容