
Я использую пакет xpinyin
для отображения пиньинь, фонетического китайского письма над китайскими иероглифами. Кажется, это работает хорошо, но я хочу изменить шрифт фонетического письма. Я нашел некоторый код впакет документации, хотя это только на китайском:
\xpinyinsetup{ratio=0.5, vsep=1em, multiple={\color{red}}, font=Liberation Sans}
Китайский язык в документации для меня все еще слишком высок, поэтому я просто предполагаю, что он делает следующее:
- сделать пиньинь hal размером с основной шрифт
- вертикальное разделение 1em, пиньинь отделен от китайского иероглифа ниже на 1em
- если для одного символа (多音字) существует несколько пиньинь, то пиньинь будет наиболее вероятным и окрашен в красный цвет
- использовать шрифт
Liberation Sans
Однако я не знаю, можно ли просто оставить пробел между Liberation
и Sans
. Основная проблема заключается в следующем результате:
(На этой картинке я использовал , Arial
потому что это достаточно короткое имя, чтобы его можно было прочитать.) Поэтому я подумал: «Это, должно быть, проблема со шрифтом». Я попробовал использовать шрифт Liberation Sans
в Libre Office, чтобы проверить, может ли он отображать отсутствующий вокал с тонами. Там он мог отображать его без указания смены шрифта, но я не знаю, скрывает ли он эту информацию, и, возможно, шрифт действительно не может отображать этот вокал.
Также обратите внимание, как каким-то образом имя шрифта было добавлено в фонетический сценарий. Это может быть сделано намеренно, хотя это скорее похоже на ошибку. Хотя я не понимаю документацию.
Как сделать так, чтобы xpinyin отображался правильно, не имея названия шрифта в фонетическом написании первого символа?
Вот пример кода:
\documentclass[10pt, a4paper, parskip=full]{article} % twoside can be added if two sided margin layout is desired
\usepackage[a4paper,vmargin={30mm, 20mm},hmargin={30mm, 25mm},includeheadfoot]{geometry}
\usepackage{amsmath}
\usepackage[UTF8]{ctex}
\usepackage{xpinyin}
\xpinyinsetup{ratio=0.5, vsep=1em, multiple={\color{red}}, font=Liberation Sans}
\usepackage{fontspec,xunicode}
\setCJKmainfont[]{WenQuanYi Micro Hei}
\defaultfontfeatures{Mapping=tex-text, Scale=MatchLowercase} % what does this do? -- influences how quotes are rendered
\setmainfont[Scale=1]{Open Sans}
\setmonofont{Liberation Mono}
\DeclareMathSizes{10}{10}{8}{7}
\usepackage[english, ngerman]{babel}
\selectlanguage{ngerman}
\begin{document}
\begin{pinyinscope}
我有一个送给你的礼物.
\end{pinyinscope}
\end{document}
решение1
Я нашел обходной путь, и, возможно, это можно рассматривать как решение:
\usepackage{xpinyin}
\xpinyinsetup{ratio={.7}, hsep={.5em plus .1em}, vsep={1.1em}, multiple={\color{red}}}
% redefine the pinyinscope environment, so that it uses a font which can display all pinyin syllables and vocals with diacritics
\newenvironment{pinyinscopeboxed}%
{\setmainfont{DejaVu Sans}\begin{pinyinscope}}%
{\end{pinyinscope}\setmainfont{Open Sans}}
Это меняет шрифт на шрифт, который может отображать все диакритические знаки пиньинь, когда среда pinyinscopeboxed
начинается, и меняет его обратно на другой шрифт, когда среда заканчивается. Конкретный шрифт нужно будет настроить по желанию, и его, вероятно, можно улучшить, используя переменную для хранения основного шрифта перед его изменением, а затем использовать эту переменную для переключения обратно, но я пока не знаю, как это сделать. Я был бы благодарен за предложения о том, как это сделать, или как улучшить решение в целом.
Это также позволяет избежать ошибочного поведения, приводящего к отображению имени шрифта в рубинах, поскольку не используется font
опция xpinyin
.
ПРАВКА №1
Цин Ли рассказал мне, как это правильно сделать.
Не обновляйте среду, но вместо этого вы можете сделать следующее, если используете пакет fontspec
:
\usepackage{fontspec}
\newfontfamily{\DVS}{DejaVu Sans}
\usepackage{xpinyin}
\xpinyinsetup{ratio={.7}, hsep={.5em plus .1em}, vsep={1.1em}, multiple={\color{red}}, pysep={.2em}, font=\DVS}
(Другие значения приведены font=
только в качестве примера.)