问题简要描述
在主要语言为希伯来语的文档中,我希望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
包将文档的主要语言配置为希伯来语,将次要语言配置为英语,然后在文档正文中创建两组subequation
s:一组包装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}
此代码在 XeLaTeX 和 LuaLaTeX 中均可运行,如果您更改主要语言,则不会中断。您可能希望将选项更改bidi=
为basic
LuaTeX 或bidi-r
XeLaTeX。
在某些情况下,可能对您有用的更简单的解决方案是设置在\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
。