xetex:某些字体中的西里尔字母上的重音符号不准确

xetex:某些字体中的西里尔字母上的重音符号不准确

我刚刚注意到,如果我使用

阿诺专业版

或者

Myriad Pro

字体。我的意思是像这样的命令:\'{o}, `{o}, \~{o}, \c{o}, \d{o}, 等如果 o 是拉丁字母,它们会产生正确的输出,但对于西里尔字母则不会按预期工作(我试过 а、о、в)。如果我使用其他字体(我试过 Cambria、Calibri),则不会出现此问题。

似乎应该修补 fontspec 包来解决这个问题,但是现在也存在一个问题,即如何绕过该包之前的问题。

我的代码附在下面。

% !Mode:: "TeX:UTF-8"
\documentclass{article}
\usepackage{ifpdf,ifxetex,ifluatex}

\ifxetex
\usepackage{polyglossia}
    \setdefaultlanguage{russian}
    %\setotherlanguages{english,german,french}
\usepackage{fontspec}
    \defaultfontfeatures{Ligatures={TeX}}
    \setmainfont{Arno Pro}% wrong accents
    %\setmainfont{Cambria}
    %\setmainfont{Calibri}
    \setsansfont{Myriad Pro}
    \setmonofont{Consolas}
\usepackage[math-style=TeX]{unicode-math}
    %\setmathfont{Cambria Math}
    \setmathfont{Asana Math}
\fi

\ifluatex
\usepackage[russian]{babel}
\usepackage{fontspec}
    \defaultfontfeatures{Renderer=Basic,Ligatures={TeX}}
    \setmainfont{Arno Pro}
    \setsansfont{Myriad Pro}
    \setmonofont{Consolas}
\usepackage[math-style=TeX]{unicode-math}
    %\setmathfont{Cambria Math}
    \setmathfont{Asana Math}

 \fi

\begin{document}%

\ifluatex
    This is LuaTeX.
\else\ifxetex
    This is XeTeX.
\else\ifpdf
    This is PDFLaTeX.
\else
    This is LaTeX.
\fi\fi\fi

    \begin{table}[h]
    \def\MacroFont{\fontencoding\encodingdefault
           \fontfamily\ttdefault
           \fontseries\mddefault
           \fontshape\updefault
           \selectfont}%
    \def\PrintMacroName#1{{\strut\MacroFont\string #1}}
    \newcommand{\X}[1][1]{\ensuremath{^{#1)}}}%
    \newcommand{\XX}{\X[2]}%
    \newcommand{\tac}[2][o]{\texttt{\PrintMacroName{#2}\string{#1\string}}}%
    \vspace{-0.5\baselineskip}
    \begin{center}
    \caption{Latin Letter o}
    \begin{tabular}{@{}*{4}{ll@{\hspace{6ex}}}ll@{}}
    \`{o} & \tac{\`}     & \~{o} & \tac{\~}  & \v{o} & \tac{\v}     & \c{o} & \tac{\c}
        & \"{o} & \verb§\"{o}§ \\
    \'{o} & \tac{\'}     & \={o} & \tac{\=}  & \H{o} & \tac{\H}     & \d{o} & \tac{\d}
        & \u{o} & \tac{\u} \\
    \^{o} & \tac{\^}     & \.{o} & \tac{\.}  & \r{o}& \tac{\r}      & \b{o} & \tac{\b}
        & \t{oo}& \tac[oo]{\t} \\
    \end{tabular}

    \caption{Cyrillic Letter о}
    \begin{tabular}{@{}*{4}{ll@{\hspace{6ex}}}ll@{}}
    \`{о} & \tac{\`}     & \~{о} & \tac{\~}  & \v{о} & \tac{\v}     & \c{о} & \tac{\c}
        & \"{о} & \verb§\"{о}§ \\
    \'{о} & \tac{\'}     & \={о} & \tac{\=}  & \H{о} & \tac{\H}     & \d{о} & \tac{\d}
        & \u{о} & \tac{\u} \\
    \^{о} & \tac{\^}     & \.{о} & \tac{\.}  & \r{о}& \tac{\r}      & \b{о} & \tac{\b}
        & \t{oo}& \tac[oo]{\t} \\
    \end{tabular}

    \caption{Cyrillic Letter в}
    \begin{tabular}{@{}*{4}{ll@{\hspace{6ex}}}ll@{}}
    \`{в} & \tac{\`}     & \~{в} & \tac{\~}  & \v{в} & \tac{\v}     & \c{в} & \tac{\c}
        & \"{в} & \verb§\"{в}§ \\
    \'{в} & \tac{\'}     & \={в} & \tac{\=}  & \H{в} & \tac{\H}     & \d{в} & \tac{\d}
        & \u{в} & \tac{\u} \\
    \^{в} & \tac{\^}     & \.{в} & \tac{\.}  & \r{в}& \tac{\r}      & \b{в} & \tac{\b}
        & \t{oo}& \tac[oo]{\t} \\
    \end{tabular}
    \end{center}
    \end{table}
\end{document}

答案1

你应该尝试一下这个包繁體中文,它对重音宏有更合适的定义。

可能存在错误,因为以下文档在繁體中文之前或之后加载字体规格

\documentclass{article}
\usepackage{xunicode}

\usepackage{fontspec}
\setmainfont{Linux Libertine O}

\begin{document}

Latin Letter o

\`{o}\~{o}\v{o}\c{o}\"{o}\'{o}\={o}\H{o}\d{o}\u{o}\^{o}\.{o}\r{o}\b{o}

\bigskip

Cyrillic Letter о

\`{о}\~{о}\v{о}\c{о}\"{о}\'{о}\={о}\H{о}\d{о}\u{о}\^{о}\.{о}\r{о}\b{о}

\bigskip

Cyrillic Letter в

\`{в}\~{в}\v{в}\c{в}\"{в}\'{в}\={в}\H{в}\d{в}\u{в}\^{в}\.{в}\r{в}\b{в}

\end{document}

繁體中文字体规格

在此处输入图片描述

没有\usepackage{xunicode}

在此处输入图片描述

相关内容