XeTeX 与 CJK:数字符号字体错误

XeTeX 与 CJK:数字符号字体错误

我在 Windows 上的 MiKTeX 2.9 环境中使用 XeTeX。最近,我将 xeCJK 包添加到一个较大的文档中,以包含一段简短的中文段落。然而,这导致(除其他外)数字符号以错误的字体显示:它会自动切换到 MingLiU 而不是 Linux Libertine。以下是一个例子:

\documentclass{article}

\usepackage[no-math]{fontspec}
\usepackage[indentfirst=false]{xeCJK}
%\usepackage[fallback,indentfirst=false]{xeCJK}
\usepackage{amsmath}
\setmainfont[Mapping=tex-text,Variant=01]{Linux Libertine O}
\setCJKmainfont{MingLiU}
%\setCJKfallbackfamilyfont{rm}{Linux Libertine O}

\usepackage{xltxtra}
\usepackage[russian,ngerman,american]{babel}
\usepackage{ifthen}
\usepackage{fancyhdr}
\usepackage{setspace}
\usepackage{enumitem}
\usepackage{graphicx}
\usepackage{hyperref}

\begin{document}

漢語大詞典 Test test
\No 3

\end{document}

我能否以某种方式防止这种情况发生,例如通过在 \No 之前明确选择一种字体或通过停用 CJKmainfont 的自动选择(这只是一小段文字,我可以轻松地用宏将其括起来)?

除了“\No”之外,我还尝试了 textcomp 包中的 \textnumero,结果相同。

谢谢你!

答案1

这对我有用(不使用 xeCJK)

\documentclass{article}
\usepackage{amsmath}
\usepackage[no-math]{fontspec}
\setmainfont[Mapping=tex-text,Variant=01]{Linux Libertine O}
\newfontfamily\MingLiu{MingLiU.ttf}

\usepackage[russian,ngerman,american]{babel}

\begin{document}

{\MingLiu 漢語大詞典} Test test
\No 3

\end{document}

在此处输入图片描述

答案2

暂时停用 xeCJK 并重新定义\No

\documentclass{article}

\usepackage[no-math]{fontspec}
\usepackage[indentfirst=false]{xeCJK}
\setmainfont[Ligatures=TeX]{Lucida Grande}
\setCJKmainfont{Kaiti SC}

\usepackage{newunicodechar}
\newunicodechar{№}{{\makexeCJKinactive №}}
\let\No №

\begin{document}

漢語大詞典 Test test
№3 \No 3
漢語大詞典 Test test
\end{document}

我使用了 Lucida Grande 来更好地显示选择了正确的字体。

在此处输入图片描述

你可能只是重新\No定义

\protected\def\No{{\makexeCJKinactive^^^^2116}}

而不是上面三行,但是直接使用Unicode字符是不行的。

答案3

似乎有一个错误,xeCJK(U+2116) 视为 CJK 全宽左标点。此错误出现在xeCJK版本 3.0.3(ctex-kit 项目的 r323)中。我会修复它。

在修复此错误之前,您可以使用

\xeCJKDeclareCharClass{Default}{"2116}

来解决问题。


完整示例:

\documentclass{article}

\usepackage[indentfirst=false]{xeCJK}
\setmainfont[Mapping=tex-text,Variant=01]{Linux Libertine O}
\setCJKmainfont{MingLiU}

\xeCJKDeclareCharClass{Default}{"2116}

\begin{document}
漢語大詞典 Test test
\textnumero 3 №3
\end{document}

笔记:

Herbert 的解决方案确实有效,但它禁用了 的所有功能xeCJK,包括正确的换行。如果您只需要排版几个 CJK 字符,那么这就是解决方案。但是,如果要排版多个段落,我认为这不是一个好方法。

egreg 的快速解决方案比 Herbert 的要好,但是newunicodechar有点过度了。

相关内容