![粗体数学:对于拉丁和希腊符号,是否自动在 \mathbf 和 \boldsymbol 之间进行选择?](https://linux22.com/image/232366/%E7%B2%97%E4%BD%93%E6%95%B0%E5%AD%A6%EF%BC%9A%E5%AF%B9%E4%BA%8E%E6%8B%89%E4%B8%81%E5%92%8C%E5%B8%8C%E8%85%8A%E7%AC%A6%E5%8F%B7%EF%BC%8C%E6%98%AF%E5%90%A6%E8%87%AA%E5%8A%A8%E5%9C%A8%20%5Cmathbf%20%E5%92%8C%20%5Cboldsymbol%20%E4%B9%8B%E9%97%B4%E8%BF%9B%E8%A1%8C%E9%80%89%E6%8B%A9%EF%BC%9F.png)
这是这个问题。
假设你想用以下方式表示向量直立粗体字母;然后\mathbf{u}
可以正常工作,除非它是希腊字母,否则您必须使用它\boldsymbol{\omega}
。
问题:是否可以在 LaTeX 中定义一个通用矢量命令,自动在\mathbf
和之间进行选择\boldsymbol
,这样人们就可以只书写\vect{u}
和\vect{\omega}
而不必手动特殊处理希腊符号?
(需要明确的是:\newcommand{\vect}[1]{\boldsymbol{#1}}
在这种情况下是没有好处的,\boldsymbol{u}
因为加粗斜体而不是罗马。)
答案1
您可以使用两个都命令一起定义类似
\usepackage{bm}
\newcommand{\vect}[1]{\boldsymbol{\mathbf{#1}}}
这适用于大多数情况。
答案2
宏
\newcommand{\vect}[1]{\boldsymbol{\mathbf{#1}}}
不适用于 mathtime pro lite 字体(并且从评论来看,它也不适用于 mathpazo)。另一种方法是简单地检查参数是否为A-Za-z
。
\usepackage{bm,xstring}
\def\VEC#1%
{\IfSubStr{ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz}{#1}
{\mathbf{#1}}
{\bm{#1}}}
这种方法效率低下,因为它每次执行时都会检查子字符串。可以定义宏\VEC@A
等\VEC@B
(使用简单的循环),然后检查 do
\def\VEC#1%
{\ifcsname VEC@#1\endcsname
\mathbf{#1}%
\else
\bm{#1}%
\fi}
答案3
虽然这不能回答您的问题,但您尝试过使用该bm
包吗?然后$\bm{\omega}$
给出一个粗体 omega,$\bm{u}$
给出一个粗体(数学斜体) u 和$\bm{\mathrm{u}}$
一个粗体罗马 u。