答案1
我们mongolian.ldf
发现
\def\sh{\mathop{\operator@font sh}\nolimits}
[...]
我们russianb.ldf
发现
\AtBeginDocument{%
\@ifpackageloaded{amsopn}
{%
\DeclareMathOperator{\sh}{sh}%\MakeRobust\sh
[...]
}{%
\DeclareRobustCommand\sh{\mathop{\operator@font sh}\nolimits}%\MakeRobust\sh%
[...]
}%
\let\text@th\th
\DeclareRobustCommand{\th}{\TextOrMath{\text@th}{\math@th}}
}
其中[...]
代表其他数学运算符的类似内容。
由于您正在将 加载mongolian
为主要语言,russianb.ldf
因此 是在 之后加载的mongolian.ldf
。如果已经定义,\DeclareMathOperator{\sh}{sh}
则会引发错误。\sh
我认为这两种语言定义文件都有问题,因为它们都假设这些命令未定义。请注意,russianb.ldf
似乎意识到\th
已经有定义。
中的代码russianb.ldf
比中的相应代码好得多mongolian.ldf
,并且它们应该对齐,但增加了检查,因此不会发生冲突。
如果你不需要俄语,就不要加载该语言。否则,这里有一个解决方法
\documentclass{article}
\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[base]{babel}
\AfterBabelLanguage{mongolian}{%
\let\sh\relax\let\ch\relax\let\tg\relax
\let\arctg\relax\let\arcctg\relax
\expandafter\let\expandafter\th\csname ltx@th\endcsname
\let\ctg\relax\let\cth\relax\let\cosec\relax
}
\usepackage[russian,mongolian]{babel}
\usepackage[a4paper, margin=2cm]{geometry}
\usepackage{amsmath}
\begin{document}
Зураг
$\sh x$
\end{document}
通过\AfterBabelLanguage
中和所做的弱定义mongolian.ldf
,文档将使用更为强大的russianb.ldf
定义。