考虑以下 MWE:
\documentclass[
hebrew,% breaks
farsi,% or arabic
% hebrew,% compiles
english]{article}
\usepackage[LAE,LFE,T1]{fontenc}
\usepackage[cp1255,utf8,latin9]{inputenc}
\usepackage{babel}
\begin{document}
Hello.
\end{document}
这与
! Argument of \o@everypar has an extra }. <inserted text>
\par l.126 \n@everypar\expandafter{\the\o@everypar}
然而,如果hebrew
在之后加载farsi
,它可以编译成功。
在我看来,这是由于rlbabel.def
(希伯来语使用)中的重新定义与arabicore.sty
(波斯语使用)中的重新定义不相容所致。
rlbabel.def
有:
\def\rl@everypar{\if@rl{\setbox\z@\lastbox\beginR\usebox\z@}\fi}
\let\o@everypar=\everypar
\def\everypar#1{\o@everypar{\rl@everypar#1}}
和arabicore.sty
:
\def\Arabi@rl@everypar{\if@rl{\setbox\z@\lastbox\beginR\usebox\z@}\fi}
\let\o@everypar=\everypar
\newtoks\n@everypar
\n@everypar\expandafter{\the\o@everypar}
\o@everypar{\Arabi@rl@everypar\the\n@everypar}
\let\everypar=\n@everypar
我说得对,问题出在前面的定义上,它为 添加了参数\everypar
?如何才能最优雅地修复这个问题?即使这两个包已经有一段时间没有更新了,我也想提交错误报告,但我不确定是哪个包。欢迎提供提示。
(我知道现在可以使用 LuaTeX/XeTeX,但这不是问题的关键。我真的想尽力帮助解决这个特殊情况)
编辑:这是我自己的一次小小的尝试。这修复了编译问题,但我不确定它是否真的做到了原始版本所做的事:
--- /tmp/meld-tmprm047c5p
+++ /home/juergen/texmf/tex/generic/babel/rlbabel.def
@@ -136,8 +136,11 @@
\def\@ensure@R#1{\if@rl#1\else\R{#1}\fi}
\def\@ensure@L#1{\if@rl\L{#1}\else#1\fi}
\def\rl@everypar{\if@rl{\setbox\z@\lastbox\beginR\usebox\z@}\fi}
-\let\o@everypar=\everypar
-\def\everypar#1{\o@everypar{\rl@everypar#1}}
+\let\rl@o@everypar=\everypar
+\newtoks\rl@n@everypar
+\rl@n@everypar\expandafter{\the\rl@o@everypar}
+\rl@o@everypar{\rl@everypar\the\rl@n@everypar}
+\let\everypar=\rl@n@everypar
\newcommand{\hmbox}[1]{\mbox{\R{#1}}}
\newcommand{\embox}[1]{\mbox{\L{#1}}}
\def\@brackets#1#2#3{\protect\if@rl #3#2#1\protect\else
@@ -289,7 +292,7 @@
\large \bfseries #1\hfil \hb@xt@\@pnumwidth{\hss#2}}\par
\nobreak
\global\@nobreaktrue
- \everypar{\global\@nobreakfalse\everypar{}}%
+ \def\rl@everypar{\global\@nobreakfalse\if@rl{\setbox\z@\lastbox\beginR\usebox\z@}\fi}%
\endgroup
\fi}}}
\@ifclassloaded{article}{% article class