bm

20 \boldsymbol与\bm的区别以及出现`TeX capacity exceeded`的疑问

发布于 2024-10-15 22:50:33

转交流群友遇到的一个问题:
article类中使用下面的代码可以正常编译:

\documentclass{article}
\usepackage{amsmath}
\begin{document}
\begin{equation*}
    \begin{aligned}
     & \frac{\mathrm{d}}{\mathrm{d} t}\left(\frac{1}{2}\dot{\boldsymbol{x}}\boldsymbol{^{\top } m}\dot{\boldsymbol{x}} +V(\boldsymbol{x})\right) =\frac{1}{2}\left(\ddot{\boldsymbol{x}}\boldsymbol{^{\top } m}\dot{\boldsymbol{x}} +\boldsymbol{\dot{\boldsymbol{x}}^{\top } m}\ddot{\boldsymbol{x}}\right) +\dot{\boldsymbol{x}}^{\top } \nabla V(\boldsymbol{x})\\
    = & \boldsymbol{\dot{\boldsymbol{x}}^{\top }}(\boldsymbol{m}\ddot{\boldsymbol{x}} +\nabla V(\boldsymbol{x})) =\boldsymbol{\dot{\boldsymbol{x}}^{\top } 0} =0,
    \end{aligned}
    \end{equation*}
\end{document}    

但在elegantbook模板中使用则会出现下面的报错信息

\documentclass[lang=cn,newtx,10pt,scheme=chinese]{elegantbook}
\begin{document}
\begin{equation}
    \begin{aligned}
    & \frac{\mathrm{d}}{\mathrm{d} t}\left(\frac{1}{2}\dot{\boldsymbol{x}}\boldsymbol{^{\top } m}\dot{\boldsymbol{x}} +V(\boldsymbol{x})\right) =\frac{1}{2}\left(\ddot{\boldsymbol{x}}\boldsymbol{^{\top } m}\dot{\boldsymbol{x}} +\boldsymbol{\dot{\boldsymbol{x}}^{\top } m}\ddot{\boldsymbol{x}}\right) +\dot{\boldsymbol{x}}^{\top } \nabla V(\boldsymbol{x})\\
    = & \boldsymbol{\dot{\boldsymbol{x}}^{\top }}(\boldsymbol{m}\ddot{\boldsymbol{x}} +\nabla V(\boldsymbol{x})) =\boldsymbol{\dot{\boldsymbol{x}}^{\top } 0} =0,
    \end{aligned}
\end{equation}
\end{document}

报错信息如下,猜测是因为\boldsymbol命令的嵌套使用导致的...但是也很奇哉怪也

Runaway definition?
->
! TeX capacity exceeded, sorry [main memory size=5000000].
\bm@add ...mand #1}\xdef \bm@command {\the \toks@
                                                  }\endgroup \bm@expand
l.5 ...\boldsymbol{\dot{\boldsymbol{x}}^{\top } m}
                                                  \ddot{\boldsymbol{x}}\righ...

No pages of output.

群友S老师@u79794 提出使用\bm可以解决这一问题

% preamble
\usepackage{fixdif,derivative,physics2,bm}
\usephysicsmodule{ab}

\begin{equation*}
\begin{aligned}
  & \odv{}t \ab(\frac12 \dot{\bm x}+V(\bm x))
   =\frac12\ab(\ddot{\bm x}^\top\bm m\dot{\bm x}+\dot{\bm x}^\top\bm m+\ddot{\bm x})+\dot{\bm x}^\top\nabla V(\bm x)\\
  & =\dot{\bm x}^\top(\bm m\ddot{\bm x}+\nabla V(\bm x))=\dot{\bm x}^\top\bm 0=0,
\end{aligned}
\end{equation*}

image.png

我的问题是:
1.\bm\boldsymbol的区别和正确的使用方式是什么?
2.为何elegantbook中会出现上面的报错,是否有办法避免调用某些宏包之后出现\cmd不能被嵌套使用的情况(例如上面的\boldsymbol
下面是MWE:

article-mwe.zip

elegant-mwe.zip

查看更多

关注者
0
被浏览
259
雾月
雾月 2024-10-15
这家伙很懒,什么也没写!

实际上,正是由于 elegantbook 加载了 bm 宏包才导致这个错误。bm 设置 \let\boldsymbol\bm,但为什么直接嵌套 \bm 不会出错呢?因为最外层的那个 \bm 设置 \let\bm\@firstofone,所以里面的 \bm 不会生效。但并没有 \let\boldsymbol\@firstofone,嵌套 \boldsymbol 就会出错。

\boldsymbol 直接把字体替换为加粗的,如果加粗的字体没有这个字形,就保持不变。而 \bm 会尝试替换字体,如果没有会使用 “poor man's bold”,即伪粗体。

问题2,没有一劳永逸的解决方案,具体问题具体分析。

1 个回答

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览