有没有办法在文档内切换 mathbf 和 bm 命令?

有没有办法在文档内切换 mathbf 和 bm 命令?

我写了一个很长的文档,里面有很多包含\bm和的方程式\mathbf。但是,现在我想切换它们的行为。因此,每当我\mathbf{X}在文档中时,我都想编译\bm{X}行为,反之亦然。有没有办法实现这一点,而无需手动修改每个出现的情况?

编辑:我尝试过的事情:

\let\temp\mathbf
\let\mathbf\bm
\let\bm\temp

\newcommand{\tmpbf}[1]{\mathbf{#1}}
\renewcommand{\mathbf}[1]{\bm{#1}}
\renewcommand{\bm}[1]{\tmpbf{#1}}

这两种方法似乎都不起作用并且冻结了 pdflatex 编译。

答案1

\bm命令非常特殊,您必须查看其精确的实现。

\documentclass{article}
\usepackage{amsmath,bm}
\usepackage{letltxmacro}

\makeatletter
% make \bm the same as \mathbf
\LetLtxMacro\bm\mathbf
% regenerate \mathbf like bm.sty does
\DeclareRobustCommand\mathbf{\bm@general\boldmath\bm@boldtable\mv@bold\bm@command}
\protected@edef\mathbf#1{\mathbf{#1}}
\makeatother

\begin{document}

$\mathbf{a}+\bm{X}$

\end{document}

当然,如果bm.sty改变的话,这可能会破坏。很多最好首先使用语义命令而不是通用\mathbf命令\bm

\bm因此,我建议将所有出现的into\fooA和 of \mathbfinto都改掉\fooB(你会知道使用什么更好的名字),然后添加到你的序言中

\newcommand{\fooA}[1]{\mathbf{#1}}
\newcommand{\fooB}[1]{\bm{#1}}

相关内容