我正在用中文和希伯来语输入文档。当我使用以下中文代码时,一切正常:
\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}
这个例子确实不太正确。我查看时发现繁体中文字体覆盖了简体中文。输出中只使用了繁体中文字体,尽管我相信简体中文字符使用的 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
文档类更改article
为babel
,并将所有字体设置为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-cjk
和culmus
;B:CTAN 软件包,例如notoCJKsc
;C:来自Culmus 项目和Noto CJK 主页。
它使用 XeLaTeX 编译,需要 Babel 3.27 或更高版本,并且是为了解决 3.27 中忽略默认字体功能的错误而编写的\babelfont
。已经有一个补丁可以修复此问题。