有时候我写论文会常用加粗符号表示矢量,像电磁场里的 E, H, A, B,还有定义希尔伯特空间 L^2 (\Omega),频繁加 \bm{} 命令还挺烦,所以可以直接做这样的定义
\documentclass{article}
\usepackage{bm}
\bmdefine{\bL}{L}
\bmdefine{\bA}{A}
\bmdefine{\bB}{B}
\bmdefine{\bE}{E}
\bmdefine{\bH}{H}
\bmdefine{\bnabla}{\nabla}
\begin{document}
\[ \bA \in \bL^2 (\Omega) \]
\[ \bB = \bnabla \times \bA \]
\[ \bH = \frac{1}{\mu} \bnabla \times \bA \]
\[ \bE = -\frac{\partial \bA}{\partial t} - \bnabla \phi \]
\end{document}但频繁用 \bmdefint 也略微有点烦。
后来做了这样的尝试
\documentclass{article}
\usepackage{bm}
\ExplSyntaxOn
\NewDocumentCommand{\defbms}{m}
{
\prop_set_from_keyval:Nn \l_tmpa_prop { #1 }
\prop_map_inline:Nn \l_tmpa_prop
{
\cs_new_protected:cpn { b ##1 } { \bm{##2} }
}
}
\ExplSyntaxOff
\defbms{
L = L,
A = A,
B = B,
E = E,
H = H,
nabla = \nabla
}
\begin{document}
\[ \bA \in \bL^2 (\Omega) \]
\[ \bB = \bnabla \times \bA \]
\[ \bH = \frac{1}{\mu} \bnabla \times \bA \]
\[ \bE = -\frac{\partial \bA}{\partial t} - \bnabla \phi \]
\end{document}这种做法的原理问任何一个 AI 都可以快速解释清楚,但不太好的是它依然要针对 A~Z 中的某些字母单独定义,所以还可以这样做
\documentclass{article}
\usepackage{bm}
\ExplSyntaxOn
\NewDocumentCommand{\defbms}{m m}
{
\int_step_inline:nnn { `A } { `Z }
{
\cs_new_protected:cpx { #1 \char_generate:nn { ##1 } { 11 } }
{
\exp_not:N \bm { \char_generate:nn { ##1 } { 11 } }
}
}
\clist_map_inline:nn { #2 }
{
\cs_new_protected:cpx { #1 \cs_to_str:N ##1 }
{
\exp_not:N \bm { \exp_not:N ##1 }
}
}
}
\ExplSyntaxOff
\defbms{b}{ \nabla }
\begin{document}
\[ \bA \in \bL^2 (\Omega) \]
\[ \bB = \bnabla \times \bA \]
\[ \bH = \frac{1}{\mu} \bnabla \times \bA \]
\[ \bE = -\frac{\partial \bA}{\partial t} - \bnabla \phi \]
\end{document}这种做法的好处是节约了对 A~Z 的设置,另外我还额外加了个前缀字母的设置,我自己爱用单独的 b 做前缀,或许有人爱用别的,如 bold 等。
上述两个做法都涉及直接用 \bm 命令而非 \bmdefine 命令,所以还可以做如下更改
\documentclass{article}
\usepackage{bm}
\ExplSyntaxOn
\NewDocumentCommand{\defbms}{m}
{
\prop_set_from_keyval:Nn \l_tmpa_prop { #1 }
\prop_map_inline:Nn \l_tmpa_prop
{
\exp_args:Nc \bmdefine { b ##1 } { ##2 }
}
}
\ExplSyntaxOff
\defbms{
L = L,
A = A,
B = B,
E = E,
H = H,
nabla = \nabla
}
\begin{document}
\[ \bA \in \bL^2 (\Omega) \]
\[ \bB = \bnabla \times \bA \]
\[ \bH = \frac{1}{\mu} \bnabla \times \bA \]
\[ \bE = -\frac{\partial \bA}{\partial t} - \bnabla \phi \]
\end{document}或
\documentclass{article}
\usepackage{bm}
\ExplSyntaxOn
\NewDocumentCommand{\defbms}{m m}
{
\int_step_inline:nnn { `A } { `Z }
{
\exp_args:Nc \bmdefine { #1 \char_generate:nn { ##1 } { 11 } } { \char_generate:nn { ##1 } { 11 } }
}
\clist_map_inline:nn { #2 }
{
\exp_args:Nc \bmdefine { #1 \cs_to_str:N ##1 } { ##1 }
}
}
\ExplSyntaxOff
\defbms{b}{ \nabla }
\begin{document}
\[ \bA \in \bL^2 (\Omega) \]
\[ \bB = \bnabla \times \bA \]
\[ \bH = \frac{1}{\mu} \bnabla \times \bA \]
\[ \bE = -\frac{\partial \bA}{\partial t} - \bnabla \phi \]
\end{document}最后再给一个如果不愿意改动前缀 b 的做法
\documentclass{article}
\usepackage{bm}
\ExplSyntaxOn
\NewDocumentCommand{\defbms}{m}
{
\int_step_inline:nnn { `A } { `Z }
{
\exp_args:Nc \bmdefine { b \char_generate:nn { ##1 } { 11 } } { \char_generate:nn { ##1 } { 11 } }
}
\clist_map_inline:nn { #1 }
{
\exp_args:Nc \bmdefine { b \cs_to_str:N ##1 } { ##1 }
}
}
\ExplSyntaxOff
\defbms{ \nabla }
\begin{document}
\[ \bA \in \bL^2 (\Omega) \]
\[ \bB = \bnabla \times \bA \]
\[ \bH = \frac{1}{\mu} \bnabla \times \bA \]
\[ \bE = -\frac{\partial \bA}{\partial t} - \bnabla \phi \]
\end{document}当然上述的做法对于 \alpha,\beta 这样的宏,也要学着 \nabla 那样用。