我写了一个很长的文档,里面有很多包含\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 \mathbf
into都改掉\fooB
(你会知道使用什么更好的名字),然后添加到你的序言中
\newcommand{\fooA}[1]{\mathbf{#1}}
\newcommand{\fooB}[1]{\bm{#1}}