我刚刚注意到,如果我使用
阿诺专业版
或者
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}
: