创建包含混合语言的文档

创建包含混合语言的文档

我正在用中文和希伯来语输入文档。当我使用以下中文代码时,一切正常:

\documentclass[UTF8]{ctexart}

\begin{document}

    \tableofcontents

    \begin{abstract}
        这是简介及摘要。
    \end{abstract}

    \section{ 前言 }

    \section{关于数学部分}
    数学、中英文皆可以混排。You can intersperse math, Chinese and English (Latin script) without adding extra environments.

    這是繁體中文。

\end{document}

但当我尝试添加希伯来语时

\usepackage[utf8x]{inputenc} \usepackage[hebrew,english]{babel}

它无法正确编译。错误消息是

字体 LHE/cmr/m/n/10=jerus10 at 10.0pt 无法加载:未找到度量 (TFM) 文件。\select@language{hebrew}

有人知道如何解决这个问题吗?

答案1

更新答案

自 2020 年 7 月起,可以babel根据源文件中字符的语言选择正确的语言和字体。这样,我就可以发布完整的答案来回答您的问题,而这确实不需要在文档正文中明确标记语言。

\documentclass{article}
\tracinglostchars=2
\usepackage[paperwidth=10cm]{geometry}
\usepackage{iftex}

\ifluatex
  \usepackage[bidi=basic]{babel}
  \usepackage{fontspec}
  \defaultfontfeatures{ Scale=MatchLowercase,
                        Ligatures=TeX,
                        Renderer=HarfBuzz }
\else
  \usepackage[bidi=default]{babel}
  \usepackage{fontspec}
  \defaultfontfeatures{ Scale=MatchLowercase,
                        Ligatures=TeX }
\fi

\babelprovide[import, onchar=ids fonts]{hebrew}
\babelprovide[import, onchar=ids fonts]{chinese-simplified}
\babelprovide[import, onchar=ids fonts]{chinese-traditional}

\babelfont{rm}
          [Scale=1.0, Ligatures=Common]{Latin Modern Roman}
\babelfont{sf}
          [Ligatures=Common]{Latin Modern Sans}
\babelfont[hebrew]{rm}
          [Language=Default,
           UprightFont=*-Medium,
           ItalicFont=*-MediumItalic,
           BoldFont=*-Bold,
           BoldItalicFont=*-BoldItalic,
           Extension=.otf
          ]{DavidCLM}
\babelfont[hebrew]{sf}
          [Language=Default]{Miriam CLM}
\babelfont[chinese-simplified]{rm}
          {Noto Serif CJK SC}
\babelfont[chinese-simplified]{sf}
          {Noto Sans CJK SC}
\babelfont[chinese-traditional]{rm}
          {Noto Serif CJK TC}
\babelfont[chinese-traditional]{sf}
          {Noto Sans CJK TC}

\begin{document}

    \tableofcontents

    \begin{abstract}
        这是简介及摘要。
    \end{abstract}

    \section{前言}

    \section{关于数学部分}
    数学、中英文皆可以混排。 You can intersperse
    math, Chinese and English (Latin script) או עברית
    without adding extra environments.

    這是繁體中文

\end{document}

Babel 字体示例

这个例子确实不太正确。我查看时发现繁体中文字体覆盖了简体中文。输出中只使用了繁体中文字体,尽管我相信简体中文字符使用的 Unicode 码点与繁体中文字符不同。当两种语言共享同一种脚本时,请小心!

原始答案

的软件包[hebrew]选项babel实际上不再起作用。它尝试以 8 位 LHE 编码加载一组旧字体。(在这种情况下,它甚至不是在寻找 Type 1 字体,而是在寻找位图字体的 Metafont 源。)理论上,有一个名为 ivritex 的软件包,它应该为此提供向后兼容性;实际上,维护者说切换到 Unicode 要简单得多。使用新的工具链还可以避免使 UTF-8 和 Unicode 字体主要与固有的 8 位 TeX 引擎一起工作所需的所有黑客攻击。

解决方法是改为使用 加载希伯来语\babelprovide[import=he]{hebrew}。然后必须将[bidi=default]包选项传递给babel以使双向文本正常工作。要将输出编码更改为 Unicode,您需要使用 定义一组字体\babelfont

这是一个例子。我将ctexart文档类更改articlebabel,并将所有字体设置为babelfont,主要是因为ctex没有英文文档。我无法告诉您它与babel或 的兼容性如何polyglossia。如果使用多种语言编写而不需要特殊标记很重要,您可以尝试ucharclasses,但您可能会遇到从右到左的语言(例如希伯来语或阿拉伯语)的问题。

\documentclass{article}
\usepackage[paperwidth=10cm]{geometry}
\usepackage[bidi=default]{babel}
\usepackage{fontspec}

\babelprovide[main, import=en, language=Default]{english}
\babelprovide[import=he]{hebrew}
\babelprovide[import]{chinese-simplified}
\babelprovide[import]{chinese-traditional}

\babelfont{rm}
          [Scale=1.0, Ligatures={Common, TeX}]{Latin Modern Roman}
\babelfont{sf}
          [Scale=MatchLowercase, Ligatures={Common, TeX}]{Latin Modern Sans}
\babelfont[hebrew]{rm}
          [Scale=MatchLowercase, Language=Default]{David CLM}
\babelfont[hebrew]{sf}
          [Scale=MatchLowercase, Language=Default]{Miriam CLM}
\babelfont[chinese-simplified]{rm}
          [Scale=MatchLowercase]{Noto Serif CJK SC}
\babelfont[chinese-simplified]{sf}
          [Scale=MatchLowercase]{Noto Sans CJK SC}
\babelfont[chinese-traditional]{rm}
          [Scale=MatchLowercase]{Noto Serif CJK TC}
\babelfont[chinese-traditional]{sf}
          [Scale=MatchLowercase]{Noto Sans CJK TC}

\begin{document}

    \tableofcontents

    \begin{abstract}
      \begin{otherlanguage}{chinese-simplified}
        这是简介及摘要。
      \end{otherlanguage}
    \end{abstract}

    \section{\foreignlanguage{chinese-simplified}{前言}}

    \section{\foreignlanguage{chinese-simplified}{关于数学部分}}
    \foreignlanguage{chinese-simplified}{数学、中英文皆可以混排。} You can intersperse
    math, Chinese and English (Latin script) \foreignlanguage{hebrew}{או עברית}
    without adding extra environments.

    \foreignlanguage{chinese-traditional}{這是繁體中文。}

\end{document}

多语言示例文本

“无需添加额外环境”现在是一个赤裸裸的谎言。你可以将语言改为中文main而不是英文,但随后你将不得不本地化某些字符串,例如目录。调用geometry只是为了让输出适合此处允许的图像大小。

如果您正在用中文和希伯来语编写文档,那么您的系统上可能已经安装了这些语言的字体,可以用它们替换我挑选的字体。您不需要任何特殊的 TeX 字体fontspec;任何现代系统字体都可以使用。如果您想安装我在本例中使用的字体,您应该按顺序从以下来源之一安装。A:操作系统软件包,例如Ubuntu 上的fonts-noto-cjkculmus;B:CTAN 软件包,例如notoCJKsc;C:来自Culmus 项目Noto CJK 主页

它使用 XeLaTeX 编译,需要 Babel 3.27 或更高版本,并且是为了解决 3.27 中忽略默认字体功能的错误而编写的\babelfont。已经有一个补丁可以修复此问题。

相关内容