而不是为每个字母制作一个宏,如
\def\bA{\mathbf{A}}
...
\def\bZ{\mathbf{Z}}
有没有办法循环一个字符类(如大写字母)并为每个字符生成宏?我也想对希腊字母做同样的事情(使用bm
代替mathbf
)。
答案 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。