我遇到了一個奇怪的問題。我想創建複合字符,例如ㄎ使用該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)
- 小小兵專業版確實包含一個抑揚符字元(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 作為常用字體,包含 caron 重音符號,但不包含預先組合的 ǚ。