如何让子方程编号使用希伯来字母?

如何让子方程编号使用希伯来字母?

问题简要描述

在主要语言为希伯来语的文档中,我希望subequation使用希伯来语(而不是英语)字母表以及从右到左的方向对 s 进行编号,如下面的屏幕截图所示:

希伯来语子等式

该屏幕截图是从下一节中的屏幕截图中获得的,通过剪切并粘贴以下代码生成的 PDF 中的编号:

\documentclass{article}
\usepackage[bidi=basic,english,hebrew,provide=*]{babel}
\babelfont{rm}[Renderer=HarfBuzz]{FreeSerif}
\usepackage{amsmath}
\begin{document}
$(\text{$1$א})$\par
$(\text{$1$ב})$\par
$(\text{$2$א})$\par
$(\text{$2$ב})$
\end{document}

通过最小工作示例演示问题

我在文件中保存了以下 LaTeX 代码~/Test.tex

\documentclass{article}
\usepackage[bidi=basic,english,hebrew,provide=*]{babel}
\babelfont{rm}[Renderer=HarfBuzz]{FreeSerif}
\usepackage{amsmath}
\begin{document}
\begin{subequations}
\begin{align}
a&=b+c\\
d&=e+f
\end{align}
\end{subequations}

\begin{subequations}
\begin{alignat}{2}
u&=v&&-w\\
x&=y&&-z
\end{alignat}
\end{subequations}
\end{document}

代码使用该babel包将文档的主要语言配置为希伯来语,将次要语言配置为英语,然后在文档正文中创建两组subequations:一组包装align环境,一组包装alignat环境。

然后我在终端中执行了以下命令。

> cd ~
> lualatex Test

这导致创建了文件~/Test.pdf,当在 PDF 查看器中打开时,显示如下。(我仅截取了显示的相关部分。)

子方程

从中可以看出,编号使用英文字母,并从左到右排列,即编号的数字部分位于字母部分的左边。

问题

我怎样才能让subequation编号使用希伯来字母?此外,编号的方向应该是从右到左,以便将编号的字母部分打印到左边编号的数字部分,如本帖的第一张截图所示。

评论

我使用babel+LuaLaTex 组合来排版希伯来语文档。需要其他组合的解决方案(例如polyglossia+XeLaTeX)将不被视为合适的解决方案。

答案1

您需要修改subequations中的代码amsmath。在这里,我创建了一个名为 的新环境heSubequations,但您也可以重新定义subequations

\documentclass{article}
\usepackage[bidi=default,
            main=english,
            hebrew,
            provide+=*,
            layout=counters.sectioning.tabular
           ]{babel}
\usepackage{amsmath} % Also loaded by unicode-math.
\usepackage{unicode-math}

\defaultfontfeatures{ Renderer = HarfBuzz, Ligatures=TeX }
\babelfont{rm}[Ligatures=Common]{Libertinus Serif} % Or your fonts of choice.
\babelfont{sf}[Ligatures=Common]{Libertinus Sans}
\babelfont{tt}{Libertinus Mono}
\setmathfont{Libertinus Math}

% Based on the code for subequations in amsmath.
\makeatletter
\newenvironment{heSubequations}{%
  \refstepcounter{equation}%
  \protected@edef\theparentequation{\theequation}%
  \setcounter{parentequation}{\value{equation}}%
  \setcounter{equation}{0}%
  \def\theequation{%
    \foreignlanguage{hebrew}{%
      \theparentequation%
      \localecounter{letters}{equation}%
      }}%
  \ignorespaces
}{%
  \setcounter{equation}{\value{parentequation}}%
  \ignorespacesafterend
}
\makeatother

\begin{document}
\begin{heSubequations}
\begin{align}
a&=b+c\\
d&=e+f
\end{align}
\end{heSubequations}

\begin{heSubequations}
\begin{alignat}{2}
u&=v&&-w\\
x&=y&&-z
\end{alignat}
\end{heSubequations}
\end{document}

Libertinus 样本

此代码在 XeLaTeX 和 LuaLaTeX 中均可运行,如果您更改主要语言,则不会中断。您可能希望将选项更改bidi=basicLuaTeX 或bidi-rXeLaTeX。

在某些情况下,可能对您有用的更简单的解决方案是设置在\alph以希伯来语为主要语言的任何地方使用希伯来语字母:

\babelprovide[import, main, alph=letters]{hebrew}

给你更简单的代码:

\documentclass{article}
\usepackage[bidi=basic,
            english,
            layout=counters.sectioning.tabular
           ]{babel}
\usepackage{amsmath} % Also loaded by unicode-math.
\usepackage{unicode-math}

\babelprovide[import, main, alph=letters]{hebrew}

\defaultfontfeatures{ Renderer = HarfBuzz, Ligatures=TeX }
\babelfont{rm}[Ligatures=Common]{Libertinus Serif} % Or your fonts of choice.
\babelfont{sf}[Ligatures=Common]{Libertinus Sans}
\babelfont{tt}{Libertinus Mono}
\setmathfont{Libertinus Math}

\begin{document}
\begin{subequations}
\begin{align}
a&=b+c\\
d&=e+f
\end{align}
\end{subequations}

\begin{subequations}
\begin{alignat}{2}
u&=v&&-w\\
x&=y&&-z
\end{alignat}
\end{subequations}
\end{document}

当我在 LuaLaTeX 中使用时,这对我来说有效bidi=basic,但在 XeLaTeX 或 中会中断bidi=default

相关内容