如何自动将包含文本的公式加粗?

如何自动将包含文本的公式加粗?

我有一些简单的公式,我想将它们设置为粗体和非粗体版本。由于重新输入公式容易出错,因此我想使用一个宏,它接受非粗体公式(包含在宏中)并生成该宏的副本,但以粗体显示。

我目前所拥有的:(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}

得出的结果为:

上述 LaTeX 的结果

我不满意的原因有三:

  1. 第二个\text没有加粗。
  2. \text最后一次调用中的块替换了第一次调用中的块。
  3. 我必须手动指定该命令的粗体版本的名称。

只有第二个问题对我来说才真正关键。

我错过了什么?

答案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}

相关内容