bm 与 newcommand 的问题

bm 与 newcommand 的问题

太搞笑了!

如果我使用该包bm,我会遇到问题\newcommand{\hm}{\mathop{}\!\text{ημ} \mathop{}\!}

注意:我对 没什么意见\mathop{}\!\text{ημ} \mathop{}\!,但是\newcommand{\hm}{\mathop{}\!\text{ημ} \mathop{}\!}

正如我所说,奇怪的是代码:

\documentclass[a4paper,11pt]{book}
\usepackage{amsmath, amsthm, amssymb, amsfonts}

\usepackage{mathtools}
\usepackage[english,greek]{babel}
\usepackage[utf8]{inputenc}
\usepackage{cmbright}
\usepackage{kerkis}
\usepackage{bm}

\begin{document}

$\mathop{}\!\text{ημ} \mathop{}\! x$

\end{document}

可以,但是这段代码:

\documentclass[a4paper,11pt]{book}
\usepackage{amsmath, amsthm, amssymb, amsfonts}

\usepackage{mathtools}
\usepackage[english,greek]{babel}
\usepackage[utf8]{inputenc}
\usepackage{cmbright}
\usepackage{kerkis}
\usepackage{bm}

\newcommand{\hm}{\mathop{}\!\text{ημ} \mathop{}\!}

\begin{document}

$\hm x$

\end{document}

得到一个错误。

怎么了?

尊敬的阁下!

答案1

你可以做

\renewcommand{\hm}{...}

但有一个问题:当\bm它工作时,它会重新定义\hm。因此\hm x会产生预期的结果,但\bm{\hm x}不会,只会渲染“x”。

我建议使用不同的名称,例如\hmop

我还建议用不同的方式来定义这样的运算符:

\documentclass[a4paper,11pt]{book}
\usepackage{cmbright}
\usepackage{kerkis}
\usepackage[utf8]{inputenc}
\usepackage[english,greek]{babel}

\usepackage{amsmath}
\usepackage{bm}

\DeclareMathAlphabet{\mathgreek}{LGR}{maksf}{m}{n}
\SetMathAlphabet{\mathgreek}{bold}{LGR}{maksf}{bx}{n}

\makeatletter
\newcommand{\DeclareGreekMathOperator}[2]{%
  \begingroup\let\IeC\translate@greek
  \protected@edef\@temp{#2}%
  \edef\x{\endgroup
    \unexpanded{\DeclareMathOperator{#1}}%
    {\noexpand\mathgreek{\unexpanded\expandafter{\@temp}}}%
  }\x
}
\def\translate@greek#1{\csname LGR\string#1\endcsname}
\makeatother

\DeclareGreekMathOperator{\hmop}{ημ}

\begin{document}

$\mathop{}\!\text{ημ} \mathop{}\! x$

$\hmop x$

$\bm{\hmop x}$

\end{document}

在此处输入图片描述

如此复杂的定义有什么好处呢?在斜体上下文中尝试一下你的代码:

\textit{abc $\mathop{}\!\text{ημ} \mathop{}\! x$ def}

也会以斜体打印 ημ。

答案2

\hm宏由包定义bm

如果定义了“重”数学版本(通常由用户命令访问\heavymath),则会定义类似的命令\hm来访问这些“超粗”字体。

如果您不需要它那么使用\renewcommand{\hm}{patati patata}

相关内容