fontspec / babelfont:混合中文和英文 | 中文和英文文本中的拉丁字体不同 | Google Noto 字体

fontspec / babelfont:混合中文和英文 | 中文和英文文本中的拉丁字体不同 | Google Noto 字体
  • 我想在一个文档中混合中文和英文。
  • 对于每种语言,我都会使用段落(而不仅仅是短句)。
  • 我想使用 Google 的 Noto 字体。
  • 问题是,当我在中文环境中使用英语时拉丁字符看起来不同。
  • 当我\babelfont{rm}{Noto Serif}用替换时\babelfont{english}{Noto Serif},结果不同,但仍然不行。
  • 我的目标是在英语和中文环境中使用相同的拉丁字符(相同的字体)

\documentclass{article}

\usepackage[english]{babel}
% babelprovide for *english* (default language of the document)
\babelprovide[
    main,
    import,
    language = Default]
    {english}

% babelprovide for *chinese-simplified*
\babelprovide[
    import,
    language = Chinese Simplified]
    {chinese-simplified}

%% Choose actual fonts for different font variants.
\babelfont{rm}{Noto Serif}
%\babelfont{english}{Noto Serif}
\babelfont[chinese-simplified]{rm}{Noto Serif CJK SC}

\begin{document}

\selectlanguage{english}ABCabc
\selectlanguage{chinese-simplified}ABCabc

\end{document}

在此处输入图片描述


%\babelfont{rm}{Noto Serif}
\babelfont{english}{Noto Serif}

在此处输入图片描述


有关的:babel:使用 Google NotoFonts 混合英文和中文

答案1

最近babel(见babel-3.38 中的新功能),您只需按照以下方式告诉它根据脚本切换语言(换行规则)和字体:

\documentclass{article}

\usepackage[english]{babel}

% Don't reload english, just modify it to switch the language and the
% font depending of the script:    
\babelprovide[onchar=ids fonts]{english}

\babelprovide[
    import,
    language = Chinese Simplified]
    {chinese-simplified}

%% Choose actual fonts for different font variants.
\babelfont{rm}{Noto Serif}
\babelfont[chinese-simplified]{rm}{Noto Serif CJK SC}

\begin{document}

\selectlanguage{english}ABCabc
\selectlanguage{chinese-simplified}ABCabc

\end{document}

答案2

您可以尝试(新的)多脚本选项。但是您会收到来自 fontspec 的一些警告:

\documentclass{article}


\usepackage[english]{babel}
% babelprovide for *english* (default language of the document)
\babelprovide[
    main,
    import,
    language = Default]
    {english}

% babelprovide for *chinese-simplified*
\babelprovide[
    import,
    language = Chinese Simplified]
    {chinese-simplified}
\directlua{
luaotfload.add_multiscript
 ("latn-hani",
  {
    Hani = "Noto Serif CJK SC:mode=node;script=hani;",
  }
 )
}
\babelfont{rm}[RawFeature={multiscript=latn-hani}]{Noto Serif}


\begin{document}

\selectlanguage{english}ABCabc 你好
\selectlanguage{chinese-simplified}ABCabc 你好

\end{document}

在此处输入图片描述

答案3

确实,“Noto Serif CJK SC” 的拉丁字形明显比“Noto Serif”的相应粗细要轻。我不知道有任何文档解释这种设计选择。但是,值得注意的是,“Noto Serif” 的拉丁字形看起来像是中文文本范围内的(轻微)强调。你可以在 Ulrike 的回答中看到这一点。另一种方法是用一种语言明确标记拉丁字符:

ABCabc

{\selectlanguage{chinese-simplified} 简化字总表 ABCabc 简化字总表}

{\selectlanguage{chinese-simplified} 简化字总表 \foreignlanguage{english}{ABCabc} 简化字总表}

ABCabc

在此处输入图片描述

在第二行中,拉丁文字与中文文字融为一体,而在第三行中,拉丁文字则显得更为突出。

