Я столкнулся со странной проблемой. Я хочу создать составных персонажей, таких какǎс использованием 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)
- Миньон Просодержитсимвол карона (юникод 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
На основетрюк от Egreg, это использует \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 как распространенный шрифт, содержащий ударение карон, но не содержащий предбукву ǚ.