我使用 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
我们还可以直接输入字符。