我正在用 LaTeX 编写包含英语和希伯来语文本的文档。它运行良好,但有一点除外:当希伯来语句子中的英语单词后面有标点符号时,该符号会放错位置。
这是一个可重现的小示例,文件名为test.tex
:
\documentclass{article}
\usepackage{polyglossia}
\setdefaultlanguage{hebrew}
\newfontfamily\hebrewfont{David CLM}
\let\hebrewfonttt\ttfamily
\begin{document}
המסמך הזה כתוב עם LaTeX, ומשלב בין עברית לאנגלית.
\par\noindent\rule{\textwidth}{0.4pt}
\setLTR
This document is written with LaTeX, and combines Hebrew and English.
\unsetLTR
\end{document}
我处理的方式如下:
xelatex test.tex
并得到以下结果:
在第一个(希伯来语)句子中,逗号放错了位置。在希伯来语句子中,逗号应该放在左边LaTeX 这个词,因为希伯来语文本是 RTL。
正确的排列可以在文本编辑器中看到,例如 gedit:
我对 LaTeX 不太熟悉,在网上也找不到解决方案。如能得到任何帮助,我将不胜感激!
答案1
XeTeX 和/或 bidi 包似乎无法正确处理这个问题。使用 lualatex 和 babel 时,它可以立即使用(我这里没有您的字体,因此请使用其他字体):
% compile with lualatex
\documentclass{article}
\usepackage[english, bidi=basic]{babel}
\usepackage{fontspec}
\babelprovide[import,main]{hebrew}
\babelfont{rm}{Libertinus Serif} %
\begin{document}
המסמך הזה כתוב עם LaTeX, ומשלב בין עברית לאנגלית.
\end{document}
答案2
如果可能的话,我建议使用 LuaTeX 进行双向排版,就像 Ulrike 建议的那样。这个答案只是为了以防有人想使用 XeTeX。
为了说明这是引擎本身的问题,您可以检查以下代码的结果
\font\david="David CLM Medium/OT:script=hebr,mapping=tex-text;"\david
\TeXXeTstate=1\beginR
המסמך הזה כתוב עם LaTeX, ומשלב בין עברית לאנגלית.
\bye
您可以通过设置更大的数字让 XeTeX 将 BiDi 算法应用于更大的文本块\XeTeXinterwordspaceshaping
,但它也可能产生其他副作用。
\font\david="David CLM Medium/OT:script=hebr,mapping=tex-text;"\david
\TeXXeTstate=1\beginR
\XeTeXinterwordspaceshaping=2
המסמך הזה כתוב עם LaTeX, ומשלב בין עברית לאנגלית.
\bye
或使用 XeLaTeX
\documentclass{article}
\usepackage{polyglossia}
\setdefaultlanguage{hebrew}
\newfontfamily\hebrewfont{David CLM}[Script=Hebrew]
\XeTeXinterwordspaceshaping=2
\begin{document}
המסמך הזה כתוב עם LaTeX, ומשלב בין עברית לאנגלית.
\end{document}