TeX 重音符号似乎不适用于 fontspec 和 xe/lua/latex

TeX 重音符号似乎不适用于 fontspec 和 xe/lua/latex

我使用 Minion Pro 作为主字体,但它的字形表中没有字符U+1E47 Latin small letter with dot below我只需要的字符一次在我的文档中。我不想换成其他字体,而是想使用 来生成它\d{n}

下面我给出了一个最小文件来说明该问题:

\documentclass{minimal}
\usepackage{fontspec}
    \defaultfontfeatures{Ligatures=TeX}
    \setmainfont{Minion Pro} % Comment out optionally
\begin{document}
U+1E47 Latin small letter with dot below: \d{n}

U+0101 Latin small letter a with macron: \={a}
\end{document}

n with dot below尽管a with macron字体中存在并且可用,但我没有得到所需的字母。注释掉后\usepackage{fontspec},将以 CMR 作为默认字体输出所需的输出。

尽管 xelatex 用十字框表示缺失的字母,但其行为与 xelatex 和 lualatex 相同。

我相信通过此Ligatures=TeX设置,我应该能够使用 TeX 重音符号获取缺失的字母。我认为我不需要加载该xunicode包,因为它已由 fontspec 加载。

有人能告诉我我做错了什么吗?

谢谢。

答案1

“标准方式”是这样的

\UndeclareUTFcomposite[\UTFencname]{x1E47}{\d}{n}

以便使用组合字符代替 U+1E47 处缺失的字符,但不幸的是 Minion Pro 在 U+0323 位置(下面的组合点)没有任何东西。我们需要走一条艰难的道路:在序言中写下以下内容

\UndeclareUTFcomposite[\UTFencname]{x1E47}{\d}{n}
\makeatletter
\renewcommand{\d}[1]
   {\hmode@bgroup
    \o@lign{\relax#1\crcr\hidewidth\ltx@sh@ft{-1ex}.\hidewidth}\egroup}
\makeatother

这样您就可以使用 的标准定义\d。如果需要其他此类字符,请在 中查找xunicode.sty它们的定义;它以 开头\DeclareUTFcomposite,只需复制您的序言中的行并更改\Declare...为即可\Undeclare...

让我们再看看“下面的一行”,这在 Minion Pro 中再次缺失。这里有一个类似的方法来处理这种情况,使用长音符 (U+00AF) 来模拟下面的一行:

\documentclass{article}
\usepackage{fontspec,newunicodechar}
\defaultfontfeatures{Ligatures=TeX}
\setmainfont{Minion Pro} % Comment out optionally

\UndeclareUTFcomposite[\UTFencname]{x1E47}{\d}{n}
\UndeclareUTFcomposite[\UTFencname]{x1E49}{\b}{n}
\makeatletter
\let\d\relax
\DeclareRobustCommand{\d}[1]
   {\hmode@bgroup
    \o@lign{\relax#1\crcr\hidewidth\ltx@sh@ft{-1ex}.\hidewidth}\egroup}
\let\b\relax
\DeclareRobustCommand{\b}[1]
   {\hmode@bgroup\o@lign{\relax#1\crcr\hidewidth\ltx@sh@ft{-3ex}%
     \vbox to.2ex{\hbox{\char"AF}\vss}\hidewidth}\egroup}
\makeatother
\newunicodechar{ṇ}{\d{n}}
\newunicodechar{ṉ}{\b{n}}

\begin{document}
U+1E47 Latin small letter n with dot below: \d{n}ṇ

U+1E49 Latin small letter n with line below: \b{n}ṉ

U+0101 Latin small letter a with macron: \={a}ā

\end{document}

也许最好将\b和声明\d为健壮的命令。此外,newunicodechar我们还可以直接输入字符。

在此处输入图片描述

相关内容