当文档的语言为希伯来语时,showlabels 包在自定义方程式环境中会失败

当文档的语言为希伯来语时,showlabels 包在自定义方程式环境中会失败

另一篇帖子我问如何创建一个新的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,将产生以下输出。

egreg 在一份英文文档中的解决方案

如果现在通过取消注释四行注释并重新编译将文档的语言设置为希伯来语,则结果输出为:

希伯来语文档中的 egreg 解决方案

注意标签是如何消失的!在给出的解决方案中观察到了类似的结果BotonF 的回答。(请记住,希伯来语是一种从右到左的语言,因此文本的右对齐是可以预料的,并且不是问题。)

已经考虑了另外三种解决方案,但没有一种是合适的。

答案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}

在此处输入图片描述

相关内容