Быстрый способ сделать 26 макросов (по одному на каждую букву) - PullRequest
6 голосов
/ 02 июня 2010

Вместо создания макроса для каждой буквы, как в

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

Есть ли способ зацикливаться на классе символов (например, заглавными буквами) и генерировать макросы для каждой?Я также хотел бы сделать то же самое для греческих букв (используя bm вместо mathbf).

Ответы [ 4 ]

7 голосов
/ 02 июня 2010
\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$
6 голосов
/ 01 сентября 2011

Расширяя ответ Андрея, вот решение без \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} и т. Д.

4 голосов
/ 02 июня 2010

Не лучше определить одну команду

\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) = 'интеграл дельта (x)' dx
Где F - это бла-бла-бла, а ' delta ' - это halb halb halb ...

Внешние доллары предназначены для выхода из математического (римского) режима, потому что команда \boldmath не действует в математическом режиме. Внутренние переключаются обратно на математику (жирным шрифтом). Дополнительные фигурные скобки (${\boldmath) гарантируют, что команда \boldmath будет работать только с #1

Еще одним преимуществом этого кода является тестирование новых команд на наличие \bb и \bg. Так что вы не можете легко разбить LaTeX Макрос.

Надеюсь, это то, что вы ищете.

3 голосов
/ 02 июня 2010

Я бы порекомендовал сделать:

\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}

Я потерял счет тому, сколько в этом экспандитов! Чтобы получить строчные буквы, замените Alph на alph.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...