如果没有 \usepackage{xeCJK},Caron Accent \v{a} 就无法渲染

如果没有 \usepackage{xeCJK},Caron Accent \v{a} 就无法渲染

我遇到了一个奇怪的问题。我想创建复合字符,例如ā使用该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 字符的其他字体(例如 Adob​​e 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 作为包含卡龙重音符但不包含预组合 ǚ 的常用字体。

相关内容