我有一些简单的公式,我想将它们设置为粗体和非粗体版本。由于重新输入公式容易出错,因此我想使用一个宏,它接受非粗体公式(包含在宏中)并生成该宏的副本,但以粗体显示。
我目前所拥有的:(MNWE):
\documentclass[12pt]{article}
\usepackage{amsmath}
\usepackage{etoolbox}
\thispagestyle{empty}
\newcommand{\foo}{A\text{a}\text{b}+}
\newcommand{\baz}{B\text{c}\text{d}-}
\makeatletter
\newcommand{\boldify}[2]{%
\let\@boldme#1
\patchcmd{\@boldme}{\text}{\textbf}{}{}
\newcommand{#2}{\ensuremath{\boldsymbol{\@boldme}}}
}
\makeatother
\boldify{\foo}{\bffoo}
\boldify{\baz}{\bfbaz}
\begin{document}
$$\foo \bffoo$$
$$\baz \bfbaz$$
\end{document}
得出的结果为:
我不满意的原因有三:
- 第二个
\text
没有加粗。 \text
最后一次调用中的块替换了第一次调用中的块。- 我必须手动指定该命令的粗体版本的名称。
只有第二个问题对我来说才真正关键。
我错过了什么?
答案1
我不确定我是否完全理解了这个问题,但是\boldify
下面的宏将全部替换\text
为\textbf
:
笔记:
- 您不应该
$$
按照以下说明使用 LaTeX为什么 \[ ... \] 比 $$ ... $$ 更可取? 我不确定尾随的
+
和-
符号的含义,但如果它们代表二元运算符,则您的间距不正确。您可以使用以下方法获得正确的二元运算符间距:\newcommand{\foo}{A\text{a}\text{b}+{}} \newcommand{\baz}{B\text{c}\text{d}-{}}
代码:
\documentclass[12pt]{article}
\usepackage{amsmath}
\thispagestyle{empty}
\newcommand{\foo}{A\text{a}\text{b}+}
\newcommand{\baz}{B\text{c}\text{d}-}
\newcommand{\boldify}[1]{%
\let\text\textbf%
#1%
}
\begin{document}
$\foo \boldify{\foo}$
$\baz \boldify{\baz}$
\end{document}
答案2
\text
在这里不是正确的宏,因为它不能确保内容是直立的:例如在定理陈述中,内容将以斜体显示。
\documentclass[12pt]{article}
\usepackage{amsmath}
\newcommand{\foo}{A\mathrm{a}\mathrm{b}+}
\newcommand{\baz}{B\mathrm{b}\mathrm{d}-}
\makeatletter
\newcommand{\boldify}[2]{%
\newcommand#2{\text{\boldmath$#1$}}%
}
\makeatother
\boldify{\foo}{\bffoo}
\boldify{\baz}{\bfbaz}
\begin{document}
\begin{gather*}
\foo \bffoo \\
\baz \bfbaz
\end{gather*}
\end{document}
如果你只想加粗字母,那么这样做就可以了:
\documentclass[12pt]{article}
\usepackage{amsmath,bm}
\makeatletter
\DeclareRobustCommand{\rmorbf}{%
\ifboldify
\expandafter\mathbf
\else
\expandafter\mathrm
\fi
}
\DeclareRobustCommand{\mdorbm}{%
\ifboldify
\expandafter\bm
\else
\expandafter\@firstofone
\fi
}
\newif\ifboldify
\newcommand{\boldify}[2]{%
\newcommand#2{\begingroup\boldifytrue#1\endgroup}%
}
\makeatother
\newcommand{\foo}{\mdorbm{A}\rmorbf{a}\rmorbf{b}+}
\newcommand{\baz}{\mdorbm{B}\rmorbf{b}\rmorbf{d}-}
\boldify{\foo}{\bffoo}
\boldify{\baz}{\bfbaz}
\begin{document}
\begin{gather*}
\foo \bffoo \\
\baz \bfbaz
\end{gather*}
\end{document}
答案3
我认为我的问题的关键是,正如@egreg指出的那样,误用了\text
。用 替换它\mathrm
会使我的宏响应数学粗体命令。鉴于此,我认为我不再需要显式粗体宏了。
梅威瑟:
\documentclass[12pt]{article}
\usepackage{amsmath}
\thispagestyle{empty}
\newcommand{\foo}{A\mathrm{a}\mathrm{b}+}
\newcommand{\baz}{B\mathrm{c}\mathrm{d}-}
\begin{document}
\[\foo \boldsymbol{\foo}\]
\[\baz \boldsymbol{\baz}\]
\end{document}