我正在使用 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}
这不能编译。如果符合以下条件,则可以编译:
- 我注释掉了这
\begin{theorem}...\end{theorem}
部分, - 我完全不再使用 babel,或者
- 我只是从加载中删除了希伯来语(并注释掉了相关部分)。
错误信息是:
! 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
\everypar
amsthm
附言:
- 这个问题确实和回忆录课没太大关系。
- Enrico Gregorio 于 2006 年向我传达了这个解决方法。
答案2
amsthm
和babel
选项hebrew
无法协同工作。如果我没记错的话,这是因为它们都定义了一个宏。切换到并使用该包\R
可能会更幸运。xelatex
polyglossia