更快的 \mathbf 书写方式

更快的 \mathbf 书写方式

有没有更快的方法粗体\mathbf{}在数学模式中,而不是每次都输入?(当你用粗体...)

答案1

有一种非常俗气的保存击键的方法,它并不比 Todd 的答案长,但与 Yiannis 的一样全面:

\documentclass{article}

\def\*#1{\mathbf{#1}}

\def\ab{ab}
\begin{document}
 $\*v, \*w, \*\ab, \*\Gamma$.
\end{document}

解释:名称为非字母的控制序列后面不需要空格或括号(当然,除非您希望它对多个标记起作用,例如普通的ab;但是,像我这样的宏\ab就可以正常工作)。

答案2

为了扩展 Todd Lehman 的答案,您可以通过自动创建命令来节省一些定义的输入:

LaTeX 内核有一个名为 的循环结构\@tfor,可以解析字符列表。我们利用它自动使用来定义 形式的命令\Va..\Vz\VA..\VZ\csname..\endcsname

\@tfor\next:=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\do{%
  \def\command@factory#1{%
    \expandafter\def\csname V#1\endcsname{#1}
  }
 \expandafter\command@factory\next
}

完整的 MWE 如下所示:

\documentclass{article}
\makeatletter
\@tfor\next:=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\do{%
  \def\command@factory#1{%
    \expandafter\def\csname V#1\endcsname{#1}
  }
 \expandafter\command@factory\next
}
\makeatother
\begin{document}
\[ a \cdot (\Vv \otimes \Vw) = (a \cdot \Vv) \otimes \Vw = \Vv \otimes (a \cdot \Vw) \]
\end{document}

要使希腊字母加粗,我们可以使用类似的技术。这次我们将所有希腊字母放在逗号分隔的列表中,例如:

 alpha,beta,gamma,zeta...Alpha...Zeta

然后我们可以对其进行迭代,这次使用循环@for,这是修改后的最小值。

\documentclass{article}
\usepackage{amsmath}
\usepackage{mathpazo}

\makeatletter
\@tfor\next:=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\do{%
  \def\command@factory#1{%
    \expandafter\def\csname V#1\endcsname{\mathbb{#1}}
  }
 \expandafter\command@factory\next
}
\begin{document}
\[ a \cdot (\Vv \otimes \Vw) = (a \cdot \Vv) \otimes \Vw = \Vv \otimes (a \cdot \Vw) \]

\def\greekvectors#1{%
 \@for\next:=#1\do{%
    \def\X##1;{%
     \expandafter\def\csname V##1\endcsname{\boldsymbol{\csname##1\endcsname}}
     }
   \expandafter\X\next;
  }
}

\greekvectors{alpha,beta,iota,gamma,lambda,nu,eta,Gamma,varsigma}

 $\VGamma\Viota\Valpha\Vnu\Vnu\Veta\Vvarsigma$
\end{document}

将输出

在此处输入图片描述

答案3

你想要的不一定是一种更快的写作方式\mathbf{v},而是一种更快的获取向量的方式, 是的?

在这种情况下,我将定义一组非常短的字母特定宏,每个向量变量一个。例如:

\documentclass{article}
\newcommand{\Vu}{\mathbf{u}}
\newcommand{\Vv}{\mathbf{v}}
\newcommand{\Vw}{\mathbf{w}}
\newcommand{\Vx}{\mathbf{x}}
\newcommand{\Vy}{\mathbf{y}}
\newcommand{\Vz}{\mathbf{z}}
\begin{document}
\[ \|\Vx\| = \sqrt{\Vx_1^2 + \cdots + \Vx_n^2} \]
\[ a(\Vu+\Vv) = a\Vu + a\Vv \]
\[ a_1\Vv_{i_1} + a_2\Vv_{i_2} + \cdots + a_n\Vv_{i_n} = 0 \]
\[ a \cdot (\Vv \otimes \Vw) = (a \cdot \Vv) \otimes \Vw = \Vv \otimes (a \cdot \Vw) \]
\end{document}

例子

答案4

定义一个接受参数的命令。无需使用非字母名称:如果您的向量名称是单个字母,则无需输入括号:

\newcommand\V[1]{\ensuremath{\mathbf{#1}}}

 \[ \V w = a\V v_0 + \V u  \]

\V 后确实需要一个空格(除非您使用非字母代替 V)。

相关内容