我使用的是 pss(b) 模板,其开头为:
\documentclass[pss]{wiley2sp} % provides pss two-column style
\usepackage{amsmath}
%\usepackage{bm} % uncomment these two packages if you
%\usepackage{w-greek} % need extended greek-letter functionality in math mode
我总是收到这个警告:
包 amsmath 警告:无法重新定义数学重音
\vec
。
有谁知道如何解决这个问题?
答案1
首先加载amsmath
:
\RequirePackage{amsmath}
\documentclass[pss]{wiley2sp} % provides pss two-column style
...
然后首先amsmath
定义它并将重新定义它。\vec
wiley2sp
答案2
这个“问题”是您正在使用的类所固有的。
事情是这样的:你加载wiley2sp
,设置文档结构。它还(重新)定义了宏\vec
:
\if@mathematic
\def\vec#1{\ensuremath{\mathchoice
{\mbox{\boldmath$\displaystyle\mathbf{#1}$}}
{\mbox{\boldmath$\textstyle\mathbf{#1}$}}
{\mbox{\boldmath$\scriptstyle\mathbf{#1}$}}
{\mbox{\boldmath$\scriptscriptstyle\mathbf{#1}$}}}}
\else
\def\vec#1{\ensuremath{\mathchoice
{\mbox{\boldmath$\displaystyle#1$}}
{\mbox{\boldmath$\textstyle#1$}}
{\mbox{\boldmath$\scriptstyle#1$}}
{\mbox{\boldmath$\scriptscriptstyle#1$}}}}
\fi
这将\vec{<stuff>}
打印大胆的数学字体。是的,它实际上将宏从前者重新定义\mathaccent
为上述。
现在加载amsmath
,它循环显示多个数学符号并重新配置它们。以下是实际代码的摘录:
\def\@tempa#1{\@xp\@tempb\meaning#1\@nil#1}
\def\@tempb#1>#2#3 #4\@nil#5{%
\@xp\ifx\csname#3\endcsname\mathaccent
\@tempc#4?"7777\@nil#5%
\else
\PackageWarningNoLine{amsmath}{%
Unable to redefine math accent \string#5}%
\fi
}
\def\@tempc#1"#2#3#4#5#6\@nil#7{%
\chardef\@tempd="#3\relax\set@mathaccent\@tempd{#7}{#2}{#4#5}}
\@tempa{\hat}
\@tempa{\check}
\@tempa{\tilde}
\@tempa{\acute}
\@tempa{\grave}
\@tempa{\dot}
\@tempa{\ddot}
\@tempa{\breve}
\@tempa{\bar}
\@tempa{\vec}
上述代码以以下文档为前缀:
我们重新定义了标准数学重音命令调用\mathaccentV
,使用其先前定义中嵌入的数学组/编码编号信息。如果重音命令的定义不具有预期的形式,我们将保留重音命令,但会发出警告。
您会注意到,重新定义集需要数学重音的先前定义作为开始(作为中的条件\mathaccent
的一部分)。由于重新定义为完全不同的东西(不再是),因此报告警告。\ifx
\@tempb
wiley2sp
\vec
\mathaccent
amsmath
解决这个问题的方法是捕捉\vec
前 wiley2sp
重新定义它,并在检查重新定义它之前恢复它amsmath
。以下实现此目的:
\let\oldvec\vec% Store \vec in \oldvec
\documentclass{wiley2sp}
\let\vec\oldvec% Restore \vec from \oldvec
请注意,如果这是与出版商相关的样式或类别,他们很可能希望\vec
以特定格式打印其 tors。因此,删除\vec
tors 的这种格式可能不建议。