我用 排版卡纳达语已有一段时间了kanlel
。最近几天,我尝试改用xetex
,但即使是编写简单的文本也远非顺利。由于我在网上找不到太多帮助,我决定在这里发布一个问题。
这是我正在尝试编译的内容。
\documentclass[11pt]{article}
\usepackage{fontspec}
\usepackage{polyglossia}
\setmainfont[Script=Kannada]{Lohit Kannada}
\begin{document}
namUmxru maYsUru.\\
ನಮ್ಮೂರು ಮೈಸೂರುನಮ್ಮೂರುಮೈಸೂರುನಮ್ಮೂರಮೈಸೂರುನಮ್ಮೂರುಮೈಸೂರುನಮ್ಮೂರುಮೈಸೂರುನಮ್ಮೂರುಮೈಸೂರು
\textbf{ನಮ್ಮೂರು ಮೈಸೂರು.}
\emph{ನಮ್ಮೂರು ಮೈಸೂರು.}
\end{document}
以下是我所面临的问题。
编译通过了,但是有很多错误。错误
kernel/command-already-defined
出现在各个地方。字体上有几个警告。示例包括
Font 'Lohit Kannada' does not contain script 'Kannada'
和Could not resolve font Lohit Kannada/I (it probably doesn't exist)
。我确信我有该字体。在输出文件中,
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}
它产生以下输出:
并非所有事物都是完美的。对问题中提到的一些问题的解释:
警告
字体“Lohit Kannada”不包含脚本“Kannada”
意味着在字体“Lohit Kannada”中,没有特定于脚本标记“knda”(或可能是“knd2”)的 OpenType 功能。(我在这个答案)解决方法是将下面这行代码改一下
\setmainfont[Script=卡纳达语]{Lohit 卡纳达语}
只是
\setmainfont{洛希特卡纳达语}
因为没有您想要加载的特定于脚本的功能。(Script=
主要用于包含针对不同脚本的不同字体功能的多语言字体。)
警告
无法解析 Lohit Kannada/I 字体(可能不存在)
专门针对/I
Lohit 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}
生成结果:
这可能是更好的选择。
答案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”