字体规格

字体规格

为了完成学校作业,我需要展示一些 Lepcha 语。这是我最初有的内容:

\documentclass[12pt]{article}
\usepackage[a4paper]{geometry}
\usepackage{fontspec}
\setmainfont{Gentium Plus}

\usepackage{parskip}
\usepackage{multicol}
\usepackage{vowel}
\usepackage{pifont}
\newcommand{\BlankCell}{}

\usepackage{polyglossia}
\setdefaultlanguage{german} 
\setotherlanguages{bengali, hindi, malayalam, khmer, french, greek, russian, thai, armenian, tibetan, lepcha} 

\overfullrule=2cm % displays black bars where the line extends over the edge of the page. 
%THE OTHER SCRIPTS ARE DEFINED LIKE THIS, SO I FIGURED I CAN DO THE SAME WITH LEPCHA.
\newfontfamily\lepchafont[Script=Lepcha]{Noto Sans Lepcha}
\newfontfamily\bengalifont[Script=Bengali]{Shonar Bangla}
\newfontfamily\hindifont[Scr... and so on

其他脚本都是这样定义的,所以我想我可以再添加一个。现在,这是一个加载到另一个文件中的头文件,但错误直接重定向到这里,我想这与 Lepcha 未在 polyglossia 包中定义有关,但我不知道如何单独定义它。这是我得到的错误:

LaTeX 错误:“kernel/key-choice-unknown”键“fontspec/Script”仅接受一组固定的选择。如需立即获得帮助,请键入 H。...epchafont[Script=Lepcha]{Noto Sans Lepcha}

我尝试以与 Kana 和 Hangul 类似的方式添加它,但这也没有奏效。这就是那次可怜的尝试的样子:

\usepackage{xeCJK}
\xeCJKDeclareSubCJKBlock{Kana}{"3040 -> "309F, "30A0 -> "30FF, "31F0 -> "31FF, "1B000 -> "1B0FF}
\xeCJKDeclareSubCJKBlock{Hangul}{"1100 -> "11FF, "3130 -> "318F, "A960 -> "A97F, "AC00 -> "D7AF, "D7B0 -> "D7FF}
\xeCJKDeclareSubCJKBlock{Lepcha}{"1C00 -> "1C4F}

下面的代码应该像下图这样输出,但是现在却没有。

...
\definelingstyle{Lepcha}{}
...

\ex[lingstyle=Lepcha]<lepcha>
\begingl 
\glpreamble \rightcomment{[Lepcha]}  ᰃᰨ ᰎᰥᰨᰜᰤᰦᰵ ᰀᰩᰰ ᰍᰩᰵᰡᰨ //
\gla go proljaŋ-kɔn nɔŋ-ʃo//
\glb 1\textsc{sg} Bhutan-side go-\textsc{nprt}//
\glft `I am going in the direction of Bhutan.’ (Plaisier 2007:82)} //
\endgl
\xe

Lepcha 假定输出

您还需要什么信息?

答案1

这里有多个问题(并且错误消息不是您猜测的原因):

  1. fontspec 不了解 Lepcha 字体,
  2. polyglossia 也不了解 Lepcha,不过没关系,
  3. 您的 expex 语法不正确。

字体规格

该软件包fontspec允许您在 XeTeX 或 LuaTeX 中使用(现在)标准 OpenType 格式(例如本例中的 Noto Sans Lepcha)的任何字体(安装在您的计算机上)。

一般来说,LaTeX 及其软件包并不以有用的错误消息而闻名,但fontspec在这方面却非常出色。如果你的文件以

\documentclass[12pt]{article}
\usepackage{fontspec}
\newfontfamily\lepchafont[Script=Lepcha]{Noto Sans Lepcha}

然后你用 编译它xelatex,你会收到错误消息:

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
! LaTeX error: "kernel/key-choice-unknown"
! 
! Key 'fontspec/Script' accepts only a fixed set of choices.
! 
! See the LaTeX3 documentation for further information.
! 
! For immediate help type H <return>.
!...............................................  

l.3 ...lepchafont[Script=Lepcha]{Noto Sans Lepcha}

? 

如果你经常使用 LaTeX,那么你可能对输入 不会得到任何有用的东西抱有希望H,但这种情况是个例外:在该提示符下输入 H 会得到:

? H
|'''''''''''''''''''''''''''''''''''''''''''''''
| The key 'fontspec/Script' only accepts predefined values, and 'Lepcha' is
| not one of these.
|...............................................
? 

这非常清楚:这意味着 fontspec 无法识别[Script=Lepcha]你的

\newfontfamily\lepchafont[Script=Lepcha]{Noto Sans Lepcha}

如果你通过调用texdoc fontspec(或通过在网上找到的),您会在第 10.18 节“OpenType 脚本和语言”中看到,支持的脚本列表相当小,而 Lepcha 文并不在列表中:

表 13

我们可以从两个方向入手:

  1. 以某种方式让 Script=Lepcha 工作
  2. 真正理解正在发生的事情

路径 1:使“Script=Lepcha”工作

您还将在第 10.18.2 节“定义新的文字和语言”中看到定义表中未包含的新文字的方法:例如,

\newfontscript{Arabic}{arab}

其中第一个参数是字体规范名称,第二个参数是 OpenType 标签。

要使用的 OpenType 标签是什么?OpenType 规范说是lepc,那我们就试试吧。下面是一个最小的工作示例:

\documentclass[12pt]{article}
\usepackage{fontspec}
\newfontscript{Lepcha}{lepc}
\newfontfamily\lepchafont[Script=Lepcha]{Noto Sans Lepcha}

\begin{document}

Lepcha ahead: {\lepchafont ᰃᰨ ᰎᰥᰨᰜᰤᰦᰵ ᰀᰩᰰ ᰍᰩᰵᰡᰨ} -- that was Lepcha.

\end{document}

生成:

带有 Lepcha 的 MWE 定义

编译还会产生以下警告:

*************************************************
* fontspec warning: "script-not-exist"
* 
* Font 'Noto Sans Lepcha' does not contain script 'Lepcha'.
*************************************************

但输出没有问题,所以我们可以忽略它。但我们应该忽略它吗?

路径 2:了解正在发生的事情

如果你真的读过fontspec文档,你就会明白这个命令

\newfontfamily\lepchafont[Script=Lepcha]{Noto Sans Lepcha}

意思是:当你写 时\lepchafont,它会要求加载 OpenType 字体“Noto Sans Lepcha”,您希望使用字体的 OpenType 功能来支持“Lepcha”脚本的更多信息。此更多信息旨在用于包含针对不同脚本的不同字体功能的优质多语言字体。

在这种情况下,如果你得到Noto Sans Lepcha 的发布版本并使用閱讀,你会发现字体中没有任何地方包含脚本标签特有的功能lepc。即使Noto Sans Lepcha 的早期版本lepc仅在字体中提及GPOS 表而不是在其GSUB 表与其他字体(例如 Noto Sans Kannada)的情况一样。换句话说,Noto Sans Lepcha 实现其复杂的文本布局时不使用新的 Lepcha 感知方式,而是使用脚本标记“DFLT”下的连字默认方式。您还可以在.logxelatex 生成的文件中看到这一点,该文件包含以下信息fontspec

.................................................
. fontspec info: "defining-font"
. 
. Font family 'NotoSansLepcha(0)' created for font 'Noto Sans Lepcha' with
. options [Script=Lepcha].
. 
. This font family consists of the following shapes:
. 
. * 'normal' with NFSS spec.:
. <->"Noto Sans Lepcha/OT:"
. 
. * 'small caps' with NFSS spec.:
. 
. and font adjustment code:
. 
.................................................

为什么字体会这样?你可以在这里看到启发性的讨论:

  • Bugzilla(与 SIL 相关并且恰好是 XeTeX 的开发者的 Jonathan Kew 评论):目前只有 harfbuzz 和 Windows 10 可以识别该lepc标签;较旧的整形引擎则不能。
  • noto-fonts 问题 451问题 395:Unicode 标准和通用造型引擎对于雷布查语的具体规范还存在争议。

无论如何,重点是由于 Noto Sans Lepcha 不包含脚本标签lepc,所以你应该不是使用路径 1 中写的内容:你使用

\newfontscript{Lepcha}{DFLT}

(因为“DFLT”(代表“默认”)是使用的脚本标签),但更明智的做法是简单地加载字体而不指定附加信息,这意味着下面是正确的最小示例,比之前短一行:

\documentclass[12pt]{article}
\usepackage{fontspec}
\newfontfamily\lepchafont{Noto Sans Lepcha}

\begin{document}

Lepcha ahead: {\lepchafont ᰃᰨ ᰎᰥᰨᰜᰤᰦᰵ ᰀᰩᰰ ᰍᰩᰵᰡᰨ} -- that was Lepcha.

\end{document}

多语

包 polyglossia (通过调用查看文档texdoc polyglossia,或者在网上查找) 可以帮助您完成在文档中切换语言时可能需要做的许多事情:更改连字模式、更改字体和印刷约定、更改日期和数字格式等。对于更改特定语言或脚本的字体,它依赖于您根据约定\<script>font或对其进行定义的假设\<language>font

因此,例如,

\documentclass[12pt]{article}
\usepackage{fontspec}
\newfontfamily\hindifont[Script=Devanagari]{Noto Sans Devanagari}

\begin{document}

Hindi ahead: {\hindifont तुलसीदास श्रीरामचरितमानस} -- that was Hindi.

\end{document}

可以写

\documentclass[12pt]{article}
\usepackage{fontspec}
\newfontfamily\hindifont[Script=Devanagari]{Noto Sans Devanagari}

\usepackage{polyglossia}
\setdefaultlanguage{english}
\setotherlanguages{hindi}

\begin{document}

Hindi ahead: \texthindi{तुलसीदास श्रीरामचरितमानस} -- that was Hindi.

\end{document}

并获得更多的好处(在较长的文本中),而不仅仅是更改字体,例如连字模式等。事实证明,polyglossia识别的语言甚至更少(而且 Lepcha 不在列表中):

多语者所知的语言

但这对你来说不是什么大问题:只需从列表中删除“lepcha”(如果你有旧版本的多语,则删除“khmer”)

\setotherlanguages{bengali, hindi, malayalam, khmer, french, greek, russian, thai, armenian, tibetan, lepcha}

专家

最后,您的 expex 示例中似乎存在错误:

  • 有一个流浪}(Plaisier 2007:82)}
  • 没有迹象表明雷布查语文本是另一种语言/文字,需要切换\lepchafont(但请参阅下面的“奖励”部分)。

修复这些问题后,下面是一个最小的工作示例:

\documentclass[12pt]{article}
\usepackage{fontspec}
\newfontfamily\lepchafont{Noto Sans Lepcha}

\usepackage{expex}    
\definelingstyle{Lepcha}{}

\begin{document}

\ex[lingstyle=Lepcha]<lepcha>
\begingl
\glpreamble \rightcomment{[Lepcha]}  {\lepchafont ᰃᰨ ᰎᰥᰨᰜᰤᰦᰵ ᰀᰩᰰ ᰍᰩᰵᰡᰨ} //
\gla go proljaŋ-kɔn nɔŋ-ʃo//
\glb 1\textsc{sg} Bhutan-side go-\textsc{nprt}//
\glft `I am going in the direction of Bhutan.' (Plaisier 2007:82) //
\endgl
\xe

\end{document}

产生

带有 expex 的 Lepcha

正如你的问题一样。


奖励:ucharclasses

如果你不喜欢明确设置\lepchafontLepcha 文本,你可以使用包ucharclasses. 和往常一样,你可以使用texdoc ucharclasses或查看其文档在线的:此包可检测输入中的某些文本是否来自不同的 Unicode 块,并可针对该文本执行自定义命令。您可以使用它来自动切换字体(或更多,例如切换语言为 polyglossia 支持的语言)。因此,您可以按如下方式输入,以获得与上述相同的输出:

\documentclass[12pt]{article}
\usepackage{fontspec}
\newfontfamily\lepchafont{Noto Sans Lepcha}

\usepackage[Lepcha]{ucharclasses}
\setTransitionTo{Lepcha}{\lepchafont}

\usepackage{expex}
\definelingstyle{Lepcha}{}

\begin{document}

\ex[lingstyle=Lepcha]<lepcha>
\begingl
\glpreamble \rightcomment{[Lepcha]}  ᰃᰨ ᰎᰥᰨᰜᰤᰦᰵ ᰀᰩᰰ ᰍᰩᰵᰡᰨ //
\gla go proljaŋ-kɔn nɔŋ-ʃo//
\glb 1\textsc{sg} Bhutan-side go-\textsc{nprt}//
\glft `I am going in the direction of Bhutan.' (Plaisier 2007:82) //
\endgl
\xe

\end{document}

相关内容