使用 luatexja-fontspec 和 polyglossia 在英文 scrbook 中显示中文文本

使用 luatexja-fontspec 和 polyglossia 在英文 scrbook 中显示中文文本

我有以下文件:

\documentclass[12pt,a4paper,oneside]{scrbook}
\usepackage{fontspec}
\makeatletter
\usepackage{csquotes}
\usepackage{luacode}
%\usepackage[UTF8]{ctex}
\usepackage{luatexja-fontspec}
\usepackage{polyglossia}
\setdefaultlanguage[variant=american]{english}
%\setotherlanguage{chinese}
\usepackage{xstring}
\defaultfontfeatures{Mapping=tex-text}
\newfontfamily\chinesefont[Path=/usr/share/fonts/arphicfonts/]{UMing}

\makeatother

\begin{document}

The common transliteration of 易经 is {\enquote{I Ching,}} 
following the now-obsolete Wade-Giles system: modern Romanization 
of almost all modern Chinese texts follows the Hanyu Pinyin standard used here. 
See [huang].

\end{document}

当我尝试排版时,第二个中文字符排版不正确(我得到了一个带有 X 的框)。这不是唯一一个字符排版不正确的情况。如果我取消注释 ctex 的行,中文会正确呈现,但所有英文排版都错误。据我所知,polyglossia 不支持中文。我有一个大型文档,其中包含大量简短的中文和日文文本片段,但主要文档语言是英语(其他语言包括多音希腊语、法语、拉丁语、意大利语、俄语,呃……“voynich”)。有人告诉我 lualatex 在排版多种语言方面表现更好,但我无法让它工作。有什么建议吗?

答案1

如果你\tracinglostchars=2在序言中添加内容(或搜索文件.log),你会看到警告消息,

Missing character: There is no 经 (U+7ECF)
in font file:HaranoAjiMincho-Regular.otf:jfm=ujis!

这是因为尝试使用 的polyglossia命令luatexja-fontspec。您想设置\chinesefont为 UMing。但是,lualatex-ja不使用\chinesefont,并且您没有将文本标记为 Polyglossia 的中文。因此,您从 获得默认字体luatexja-fontspec。这是一种日文字体,因此它只包含恰好与 共享代码点的中文字符汉子

有多种方法可以解决这个问题。如果你想使用luatexja-fontspec,你应该使用它的命令来选择 CJK 字体、、\setmainjfont\newjfontfamily。如果你不想让包覆盖默认值,也可以设置英文文本。

您的 TeX 安装还应该能够在\usr\share\fonts\不带参数的情况下找到 子目录中的任何字体Path=。我不建议在您的文档中放置绝对值Path=,因为这将使您的文档无法在任何其他计算机上编译。此外, 中有多种字体uming.ttc,您应该指定您想要的字体。

\documentclass[12pt,a4paper,oneside]{scrbook}
\tracinglostchars=2
\usepackage[match]{luatexja-fontspec}
\usepackage{polyglossia}
\setdefaultlanguage[variant=american]{english}
\usepackage{csquotes}
%\setotherlanguage{chinese}
\usepackage{xstring}

\defaultfontfeatures{ Ligatures=TeX,
                      Scale=MatchUppercase }

\setmainfont{Latin Modern Roman}[Scale=1.0]
\setmainjfont{AR PL UMing TW}[Renderer=HarfBuzz]

\begin{document}

The common transliteration of 易经 is {\enquote{I Ching,}} 
following the now-obsolete Wade-Giles system: modern Romanization 
of almost all modern Chinese texts follows the Hanyu Pinyin standard used here. 
See [huang].

\end{document}

拉丁现代罗马体/UMing TW 样本

要使用ctex而不是luatexja-fontspec,请使用其命令来设置 CJK 字体,IE \newCJKmainfont。它不能很好地播放csquotes,因此您可能被迫\DeclareQuoteStyle

为了坚持polyglossia使用\chinesefont,您需要添加语言标记,例如 \textchinese{易经}。在XeLaTeX中,你可以配置ucharclasses自动将中文字符标记为中文。

最后,您可以使用。它不支持或babel的所有功能,但足以插入水平书写的单词和短语。与或不同,它支持同一文档中的多种表意书写系统。ctexluatexjaluatexjactex

您在评论中提到,您已经标记了许多文本polyglossia,但不想更改它们。您可以配置babel以支持polyglossia用户命令,例如\textenglish,还可以自动检测您正在输入的脚本,这样您就根本不需要标记许多语言。

\documentclass[12pt,a4paper,oneside]{scrbook}
\tracinglostchars=2
\usepackage[english]{babel}
\usepackage{fontspec}
\usepackage{csquotes}
%\setotherlanguage{chinese}
\usepackage{xstring}

\babelprovide[import=zh-hant, onchar=ids fonts]{chinese}
% Or import=zh-hans for Simplified Chinese.

\defaultfontfeatures{ Ligatures=TeX,
                      Scale=MatchUppercase }

\babelfont{rm}
          [Ligatures=Common, Scale=1.0]{Latin Modern Roman}
\babelfont[chinese]{rm}
          [Renderer=HarfBuzz]{AR PL Uming TW}

% Enable \textenglish, \begin{english}, etc.
\babeltags{english=english}
\babeltags{chinese=chinese}

\begin{document}

The common transliteration of 易经 is {\enquote{I Ching,}} 
following the now-obsolete Wade-Giles system: modern Romanization 
of almost all modern Chinese texts follows the Hanyu Pinyin standard used here. 
See [huang].

\end{document}

拉丁现代罗马体/UMing TW 样本

相关内容