现在 Noto 有多种不同的字重。如果 CJK-Regular 比 Latin-Regular 更轻,我们可以尝试将 CJK-Regular 与 Latin-Light 结合起来:

\documentclass{article}

\usepackage[english]{babel}
% babelprovide for *english* (default language of the document)
\babelprovide[
    main,
    import,
    language = Default]
    {english}

% babelprovide for *chinese-simplified*
\babelprovide[
    import,
    language = Chinese Simplified]
    {chinese-simplified}

%% Choose actual fonts for different font variants.
\babelfont{rm}[
  UprightFont=*-Light,
  BoldFont=*-Medium,
]{Noto Serif}
\babelfont[chinese-simplified]{rm}{Noto Serif CJK SC}

\begin{document}

ABCabc

{\selectlanguage{chinese-simplified} 简化字总表 ABCabc 简化字总表}

{\selectlanguage{chinese-simplified} 简化字总表 \foreignlanguage{english}{ABCabc} 简化字总表}

ABCabc

\end{document}

在此处输入图片描述

匹配并不完美,但非常接近。原则上也可以选择稍微暗一点的 CJK。不过我现在还没有安装这些。

答案4

扩展拉丁语和中文的主题:

两个部分:

第一部分是,它不会Babel像包那样根据字形所在的 Unicode 块来更改字体ucharclasses附录但看到关于最近的评论Babel

第二部分Noto Serif CJK SC也包含一些非 CJK 字形。

Noto Serif有拉丁文、西里尔文、希腊文和一些其他文字的字形。

Noto Serif CJK SC包含拉丁文、西里尔文和希腊文的主要部分,以及平假名、片假名、韩文、注音符号,当然还有很大一部分中日韩文字。

不比较

uchar类:

字符类

平均能量损失

\documentclass[12pt]{article}
\usepackage{xcolor}
\pagecolor{red!3}
\usepackage{fontspec}
\newfontface\fcjk{Noto Serif CJK SC}
\newfontfamily\feng{Noto Serif}

\usepackage[CJK]{ucharclasses}
\setTransitionsForCJK{\fcjk}{\feng}

\begin{document}
\large
{\color{blue}Noto Serif}

\feng 
\begin{tabular}{rl}
Latin & ABC abc \\
Currency symbols & ₣₤₥₦₧₨ \\
Cyrillic  & ЄДФЦжцабвг \\
Greek & ΣΤΥΦζεδγβα  \\
IPA \& Phonetic & ɐɠɰʁ ᴟᴞᴣᴇᴈᴗ \\
Letterlike Symbols & ℜℏ℈℃ℓℒ™ℵ⅀ \\
Modifier Tones & ꜀꜂꜈꜉꜊꜋꜌ꜗꜘꜙ \\
etc & ... \\
\end{tabular} 
\bigskip

\rmfamily
{\color{blue}Noto Serif CJK SC}

\fcjk
\begin{tabular}{rl}
Bopomofo & ㄆㄇㄈㄉㄊ \\
Box Drawing & ┢┤┩╆ \\
CJK & 㑣㐦㐧㕔 \\
some Latin & ABC abc \\
some Cyrillic  & ЄДФЦжцабвг \\
some Greek & ΣΤΥΦζεδγβα  \\
Hangul &  ᅣᅦᄄᆻ \\
Hiragana & あいいうえおかが \\
Katakana & アイウエオカガ \\
Letterlike Symbols & ℜℏ℈℃ℓℒ™ℵ⅀ \\
etc & ... \\
\end{tabular} 
\bigskip

\feng
\textit{ucharclasses}: {\small Changing fonts without having to insert font-changing code} -- Latin text. Chinese text: 紫薇北斗星  Modern Greek: Διαμ πριμα εσθ ατ, κυο πχιλωσοπηια Ancient Greek: Μῆνιν ἄειδε, θεά, Πηληϊάδεω Ἀχιλῆος. And regular latin text.

\end{document}

相关内容