polyglossia 和 algorithmicx - 缺少 \endcsname 插入

polyglossia 和 algorithmicx - 缺少 \endcsname 插入

尝试使用多语言编写一个以希伯来语为默认语言的简单文档:

\documentclass[a4paper]{article}
\TeXXeTstate=1
\usepackage{amsmath, amssymb}
\usepackage{polyglossia}
\setdefaultlanguage[calendar=hebrew, numerals=hebrew]{hebrew}
\setotherlanguage{english}
\setmainfont{David CLM}
\usepackage[noend]{algpseudocode}

\begin{document}
\section{}
  שלום
  \begin{english}
    Procedure(A)
    \begin{algorithmic}[1]
      \State $A = 0$
    \end{algorithmic}
  \end{english}
\end{document}

使用 XeTeX 的结果如下:

! Missing \endcsname inserted.
<to be read again> 
                   \relax 
l.15     \begin{algorithmic}[1]

如果我将默认语言设置为英语,将其他语言设置为希伯来语,则可以正常工作。

答案1

解决方法是将以下代码放入序言中:

\usepackage{etoolbox}
\makeatletter
\let\ORI@arabic\@arabic
\expandafter\pretocmd\csname\string\algorithmic\endcsname
  {\let\@arabic\ORI@arabic}{}{}
\renewcommand{\theALG@storecount}{\ORI@arabic\c@ALG@storecount}
\makeatother

奇怪的代码旨在将代码注入“真实”宏中,以完成预期的工作\algoritmic

答案2

因为在评论中您说您想要阿拉伯数字,所以将您的最小示例更改为以下内容而不会出现阿拉伯数字的问题:

\documentclass[a4paper]{article}
\usepackage{amsmath, amssymb}
\usepackage[noend]{algpseudocode}
\usepackage{polyglossia}
\setdefaultlanguage[calendar=hebrew]{hebrew}
\setotherlanguage{english}
\setmainfont{David CLM}

\begin{document}
\section{}
  שלום
  \begin{english}
    Procedure(A)
    \begin{algorithmic}[1]
      \State $A = 0$
    \end{algorithmic}
  \end{english}
\end{document}

相关内容