使用 algorithmic+algpsuedocode 进行多语言排版,产生倒括号

使用 algorithmic+algpsuedocode 进行多语言排版,产生倒括号

我正在尝试使用 XeTex 引擎编写一篇文章。在我的文档中,我使用了algorithmicalgpsuedocode包来描述一种算法。

此外,该文档旨在包含希伯来语和英语,因此我使用了 polyglossia 包,并且由于算法是英文的,因此我\begin{english}按照 polyglossia 的文档将其放在环境中。输出在函数名称中包含反向括号。

这是完整的文档

\documentclass{article}

\usepackage{algorithm,algpseudocode}

\usepackage{polyglossia}
\usepackage{fontspec}
\setdefaultlanguage{hebrew}
\setotherlanguage{english}
\newfontfamily{\englishfont}{Latin Modern Roman}
\newfontfamily{\hebrewfont}[Script=Hebrew]{David CLM}
\newfontfamily{\hebrewfontsf}[Script=Hebrew]{Miriam CLM}
\newfontfamily{\hebrewfonttt}[Script=Hebrew]{Miriam Mono CLM}

\begin{document}
\section{אלגוריתם לדוגמה}

\begin{english}
\begin{algorithm}
    \caption{Euclid’s algorithm}
    \label{euclid}
    \begin{algorithmic}[1] % The number tells where the line numbering should start
        \Procedure{Euclid}{$a,b$} \Comment{The g.c.d. of a and b}
            \State $r\gets a \bmod b$
            \While{$r\not=0$} \Comment{We have the answer if r is 0}
                \State $a \gets b$
                \State $b \gets r$
                \State $r \gets a \bmod b$
            \EndWhile\label{euclidendwhile}
            \State \textbf{return} $b$\Comment{The gcd is b}
        \EndProcedure
    \end{algorithmic}
\end{algorithm}
\end{english}
\end{document}

但是,正如您在输出中看到的,括号的顺序不正确。 算法输出截图

我对其内部结构了解不多,但是在文件中algpsuedocode.sty我可以看到以下内容:

\algdef{SE}[FUNCTION]{Function}{EndFunction}%
   [2]{\algorithmicfunction\ \textproc{#1}\ifthenelse{\equal{#2}{}}{}{(#2)}}%
   {\algorithmicend\ \algorithmicfunction}%

这可能是问题的根源吗?

答案1

这是一个错误,polyglossia已在 1.61 版(2023/04/16)中修复。

Overleaf 显然有一个旧版本。您可以通过在文档前言中添加以下内容来解决此问题:

    \makeatletter
    \providecommand*\xpg@set@group@aux{}
    \providecommand*\xpg@unset@group@aux{}
    \renewenvironment{otherlanguage}[2][]
    {
        \xpg@set@group@aux%
        \selectlanguage[#1]{#2}%
        \xpg@set@normalfont{#2}%
    }
    {\xpg@unset@group@aux}
    \makeatother

编辑:提供\xpg@set@group@aux{}\xpg@unset@group@aux{}因为这些不是在所有版本中。

相关内容