我遇到了一个奇怪的问题。我想创建复合字符,例如ā使用该newunicodechar
包。但是,只有与包结合使用时才会产生结果xeCJK
。
此代码产生缺失的字符:
\documentclass[a4paper,12pt,article,oneside]{memoir}
\usepackage{fontspec}
\usepackage{xunicode}
\usepackage[british]{babel}
\setmainfont[Ligatures=TeX]{Minion Pro}
\usepackage{newunicodechar}
\newunicodechar{ǚ}{\v{ü}}
\newunicodechar{Ǚ}{\v{Ü}}
\newunicodechar{ǎ}{\v{a}}
\newunicodechar{Ǎ}{\v{A}}
\newunicodechar{ǒ}{\v{o}}
\newunicodechar{Ǒ}{\v{O}}
\begin{document}
ǚ Ǚ ǎ
\end{document}
如果我加载该xeCJK
包,那么角色渲染就很好了。为什么会这样?如何在没有命名包的情况下生成复合角色?
笔记:
- 这可以通过不包含 unicode 字符的其他字体(例如 Adobe Garamond Pro)重现
- Minion 专业版包含一个卡龙字符(unicode 02C7,索引 136)
答案1
默认设置不使用unicode U+02C7,而是使用字体中缺少的组合重音符号U+030C。xecjk包含一些代码来使用U+02C7,但似乎只有在加载xunicode时才会使用此代码 - 这有点麻烦,因为通常不应该再使用它了。
您可以使用 克隆 xeCJK 代码\add@accent
。如果涉及更多字体,其中一些字体具有组合重音,则可能需要进行一些额外的字形存在检查。
\documentclass[a4paper,12pt,article,oneside]{memoir}
\usepackage{fontspec}
\usepackage[british]{babel}
\setmainfont[Ligatures=TeX]{MinionPro-Regular.otf}
\usepackage{newunicodechar}
\makeatletter
\newunicodechar{ǚ}{\add@accent{`^^^^02c7}{ü}}
\newunicodechar{Ǚ}{\add@accent{`^^^^02c7}{Ü}}
\newunicodechar{ǎ}{\add@accent{`^^^^02c7}{a}}
\makeatother
%\newunicodechar{Ǎ}{\v{A}}
%\newunicodechar{ǒ}{\v{o}}
%\newunicodechar{Ǒ}{\v{O}}
%
\begin{document}
abc
ǚ Ǚ ǎ
\end{document}
答案2
基于埃格雷格的诡计,这使用了\accent
原语。我选择简单地重新定义\v
。
\documentclass{standalone}
\usepackage{fontspec, newunicodechar}
\usepackage[british]{babel}
\setmainfont[Ligatures=TeX]{Cardo}
\renewcommand\v[1]{\accent\string"02C7 #1}
\newunicodechar{ǚ}{\v{ü}}
\newunicodechar{Ǚ}{\v{Ü}}
\newunicodechar{ǎ}{\v{a}}
\newunicodechar{Ǎ}{\v{A}}
\newunicodechar{ǒ}{\v{o}}
\newunicodechar{Ǒ}{\v{O}}
\begin{document}
ǚ Ǚ ǎ Ǎ ǒ Ǒ
\end{document}
我选择 Cardo 作为包含卡龙重音符但不包含预组合 ǚ 的常用字体。