我正在尝试使用 XeTex 引擎编写一篇文章。在我的文档中,我使用了algorithmic
和algpsuedocode
包来描述一种算法。
此外,该文档旨在包含希伯来语和英语,因此我使用了 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{}
因为这些不是在所有版本中。