\thedots@ 的使用与其定义不符。法语包存在问题

\thedots@ 的使用与其定义不符。法语包存在问题

我有一份相当复杂的英文文档,使用 kaobook 排版。

对于我的摘要,我需要添加法语,但添加french到行中 \usepackage[main=english, ngerman, french]{babel} 会导致上述错误。出现错误的行是

\begin{equation}
\vb{A} = \vb{L}^{(1)} \vb{L}^{(2)} \dots \vb{L}^{(r)} \vb{\tilde{A}}^{(r)} \vb{R}^{(r)} \dots \vb{R}^{(2)} \vb{R}^{(1)}
\end{equation}

不幸的是,我无法在 MWE 中重现该错误。非常感谢您的帮助!

编辑:MWE 添加

\documentclass[]{book}
\usepackage[main=english, ngerman, french]{babel}
\usepackage{physics}
\usepackage{upgreek}
\usepackage{bm}

\renewcommand{\vb}[1]{\bm{#1}}

\begin{document}

\begin{otherlanguage*}{french}
La physique des ondes apparaît dans la nature entre autres sous forme d’ondes électromagnétiques, d’ondes sonores ou encore d’ondes 
\end{otherlanguage*}
  
\begin{equation}
  \vb{L}^{(1)} \vb{L}^{(2)} \dots \vb{L}^{(r)}
\end{equation}
\end{document}

答案1

法语和/或物理 amsmath似乎令人不安bm

然而,如果你不深入研究为什么你可以\bm用额外的括号来保护,你就不会得到任何错误

\renewcommand{\vb}[1]{{\bm{#1}}}

amsmath可以通过将一个实例更改为\boldsymbol来进行更永久的修复##1

\documentclass[]{book}

\usepackage{amsmath}
\usepackage{bm}

\makeatletter
\def\mdots@@{\gdef\thedots@{\dotso@}%
 \ifx\@let@token\boldsymbol
%   \gdef\thedots@\boldsymbol{\boldsymboldots@}%
   \gdef\thedots@##1{\boldsymboldots@}%
 \else
   \ifx,\@let@token \gdef\thedots@{\dotsc}%
   \else
     \ifx\not\@let@token
       \gdef\thedots@{\dotsb@}%
     \else
       \keybin@
       \ifgtest@ % if \keybin@ test
         \gdef\thedots@{\dotsb@}%
       \else
         \xdef\meaning@{\meaning\@let@token. .........}%
         \xdef\meaning@@{\@xp\striplong@\meaning@\relax\meaning@}%
         \@xp\math@\meaning@\math@
         \ifgtest@ % if \mathxxx test
           \@xp\mathch@\meaning@\mathch@
           \ifgtest@ % if \mathchar
             \@xp\getmathch@\meaning@\getmathch@
           \fi % end if \mathchar
         \else  % \not \mathxxx
             \@xp\Umathch@\meaning@"0"\Umathch@
             \ifgtest@ % if \Umathchar
             \else % else not \Umathcar
           \@xp\macro@\meaning@@\macro@
           \ifgtest@ % if macro test
             \@xp\not@\meaning@\not@
             \ifgtest@ % if macro starts \not test
               \gdef\thedots@{\dotsb@}%
             \else% else not \not
               \@xp\DOTS@\meaning@\DOTS@
               \ifgtest@ % \if DOTS
                 \ifcase\number\DOTSCASE@ %ifcase dots
                   \gdef\thedots@{\dotsb@}%
                 \or\gdef\thedots@{\dotsi}\else
                 \fi % endifcase dots
               \else % not macro starts \DOTS
                 \@xp\math@\meaning@\math@
                 \ifgtest@ % \if macro starts \mathxxxx
                   \@xp\mathbin@\meaning@\mathbin@
                   \ifgtest@ % if macro starts \mathbin
                     \gdef\thedots@{\dotsb@}%
                   \else % not macro starting \mathbin
                     \@xp\mathrel@\meaning@\mathrel@
                     \ifgtest@ % if macro starts \mathrel
                       \gdef\thedots@{\dotsb@}%
                     \fi % endif macro starts \mathrel (no else)
                   \fi % endif macro starts \mathbin
                 \fi % endif macro starts with \mathxxx (no else)
               \fi % endif macro starts \DOTS else
             \fi % end macro  starting \not \ifgtest@ test (no else)
             \else
               \@xp\thecharacter@\meaning@\thecharacter@
             \fi % end macro \ifgtest@ test (no else)
           \fi % end if \Umathchar test
         \fi % end \math@   \ifgtest@
       \fi % end \keybin@ \ifgtest@ test (no else)
     \fi % end if \not (no else)
   \fi % end if comma (no else)
 \fi % end if boldsymbol (no else)
 \thedots@}
\makeatother
\begin{document}



$\dots 1$ $\dots\bm{1}$

$1 + \dots + 5$ $1\bm{+}  \dots\bm{+} 5$

\end{document}
``

答案2

我建议不要使用physics。无论如何,它与 没有直接关系physics,但它与 有交互amsmath

这是一个更简单的例子:

\documentclass[]{book}
\usepackage[french]{babel}
\usepackage{amsmath}
\usepackage{bm}

\newcommand{\vb}[1]{\bm{#1}}

\begin{document}

$\vb{L}\dots\vb{L}$

\end{document}

您可以使用以下方法解决该问题\NewCommandCopy(或者\RenewCommandCopy如果您坚持使用physics):

\documentclass[]{book}
\usepackage[french]{babel}
\usepackage{amsmath}
\usepackage{bm}

\NewCommandCopy{\vb}{\bm}

\begin{document}

$\vb{L}\dots\vb{L}$

\end{document}

相关内容