algpseudocode/algorithmicx パッケージはヘブライ語の babel パッケージでは使用できません

algpseudocode/algorithmicx パッケージはヘブライ語の babel パッケージでは使用できません

次の LaTeX ドキュメント:

\documentclass{article}

\usepackage{ucs}
\usepackage[utf8x]{inputenc}
\usepackage[hebrew, english]{babel}

\usepackage{amsmath}
\usepackage{algorithm}
\usepackage[]{algpseudocode}

\makeatletter
\def\BState{\State\hskip-\ALG@thistlm}
\makeatother

\begin{document}
\selectlanguage{hebrew}{להלן אלגוריתם לדוגמא}\selectlanguage{english}
Here is an example algorithm:

\begin{algorithm}
\caption{My algorithm}\label{euclid}
\begin{algorithmic}[1]
\Procedure{MyProcedure}{}
\State $\textit{stringlen} \gets \text{length of }\textit{string}$
\State $i \gets \textit{patlen}$
\BState \emph{top}:
\If {$i > \textit{stringlen}$} \Return false
\EndIf
\State $j \gets \textit{patlen}$
\BState \emph{loop}:
\If {$\textit{string}(i) = \textit{path}(j)$}
\State $j \gets j-1$.
\State $i \gets i-1$.
\State \textbf{goto} \emph{loop}.
\State \textbf{close};
\EndIf
\State $i \gets i+\max(\textit{delta}_1(\textit{string}(i)),\textit{delta}_2(j))$.
\State \textbf{goto} \emph{top}.
\EndProcedure
\end{algorithmic}
\end{algorithm}
\end{document} 

次のエラーが発生します。

 /usr/local/texlive/2020/texmf-dist/tex/latex/algorithmicx/algorithmicx.sty, line 636

Missing \endcsname inserted.

<to be read again> 
                   \protect 
l.636 \algnewlanguage{default}
                              %
The control sequence marked <to be read again> should
not appear between \csname and \endcsname.

\usepackage[hebrew, english]{babel}を に置き換えると\usepackage[english]{babel}エラーは解消されますが、ヘブライ語は使用できなくなります。

これを修正するにはどうすればいいでしょうか?

答え1

以下は LuaLaTEX でコンパイルされた動作例です。

\documentclass{article}

\usepackage[main=english, bidi=basic, layout=sectioning.tabular]{babel}
\usepackage{fontspec}
\babelprovide[import]{hebrew}

\babelfont{rm}
          [Ligatures={Common,Discretionary,TeX}]{Libertinus Serif} % Or any font that supports Hebrew.
\babelfont{sf}
          [Ligatures={Common,Discretionary,TeX}]{Libertinus Sans}
\babelfont{tt}
          [Ligatures=TeX]{Libertinus Mono}


\usepackage{amsmath}
\usepackage{algorithm}
\usepackage[]{algpseudocode}

\makeatletter
\def\BState{\State\hskip-\ALG@thistlm}
\makeatother

\begin{document}
\selectlanguage{hebrew}{להלן אלגוריתם לדוגמא}\selectlanguage{english}

Here is an example algorithm

\begin{algorithm}
\caption{My algorithm}\label{euclid}
\begin{algorithmic}[1]
\Procedure{MyProcedure}{}
\State $\textit{stringlen} \gets \text{length of }\textit{string}$
\State $i \gets \textit{patlen}$
\BState \emph{top}:
\If {$i > \textit{stringlen}$} \Return false
\EndIf
\State $j \gets \textit{patlen}$
\BState \emph{loop}:
\If {$\textit{string}(i) = \textit{path}(j)$}
\State $j \gets j-1$.
\State $i \gets i-1$.
\State \textbf{goto} \emph{loop}.
\State \textbf{close};
\EndIf
\State $i \gets i+\max(\textit{delta}_1(\textit{string}(i)),\textit{delta}_2(j))$.
\State \textbf{goto} \emph{top}.
\EndProcedure
\end{algorithmic}
\end{algorithm}
\end{document} 

助けてくれた@ulrike-fischerに感謝します

関連情報