kia999 / babel-russian

Russian language module for Babel package for LaTeX system of typesetting
8 stars 1 forks source link

баг с toc-файлом при использовании пакета unicode-math в xelatex #1

Closed transientsolutions closed 7 years ago

transientsolutions commented 7 years ago

Баг обнаружен только при использовании xelatex с пакетом unicode-math.

Если в тексте используем команду секционирования с математической операцией, определенной в russianb.ldf, напр.

 \subsubsection{Функция $\arctg(x)$}

то в toc-файл вносится нечто странное огромного размера:

\contentsline {subsubsection}{\numberline {5.8.3}Функция $\mathop {\Umathcode 97=7\symoperators 97\scan _stop: \Umathcode 98=7\symoperators 98\scan _stop: \Umathcode 99=7...

(это примерно 1% записи данной строки). И потом, при втором проходе компиляции получаем ошибку:

 ! Undefined control sequence.
 <argument> ...Umathcode 97=7\symoperators 97\scan 
                                              _stop: \Umathcode 98=7\sym...
 l.52 ...0563\scan _stop: arctg}\nolimits (x)$}{66}

Но, если используем функцию, которая не определена в russianb.ldf, например, командой

\subsection{Функция $\cos(x)$

то в toc-файл вносится примерно такая строка:

\contentsline {subsection}{\numberline {5.2}Функции $\qopname \relax o{sin}$ и $\qopname \relax o{cos}$}{53}

и вторая компиляция проходит нормально.

kia999 commented 7 years ago

Описанная проблема возникает по той причине, что команды типа \arctg хрупкие. Ядро LaTeX определяет команды \sin, \cos и т.д. как хрупкие, по пакет amsopt, который автоматически загружается пакетом amsmath, делает эти команды устойчивыми. Пакет babel-russian до версии 1.3j включительно вводил дополнительные команды данного типа (\sh, \ch, \cth, \tg, \ctg, \arctg, \arctg и т.д.) всегда хрупкими. В следующей версии 1.3k перечисленные дополнительные команды будут сделаны устойчивыми. Эту версию можно уже загрузить с данного сайта.