
Estou usando o pacote xpinyin
para exibir pinyin, uma escrita fonética chinesa acima dos caracteres chineses. Isso parece funcionar bem, mas quero alterar a fonte da escrita fonética. Encontrei um código nodocumentação do pacote, embora esse seja apenas chinês:
\xpinyinsetup{ratio=0.5, vsep=1em, multiple={\color{red}}, font=Liberation Sans}
O chinês na documentação ainda é de nível muito alto para mim, então acho que é isso que faz:
- faça o pinyin hal do tamanho da fonte principal
- separação vertical de 1em, pinyin é separado por 1em do caractere chinês abaixo
- se houver vários pinyins para um caractere (多音字) então o pinyin será o mais provável e será colorido em vermelho
- use a fonte
Liberation Sans
No entanto, não sei se você pode simplesmente deixar um espaço entre Liberation
e Sans
. O principal problema é o seguinte resultado:
(Nesta imagem usei Arial
porque é um nome curto o suficiente para ser legível.) Então pensei: "Isso deve ser um problema de fonte." Tentei usar a Liberation Sans
fonte do Libre Office, para verificar se ela conseguia exibir os vocais que faltavam com tons. Lá ele conseguiu exibi-lo sem indicar mudança de fonte, mas não sei se esconde essa informação e talvez a fonte realmente não consiga exibir esses vocais.
Observe também como de alguma forma o nome da fonte foi adicionado à escrita fonética. Isso pode ser intencional, embora pareça um bug. Eu não entendo a documentação embora.
Como posso fazer com que o xpinyin seja exibido corretamente sem ter o nome da fonte na escrita fonética do primeiro caractere?
Aqui está um exemplo de código:
\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}
Responder1
Encontrei uma solução alternativa e talvez isso possa ser visto como uma solução:
\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}}
Isso altera a fonte para uma fonte, que pode exibir todos os diacríticos do pinyin, sempre que o ambiente pinyinscopeboxed
começa e muda de volta para outra fonte, sempre que o ambiente termina. A fonte específica teria que ser configurada conforme desejado e provavelmente poderia ser melhorada usando de alguma forma uma variável para conter a fonte principal antes de alterá-la e depois usar essa variável para voltar, mas não sei como fazer isso ainda. Ficaria muito grato por sugestões sobre como fazer isso ou como melhorar a solução em geral.
Isso também evita o comportamento bugado, que faz com que o nome da fonte seja exibido nos rubis, pois não utiliza a font
opção de xpinyin
.
EDITAR#1
Qing Lee me contou sobre uma maneira adequada de fazer isso.
Não renove o ambiente, mas em vez disso você pode fazer o seguinte, se usar o fontspec
pacote:
\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}
(Outros valores além de font=
são apenas para dar um exemplo.)