newtxmath 和 amsthm 包之间的冲突

newtxmath 和 amsthm 包之间的冲突

我正在使用以下几个包编写具有书籍结构的文档:

\documentclass[letterpaper, 10pt, oneside]{book}
\usepackage{XCharter}
\usepackage[xcharter]{newtxmath}
\usepackage[cal=boondox,scr=boondox,bb=boondox,frak=euler]{mathalfa}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{amsthm}
\usepackage{mathtools}
\usepackage{enumerate}

我想使用包proof中的环境amsthm,但它会产生以下错误:Command \openbox already defined. \vrule\hfil}}。我注意到,虽然我的 LaTeX 编辑器没有给出任何文档预览,但实际上生成了一个.pdf文件,并且编译得很好。

我开始注释掉我以前使用的一些软件包,只是为了调试并查看是什么导致了问题。如果我注释掉\usepackage[xcharter]{newtxmath},警告就会消失。

根据错误和给出的答案这个问题,很明显newtxmathamsthm都在定义一个同时调用的命令\openbox。我该怎么做才能解决这个错误?我真的不想放弃这个newtxmath包和 XCharter 字体,我喜欢它们。

提前谢谢您。我提供 MWE:

\documentclass[letterpaper, 10pt, oneside]{book}
\usepackage{XCharter}
\usepackage[xcharter]{newtxmath}
\usepackage[cal=boondox,scr=boondox,bb=boondox,frak=euler]{mathalfa}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{amsthm}
\usepackage{mathtools}
\usepackage{enumerate}

\newcommand{\Ccal}{\mathcal{C}}
\newcommand{\Pcal}{\mathcal{P}}

\begin{document}
    Suppose $\Omega = \{0,1\}$ and $\Ccal = \{\{0\}\}$. Enumerate $\aleph$, the class of all $\sigma$-fields containing $\Ccal$.
    \begin{proof}
        There are just two $\sigma$-fields on $\Omega$: the trivial one $\{\emptyset, \Omega\}$ and the discrete one $\Pcal(\Omega) = \{\emptyset, \{0\}, \{1\}, \Omega\}$. So, $\aleph = \{\Pcal(\Omega)\}$.
    \end{proof}
\end{document}

答案1

\openbox由多个包定义

在此处输入图片描述

作为一种快速解决方法,你可以\openbox在加载之前取消定义amsthm

\documentclass[letterpaper, 10pt, oneside]{book}
\usepackage{XCharter}
\usepackage[xcharter]{newtxmath}
\usepackage[cal=boondox,scr=boondox,bb=boondox,frak=euler]{mathalfa}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\let\openbox\undefined

\usepackage{amsthm}
\usepackage{mathtools}
\usepackage{enumerate}

\newcommand{\Ccal}{\mathcal{C}}
\newcommand{\Pcal}{\mathcal{P}}

\begin{document}
    Suppose $\Omega = \{0,1\}$ and $\Ccal = \{\{0\}\}$. Enumerate $\aleph$, the class of all $\sigma$-fields containing $\Ccal$.
    \begin{proof}
        There are just two $\sigma$-fields on $\Omega$: the trivial one $\{\emptyset, \Omega\}$ and the discrete one $\Pcal(\Omega) = \{\emptyset, \{0\}, \{1\}, \Omega\}$. So, $\aleph = \{\Pcal(\Omega)\}$.
    \end{proof}
\end{document}

在此处输入图片描述

答案2

我遇到了同样的问题。当我添加时,amsthm我注意到它与发生了冲突newtxmath。我的解决方案是重新排序包。

原始(失败)

\documentclass{minimal}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}

\usepackage{libertine}
\usepackage[libertine]{newtxmath}  % <---- A

\usepackage{amsthm}                % <---- B

\newtheorem{lemma}{Lemma}

\begin{document}
\begin{lemma}
Foo
\end{lemma}
\end{document}

结果错误:

! LaTeX Error: Command \openbox already defined.
               Or name \end... illegal, see p.192 of the manual.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...                                              

l.427   \vrule\hfil}}

重新排序(作品)

\documentclass{minimal}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}

\usepackage{amsthm}                % <---- B

\usepackage{libertine}
\usepackage[libertine]{newtxmath}  % <---- A

\newtheorem{lemma}{Lemma}

\begin{document}
\begin{lemma}
Foo
\end{lemma}
\end{document}

相关内容