双向文档中 LTR 单词后的逗号位置错误

双向文档中 LTR 单词后的逗号位置错误

我正在用 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}

相关内容