快速制作26个宏(每个字母一个)

时间:2010-06-01 20:12:42

标签: latex

而不是为每个字母制作一个宏,如

\def\bA{\mathbf{A}}
...
\def\bZ{\mathbf{Z}}

有没有办法循环一个字符类(如大写字母)并为每个字符生成宏?我也想对希腊字母做同样的事情(使用bm代替mathbf)。

4 个答案:

答案 0 :(得分:7)

\def\mydefb#1{\expandafter\def\csname b#1\endcsname{\mathbf{#1}}}
\def\mydefallb#1{\ifx#1\mydefallb\else\mydefb#1\expandafter\mydefallb\fi}
\mydefallb ABCDEFGHIJKLMNOPQRSTUVWXYZ\mydefallb

希腊语的新内容

\def\mydefgreek#1{\expandafter\def\csname b#1\endcsname{\text{\boldmath$\mathbf{\csname #1\endcsname}$}}}
\def\mydefallgreek#1{\ifx\mydefallgreek#1\else\mydefgreek{#1}%
   \lowercase{\mydefgreek{#1}}\expandafter\mydefallgreek\fi}
\mydefallgreek {beta}{Gamma}{Delta}{epsilon}{etaex}{Theta}{Iota}{Lambda}{kappa}{mu}{nu}{Xi}{Pi}{rho}\mydefallgreek


$\bGamma\bDelta \bTheta \bLambda \bXi \bPi $

$\bbeta \bgamma\bdelta \bepsilon \betaex \btheta \biota \blambda \bkappa \bmu \bnu \bxi \bpi \brho$

答案 1 :(得分:6)

扩展安德鲁的答案,这是一个没有\expandafter的解决方案:

\makeatletter
\@tempcnta=\@ne
\def\@nameedef#1{\expandafter\edef\csname #1\endcsname}
\loop\ifnum\@tempcnta<27
  \@nameedef{b\@Alph\@tempcnta}{\noexpand\mathbb{\@Alph\@tempcnta}}
  \advance\@tempcnta\@ne
\repeat

这将定义\bA\bB等,以扩展为\mathbb{A}\mathbb{B},等等。

答案 2 :(得分:4)

定义一个命令

不是更好
\newcommand\bm[1]{\ensuremath{${\boldmath$#1$}}$}

,它可以在text模式和math模式下使用。 用法:

\[\bm{F(x)}=\int\bm\delta(x)\ dx]
\where \mb F is blah blah blah and \bm \delta is halb halb halb...

结果:
F(x) ='inegral delta (x)'dx
哪里 F 是等等等等,而' delta '是halb halb halb ...

外部美元用于离开数学(罗马)模式,因为\boldmath命令在数学模式中没有效果。内在的人切换回数学(粗体)。其他大括号(${\boldmath)可确保\boldmath命令仅适用于#1

此代码的另一个优点是测试存在\bb\bg的新命令。所以你不能轻易地崩溃LaTeX makros。

我希望这就是你要找的东西。

答案 3 :(得分:3)

我建议你这样做:

\newcommand{\b}[1]{\mathbf{#1}}
克劳利说,

和所有其他字母相似。但是,如果真的希望使用LaTeX代码来执行此操作,那么这里似乎有效:

\documentclass{article}
\usepackage{amssymb}
\newcounter{char}
\setcounter{char}{1}

\loop\ifnum\value{char}<27
\edef\c{\Alph{char}}
\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\def\expandafter\expandafter\expandafter\csname\expandafter\expandafter\expandafter b\expandafter\c\expandafter\endcsname\expandafter{\expandafter\mathbb\expandafter{\c}}
\addtocounter{char}{1}
\repeat

\begin{document}

\(\bZ\)
\end{document}

我不知道那里有多少'expandafter'!要获得小写字母,请用alph替换Alph。