使用 XeTeX 排版卡纳达语文本

使用 XeTeX 排版卡纳达语文本

我用 排版卡纳达语已有一段时间了kanlel。最近几天,我尝试改用xetex,但即使是编写简单的文本也远非顺利。由于我在网上找不到太多帮助,我决定在这里发布一个问题。

这是我正在尝试编译的内容。

\documentclass[11pt]{article}
\usepackage{fontspec}
\usepackage{polyglossia}
\setmainfont[Script=Kannada]{Lohit Kannada}
\begin{document}
namUmxru maYsUru.\\
ನಮ್ಮೂರು ಮೈಸೂರುನಮ್ಮೂರುಮೈಸೂರುನಮ್ಮೂರಮೈಸೂರುನಮ್ಮೂರುಮೈಸೂರುನಮ್ಮೂರುಮೈಸೂರುನಮ್ಮೂರುಮೈಸೂರು
\textbf{ನಮ್ಮೂರು ಮೈಸೂರು.}
\emph{ನಮ್ಮೂರು ಮೈಸೂರು.}
\end{document}

以下是我所面临的问题。

  1. 编译通过了,但是有很多错误。错误kernel/command-already-defined出现在各个地方。

  2. 字体上有几个警告。示例包括Font 'Lohit Kannada' does not contain script 'Kannada'Could not resolve font Lohit Kannada/I (it probably doesn't exist)。我确信我有该字体。

  3. 在输出文件中,namUmxru maYsUru显示为方框。以卡纳达语给出的文本已呈现,但没有连字符。textbf并且emph未给出预期的结果。

如果能得到任何帮助解决这些问题我将非常感激。

答案1

现在才看到这个 4.5 个月前的问题。以下是一些可能对您有帮助的信息:

\documentclass{article}
\usepackage{fontspec}
\newfontfamily\kannadafont{Noto Sans Kannada}
\usepackage{polyglossia}
\setmainlanguage{kannada}
\setotherlanguages{english}

\begin{document}
\textenglish{namUmxru maYsUru.}
ನಮ್ಮೂರು ಮೈಸೂರುನಮ್ಮೂರುಮೈಸೂರುನಮ್ಮೂರಮೈಸೂರುನಮ್ಮೂರುಮೈಸೂರುನಮ್ಮೂರುಮೈಸೂರುನಮ್ಮೂರುಮೈಸೂರು
\textbf{ನಮ್ಮೂರು ಮೈಸೂರು.}
\emph{ನಮ್ಮೂರು ಮೈಸೂರು.}
\end{document}

它产生以下输出:

生成的 pdf 的屏幕截图

并非所有事物都是完美的。对问题中提到的一些问题的解释:


警告

字体“Lohit Kannada”不包含脚本“Kannada”

意味着在字体“Lohit Kannada”中,没有特定于脚本标记“knda”(或可能是“knd2”)的 OpenType 功能。(我在这个答案)解决方法是将下面这行代码改一下

\setmainfont[Script=卡纳达语]{Lohit 卡纳达语}

只是

\setmainfont{洛希特卡纳达语}

因为没有您想要加载的特定于脚本的功能。(Script=主要用于包含针对不同脚本的不同字体功能的多语言字体。)


警告

无法解析 Lohit Kannada/I 字体(可能不存在)

专门针对/ILohit Kannada 的斜体变体 ()。它确实可能不存在。至少,fontspec 无法找到该字体。(可能的原因是 Lohit Kannada 不是现在标准的 OpenType 格式:请参阅此帖子改进卡纳达语字体从 2013 年开始,请点击那里的链接了解更多详情。

当使用 Noto Sans Kannada(没有斜体样式)编译上述输入时,我收到警告:

LaTeX Font Warning: Font shape `EU1/NotoSansKannada(0)/m/it' undefined
(Font)              using `EU1/NotoSansKannada(0)/m/n' instead on input line 12

这更加清晰一些。


拉丁文字namUmxru maYsUru出现在方框中的原因在于\setmainfont:Lohit Kannada 字体不包含拉丁字符的字形,因此对于这些字符,您需要切换到“英语”字体。(polyglossia您可以使用\textenglish来处理这些部分。)

要获得连字符,您可以使用polyglossia并将语言声明为卡纳达语\setmainlanguage{Kannada},这将加载一些特定于卡纳达语脚本的连字符模式。(有点。这些不是很智能,但似乎知道不要在视觉字母中间断开。)

为了\textbf\emph正常工作,您的字体需要有粗体和斜体变体,并且 XeTeX(fontspec)需要能够找到它们。


上面使用 Noto Sans Kannada 的示例输出仍然不完美(因为它没有斜体,而且我不明白为什么行长不同),所以我尝试切换到另一种字体 Kedage。不幸的是,这种字体似乎有一个用于连字符的“空”字形,因此(除非编辑字体以修复其连字符),这是一种黑客行为,使用不同的字符代替:

\documentclass{article}
\usepackage{fontspec}
\newfontfamily\kannadafont[HyphenChar={+}]{Kedage}
\usepackage{polyglossia}
\setmainlanguage{kannada}
\setotherlanguages{english}

\begin{document}
\textenglish{namUmxru maYsUru.}
ನಮ್ಮೂರು ಮೈಸೂರುನಮ್ಮೂರುಮೈಸೂರುನಮ್ಮೂರಮೈಸೂರುನಮ್ಮೂರುಮೈಸೂರುನಮ್ಮೂರುಮೈಸೂರುನಮ್ಮೂರುಮೈಸೂರು
\textbf{ನಮ್ಮೂರು ಮೈಸೂರು.}
\emph{ನಮ್ಮೂರು ಮೈಸೂರು.}
\end{document}

生成结果:

使用 kedage 替代的屏幕截图

这可能是更好的选择。

答案2

Noto Serif Kannada(谷歌字体更好,粗体在 xelatex 中无法正常工作)。对于粗体/斜体,我使用 Kedage(Mallige 也可用)。粗斜体我们有 Mallige。

Noto Serif Kannada ಬಳಸುವವರು ಮೊದಲು ಆನ್‌ಲೈನ್‌ನಲ್ಲಿ ಈ ಫಾಂಟ್‌ಗಳ .tfm、.pfb 扩展名(可在线转换)ಪಡೆಯಬೇಕು。从 texlive 文件夹获取 texmf-dist 字体文件夹,然后启动 texmflsr 并运行 exe 文件夹。

答案3

使用字体我发现下面的程序对我有用Windows(texlive 2023)

将 .ttf 转换为 .pfb 和 .tfm 字体(可在线获取)

将 .ttf 字体放在 texmf-dist/fonts/trutype 中文件夹

将 .tfm 字体放在 texmf-dist/fonts/tfm 中文件夹

将 .pfb 字体放在 texmf-dist/fonts/type1 中文件夹

然后我在 texlive mktexlsr 中运行(但不确定是否需要)

答案4

目前我在 xelatex 中使用这个:

\usepackage{polyglossia}
\setdefaultlanguage{kannada}
\setotherlanguages{english}
\usepackage{fontspec}
\setmainfont{NotoSerifKannada-Regular.ttf}[Script=Kannada, 
   BoldFont=NotoSerifKannada-Regular.ttf,
   BoldFeatures={FakeBold=2},
   SlantedFont={NotoSerifKannada-Light.ttf},
   SlantedFeatures={FakeSlant=0.4},
   BoldItalicFont=NotoSerifKannada-Regular.ttf,
   BoldItalicFeatures={FakeBold=3,FakeSlant=0.3},
]
\newfontfamily\englishfont[Script=Latin]{EBGaramond-Medium.ttf}

抱歉,我发现 Noto Sans Kannada 和 Noto Serif Kannada 之间没有太大区别。后期的字体略小。(今天我已更正错误“FakeSlant”而不是“Fake Slant”

相关内容