我想在我的文档中同时使用两个包chemmacros
和polyglossia
,但出于某种原因,我不想使用mhchem
和babel
等来代替它们。以下是一些简化的示例。
当将语言设置为时,一切都表现良好english
。
\documentclass{article}
\usepackage{polyglossia}
\usepackage{chemmacros}
\setotherlanguage{english} % Produces correct results under language `english'.
\begin{document}
\ch{H2O}
\end{document}
但是,当我将语言切换为时russian
,\ch{H2O}
似乎产生了意想不到的结果,类似于\operatorname{ch}H2O
。
\documentclass{article}
\usepackage{polyglossia}
\usepackage{chemmacros}
\setotherlanguage{russian} % Produces incorrect results under language `russian'.
\begin{document}
\ch{H2O} % An error `Missing $ inserted.' is reported, and the result is incorrect.
$\ch{H2O}$ % No error is reported, but the result is still incorrect.
$\operatorname{ch}H2O$ % As a comparison.
\end{document}
chemmacros
当文档语言是 时,我该如何解决这个问题并使其正确运行russian
?
我使用 XeLaTeX 作为编译器和 TeX Live 版本 2023。
答案1
默认情况下,russian
Polyglossia 模块根据俄罗斯传统定义了一些运算符,特别\sh
是\ch
双曲函数。
当然,\ch
定义了与之冲突chemmacros
。
如果您不需要它们,您可以在加载时将它们排除:
\documentclass{article}
\usepackage{polyglossia}
\usepackage{chemmacros}
\setmainfont{Libertinus Serif}
\setmainlanguage[mathfunctions=false]{russian}
\begin{document}
\ch{H2O}
\end{document}
会发生什么?在文档开始时chemmacros
定义了自己的版本,而在切换语言时定义了双曲余弦运算符的含义,这在稍后发生。所以获胜。\ch
polyglossia
\ch
polyglossia
如果您想保留俄罗斯风格的操作员,您需要\ch
从chemmacros
(实际上chemformula
)更改为其他内容:
\documentclass{article}
\usepackage{polyglossia}
\usepackage{chemmacros}
\setmainfont{Libertinus Serif}
\setmainlanguage{russian}
\AddToHook{file/chemformula.sty/after}{%
\NewCommandCopy{\CH}{\ch}%
}
\begin{document}
\CH{H2O}
$\ch x=(e^x+e^{-x})/2$
\end{document}