转交流群友遇到的一个问题:
在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*}
我的问题是:
1.\bm
和\boldsymbol
的区别和正确的使用方式是什么?
2.为何elegantbook中会出现上面的报错,是否有办法避免调用某些宏包之后出现\cmd
不能被嵌套使用的情况(例如上面的\boldsymbol
)
下面是MWE:
实际上,正是由于 elegantbook
加载了 bm
宏包才导致这个错误。bm
设置 \let\boldsymbol\bm
,但为什么直接嵌套 \bm
不会出错呢?因为最外层的那个 \bm
设置 \let\bm\@firstofone
,所以里面的 \bm
不会生效。但并没有 \let\boldsymbol\@firstofone
,嵌套 \boldsymbol
就会出错。
\boldsymbol
直接把字体替换为加粗的,如果加粗的字体没有这个字形,就保持不变。而 \bm
会尝试替换字体,如果没有会使用 “poor man's bold”,即伪粗体。
问题2,没有一劳永逸的解决方案,具体问题具体分析。
好的,谢谢您告知
\@firstofone
这一宏的使用和\bm
以及\boldsymbol
对我很有帮助,非常感谢!