\.... 已定义。我找不到我的错误

\.... 已定义。我找不到我的错误

我找不到我的错误。那个 TeX 文件已经工作了大约半年。但今天它却不起作用。我的错误在哪里?

在此处输入图片描述

\documentclass{article}
\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[russian,mongolian]{babel}
\usepackage[a4paper, margin=2cm]{geometry}

\usepackage{amsmath}

\begin{document}
Зураг
\end{document}

答案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定义。

相关内容