Быстрый способ сделать 26 макросов (один для каждой буквы)

Вместо того, чтобы делать макрос для каждой буквы, как в

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

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

7
задан Geoff 1 June 2010 в 20:12
поделиться

3 ответа

\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$
7
ответ дан 6 December 2019 в 09:18
поделиться

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

\newcommand\bm[1]{\ensuremath{${\boldmath$#1$}}$}

, и ее можно было бы использовать как в текстовом режиме , так и в математическом режим. Использование:

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

Результат:
F (x) = 'ingral delta (x)' dx
. Где F - это бла-бла-бла, а ' delta ' - это halb halb halb ...

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

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

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

4
ответ дан 6 December 2019 в 09:18
поделиться

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

\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»! Чтобы получить строчные буквы, замените альф на альф.

3
ответ дан 6 December 2019 в 09:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: