在另一篇帖子我问如何创建一个新的equation
类似 的环境,inequality
它将共享equation
的计数器。我收到了两个不错的答案。但是,在我感兴趣的另外两个条件下,这些答案并不令人满意。条件是:
- 将文档的语言通过设置为希伯来语
babel
。 - 显示标签。
我使用showlabels
包来显示标签,但我对这个包没有特别的依恋;如果我的问题有一个不使用 的解决方案showlabels
,它也会受到欢迎。另一方面,这个babel
包是解决方案被接受的硬性要求。
例如,egreg 对我另一篇帖子的回答\usepackage{showlabels}
,我在序言末尾添加了命令。
\documentclass{article}
%\usepackage[bidi=basic,hebrew,provide=*]{babel}
%\babelfont{rm}[Renderer=HarfBuzz]{FreeSerif}
%\babelfont{sf}[Renderer=HarfBuzz]{FreeSans}
%\babelfont{tt}[Renderer=HarfBuzz]{FreeMono}
\usepackage{cleveref}
\newenvironment{inequality}
{\crefalias{equation}{inequality}\begin{equation}}
{\end{equation}\ignorespacesafterend}
\crefname{inequality}{ineq.}{ineqs.}
\Crefname{inequality}{Ineq.}{Ineqs.}
\usepackage{showlabels}
\begin{document}
\begin{inequality}\label{q}
x \leq y
\end{inequality}
Behold~\cref{q}.
\begin{equation}\label{r}
x = y
\end{equation}
Behold~\cref{r}.
\end{document}
当通过两次调用 来编译此代码时lualatex
,将产生以下输出。
如果现在通过取消注释四行注释并重新编译将文档的语言设置为希伯来语,则结果输出为:
注意标签是如何消失的!在给出的解决方案中观察到了类似的结果BotonF 的回答。(请记住,希伯来语是一种从右到左的语言,因此文本的右对齐是可以预料的,并且不是问题。)
已经考虑了另外三种解决方案,但没有一种是合适的。
- Mico 的解决方案存在我所描述的问题这里,在希伯来语文档中,
inequality
环境的编号是左对齐的。 - 大卫·卡莱尔的解决方案存在的问题是,在希伯来语文档中,标签位于等式内部而不是页边距中。
- 哈维尔·贝佐斯的解决方案在希伯来语文档中运行良好,但在英语文档中失败,正如我所描述的在这个问题中(目前仍未得到解答)。我希望找到一个既适用于希伯来语文档,又适用于英语文档(以及双语文档)的解决方案。
答案1
并showlabels
修补showkeys
命令\@eqnnum
以在方程环境中检索标签。
遗憾的是,babel 在 中再次覆盖了此命令luababel.def
。您可以尝试这个(但我没有检查它是否与 cleveref 的额外并发症一起工作):
\documentclass{article}
\usepackage[bidi=basic,hebrew,provide=*]{babel}
\usepackage{showlabels}
\makeatletter
\AddToHook{cmd/bbl@eqnum/after}{%
\ifx\SL@labelname\relax
% do nothing
\else
\SL@eqntext{\SL@labelname}%
\fi
\global\let\SL@labelname\relax}
\makeatother
\begin{document}
\begin{equation}\label{r}
x = y
\end{equation}
\end{document}