加载希伯来语后,babel 和 amsthm 无法正常播放

加载希伯来语后,babel 和 amsthm 无法正常播放

我正在使用 LaTeX 工作,并尝试让 babel 和 amsthm 一起顺利运行。

我制作了一个最小的例子(它给出的错误与完整项目不同,但让它工作起来可能是我成功所需要的垫脚石)

\documentclass[hebrew,english]{memoir}  
\usepackage[utf8x]{inputenc}  
\usepackage{babel}  
\selectlanguage{english} 
\usepackage{amsmath}
\usepackage{amsthm}  
\newtheorem{theorem}{Theorem}[chapter]  
\begin{document}  
\chapter{Hello}  
This is some text.\newline  
\begin{theorem}  
This is a theorem.  
\end{theorem}  
\begin{otherlanguage}{hebrew}   
שלום  
\end{otherlanguage}  
\hfill\newline  
English again!  
\end{document}

这不能编译。如果符合以下条件,则可以编译:

  1. 我注释掉了这\begin{theorem}...\end{theorem}部分,
  2. 我完全不再使用 babel,或者
  3. 我只是从加载中删除了希伯来语(并注释掉了相关部分)。

错误信息是:

! Missing { inserted.  
<to be read again>   
                   T  
l.14 T  
      his is a theorem.  
A left brace was mandatory here, so I've put one in.  
You might want to delete and/or insert some corrections  
so that I will find a matching right brace soon.  
(If you're confused by all this, try typing `I}' now.)  

这个错误指出了该\begin{theorem}部分,还有另一个错误似乎与该\end{theorem}行有关,但略有不同:

)  
Runaway text?  
This is a theorem. \end {theorem} \begin {otherlanguage}{hebrew} \\ש\ETC.  
! File ended while scanning text of \dth@everypar.  
<inserted text>   
                }  
<*> babeltest.tex  

I suspect you have forgotten a \`}', causing me  
to read past where you wanted me to stop.  
I'll try to recover; but if the error is serious,  
you'd better type \`E' or \`X' now and fix your file.  

! Emergency stop.  

就项目而言,我不需要用希伯来语表述任何定理。我只需要一些文本和一些小的数学符号,这些也将附加到文档的末尾。

有没有办法让它们babel互相忽略amsthm,以便我可以为所有内容创建一个大项目,还是我需要为希伯来语部分创建一个单独的项目?

编辑:

似乎我的大项目的主要问题在于我定义了一长串\newtheorem和计数器(使用aliascnt),我认为这babel只是被所有这些新的计数器和定理样式所混淆。

关于如何纠正这个问题的任何信息也非常有用!

编辑二:

我刚刚注意到,当仅删除\begin{theorem}\end{theorem}行时,它可以编译而不会出现错误,但是“第1章“消失了。我还添加了 [回忆录] 标签,因为我认为它可能是babel和之间的内部冲突memoir


附言

如果我将类更改为其他类,则不起作用memoir。我只在主要项目中使用 memoir,因此我认为最好也将其保留在这里。

答案1

这是一个众所周知且令人痛苦的问题:rlbabel.def重新定义 \everypar,它被 所使用amsthm

这是一个不稳定的解决方法(不是最小的解决方法 - 我以@WD40 的不太 MWE 为基础):

\documentclass[hebrew,english]{memoir}
\usepackage[utf8x]{inputenc}
\usepackage{babel}
\makeatletter
\let\everypar\o@everypar
\makeatother
\selectlanguage{english}
\usepackage{amsmath}
\usepackage{amsthm}
\newtheorem{theorem}{Theorem}[chapter]
\begin{document}
\chapter{Hello}
This is some text.\newline
\begin{theorem}
This is a theorem.
\end{theorem}
\begin{otherlanguage}{hebrew}
שלום
\end{otherlanguage}
\hfill\newline
English again!
\end{document}

(是作为原始的别名存储的\o@everypar命令。)这可能会干扰s 操作。rlbabel.def\everyparamsthm

附言:

  • 这个问题确实和回忆录课没太大关系。
  • Enrico Gregorio 于 2006 年向我传达了这个解决方法。

答案2

amsthmbabel选项hebrew无法协同工作。如果我没记错的话,这是因为它们都定义了一个宏。切换到并使用该包\R可能会更幸运。xelatexpolyglossia

相关内容