奇妙な問題に遭遇しています。次のような合成文字を作成したいのですがǎパッケージを使用します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 を選択しました。