algorithmicx + babel + 希伯来语不兼容

algorithmicx + babel + 希伯来语不兼容

babel当尝试使用和创建任何文档时algorithmicx,例如:

\documentclass{article}
\usepackage[hebrew,english]{babel}
\usepackage{algorithmicx}

\begin{document}
Hello, world.
\end{document}

我收到一个错误algorithmicx.sty

...
("C:\Program Files\MiKTeX 2.9\tex\latex\algorithmicx\algorithmicx.sty"
("C:\Program Files\MiKTeX 2.9\tex\latex\base\ifthen.sty")
Document Style algorithmicx 1.2 - a greatly improved `algorithmic' style
! Missing \endcsname inserted.
<to be read again> 
                   \protect 
l.636 \algnewlanguage{default}
                          %

这与算法 + 希伯来语 巴别塔冲突对此我得到了有用的答案 - 但只是在似乎存在长期存在的软件包冲突的情况下由于某种原因尚未在分发中得到解决的意义上。

我正在使用 MikTeX 2.9。

答案1

这和您链接的问题中提到的问题是一样的:hebrew 重新定义了 \@arabic,导致 algorithmicx 失败。在我看来,有问题的包是 algorithmicx。它不应该使用 \arabic 来获取数字。

\documentclass{article}

\usepackage[hebrew,english]{babel}
\makeatletter
\def\@arabic#1{\number#1}
\makeatother
\usepackage{algorithmicx}

\begin{document}
Hello, world.
\end{document}

答案2

引用自source2e,在处理 时\newcounter{foo}

\thefoo\p@foo 必须以这样的方式定义,即\edef\bar{\thefoo}\edef\bar{\p@foo}定义,\bar以便它将评估在 时计数器的值\edef,即使在\c@foo和 任何其他计数器已更改之后。如果您使用标准命令\@arabic\@Roman等,就会发生这种情况。

(来源说\foocounter,但应该是\c@foo)。

不幸的是,巴别塔希伯来语模块重新定义的\@arabic方式与所规定的规范不兼容source2e:这是在

\let\@@arabic\@arabic
\def\@arabic#1{\@number{\@@arabic#1}}
\def\@number{\protect\@@number}
\def\@@number#1{\ifmmode\else\beginL\fi#1\ifmmode\else\endL\fi}

任何依赖于\thefoo扩展来表示计数器值的命令的包也会遭遇同样的问题。

相关内容