使用 amsmath 更改方程编号的外观

使用 amsmath 更改方程编号的外观

对于我的文档中的方程式,我使用amsmath包。为了使公式数字更加醒目,我希望它们以粗体显示,并且稍微向右缩进一点,即像这样:

默认输出和期望输出的比较

我已经尝试重新定义内部amsmath\maketag@@@\tagform@。但两者

\def\maketag@@@#1{\hbox{\m@th\bfseries#1\hspace{3mm}}}

\def\tagform@#1{\maketag@@@{\bfseries(\ignorespaces#1\unskip\@@italiccorr)}\hspace{3mm}}

还更改了 生成的引用\eqref,因为此宏在内部使用\tagform@它来生成其输出。但是,这些引用应保留其默认外观,因为我不需要运行文本中的突出格式。

到目前为止我尝试过的最有希望的方法是重新定义\print@eqnum

\def\mytagform#1{\maketag@@@{\bfseries(\ignorespaces#1\unskip\@@italiccorr)}\hspace{3mm}}
\def\print@eqnum{\mytagform\theequation}

此重新定义不会影响\eqref引用。但遗憾的是,它似乎只适用于align环境,环境的标签equation不会改变:

\documentclass{article}
\usepackage{amsmath}
\makeatletter
% \maketag@@@ and \tagform@ also influence \eqref
% \def\maketag@@@#1{\hbox{\m@th\bfseries#1\hspace{3mm}}}
% \def\tagform@#1{\maketag@@@{\bfseries(\ignorespaces#1\unskip\@@italiccorr)}\hspace{3mm}}

% \print@eqnum looks promising, but applies only to align environments
\def\mytagform#1{\maketag@@@{\bfseries(\ignorespaces#1\unskip\@@italiccorr)}\hspace{3mm}}
\def\print@eqnum{\mytagform\theequation}
\makeatother
\begin{document}
\begin{equation}
    1+1=2\label{equation}
\end{equation}
\begin{align}
    1+1 &= 2\label{align}
\end{align}
\eqref{equation}, \eqref{align}
\end{document}

输出 在此处输入图片描述

如何在不影响 产生的参考的情况下改变方程编号的外观\eqref

答案1

查看代码,我可以看到很多地方\tagform@使用了 ,并且可能 的代码equation明确使用了 而不是\print@eqnum。完全猜测,我会说\print@eqnum当 amsmath 必须读入整个方程式并仔细排版(以获得正确的对齐)时使用 。由于equation不涉及任何花哨的对齐,因此可以直接处理它,因此标签\tagform@直接使用。

那反其道而行呢?修改\tagform@成你想要的样子,然后再改成\eqref使用原来的。

\documentclass{article}
\usepackage{amsmath}
\makeatletter
\let\mytagform@=\tagform@
\def\tagform@#1{\maketag@@@{\bfseries(\ignorespaces#1\unskip\@@italiccorr)}\hspace{3mm}}
\renewcommand{\eqref}[1]{\textup{\mytagform@{\ref{#1}}}}
\makeatother
\begin{document}
\begin{equation}
    1+1=2\label{equation}
\end{equation}
\begin{align}
    1+1 &= 2\label{align}
\end{align}
\eqref{equation}, \eqref{align}
\end{document}

结果:

ams 标签已更改

(编辑时添加注释:Barbara Beeton 要求我添加一条评论,大意是 AMS 对环境的重新定义equation是为了使其看起来与原始环境一样,但会检查是否\qed应添加符号。此外,eqnarray它的定义似乎有点像雷区,所以如果你使用,事情可能会出错eqnarray!)

相关内容