修改 \eqref 命令

修改 \eqref 命令

我想编辑\eqref命令,以便 \eqref 生成方程 (1),而不是 (1)。当然,我可以定义

\newcommand{\reff}{Eq.~\eqref}

但是当遇到该命令时,我的编辑器就失去了显示以前标记的方程式列表的能力\eqref(我正在使用 Inlage)。

所以我想知道是否可以引用以前的命令定义,而无需重新定义它,而只需附加更改。形式

\renewcommand{\eqref}{Eq.~[old_\eqref definition]}

希望讲得清楚。

答案1

有一种“标准”方法:

\usepackage{letltxmacro}
\LetLtxMacro{\originaleqref}{\eqref}
\renewcommand{\eqref}{Eq.~\originaleqref}

首先,保存要修改的命令的副本,然后使用保存的副本重新定义它。这几乎相当于说

\renewcommand*{\eqref}[1]{Eq.~\originaleqref{#1}}

但这样效率较低,因为它读取两次参数:一次用于(新的)\eqref,一次用于\originaleqref

还有电子工具箱方法:

\usepackage{etoolbox}
\pretocmd{\eqref}{Eq.~}{}{}

不需要保留旧命令的副本。但是,对于使用\DeclareRobustCommand或采用可选参数定义的命令,此方法将失败,因此需要查看命令的定义。

一个xpatch人可以做

\usepackage{xpatch}
\xpretocmd{\eqref}{Eq.~}{}{}

答案2

(我知道这不是您想要做的,但是它非常接近,因此其他人可能会发现这个问题并希望执行以下操作。)

egreg 的回答是,如果您只想在引用时更改引用的排版方式,该怎么办。如果您想在任何地方更改它,即当标签本身排版时,那么您需要更改一个名为的宏\tagform@。据我所知,它amsmath不包含轻松更改它的功能,因此需要重新定义它。此外,它的定义涉及一些明确“做一些特殊的事情”的命令,因此应该保留它的整体形式。

其原始定义是:

\def\tagform@#1{\maketag@@@{(\ignorespaces#1\unskip\@@italiccorr)}}

因此,为了改变它,你需要在序言中加入以下内容:

\makeatletter
\def\tagform@#1{\maketag@@@{Eq.~(\ignorespaces#1\unskip\@@italiccorr)}}
\makeatother

有关周围命令的解释,请参阅\makeatletter 和 \makeatother 起什么作用?

成为#1方程编号。将所有内容保留在\maketag@@@宏内,并将围绕的内容保留在#1原处。因此,要更改方程编号的格式(如我上面所做的那样),请更改左括号和右括号仅此而已!(除非您知道自己在做什么。)

因此,如果您希望方程式数字为绿色并带有紫色斑点,则可能需要:

\makeatletter
\def\tagform@#1{\maketag@@@{\GreenWithPurpleSpots{\ignorespaces#1\unskip\@@italiccorr}}}
\makeatother

其中,在包[1]\GreenWithPurpleSpots中定义。StrangeAndBizarreColours

更严重的是,如果你想要用方括号代替弯括号,你可以这样写:

\makeatletter
\def\tagform@#1{\maketag@@@{[\ignorespaces#1\unskip\@@italiccorr]}}
\makeatother

下面是一个示例,展示了此重新格式化和 egreg 对命令的重新定义\eqref

\documentclass{article}
\usepackage{amsmath}

\makeatletter
\def\tagform@#1{\maketag@@@{[\ignorespaces#1\unskip\@@italiccorr]}}
\makeatother

\let\originaleqref=\eqref
\renewcommand{\eqref}{Eq.~\originaleqref}

\begin{document}

\begin{equation}
\label{aneq}
x^2 + y^2 = z^2
\end{equation}

We refer to \eqref{aneq}.
\end{document}

输出结果如下:

重新定义方程标签


[1]:这是一个玩笑,尽管我完全预计该包将在发布后大约一周内出现在 CTAN 上。

答案3

\eqref您可以使用以下包,而不必进行修改cleveref

\documentclass{article}
\usepackage{amsmath}

\usepackage{cleveref}

\begin{document}

\begin{equation}
\label{quack}
x^2 + y^2 = z^2
\end{equation}

We refer to \cref{quack}.
\end{document}

答案4

尝试这个:

\newcommand{\eq}[1]{\hyperref[#1]{Eq. \eqref{#1}}}

当然,你需要 hyperref 包。将其放在序言中:

\usepackage[colorlinks]{hyperref}
\hypersetup{linkcolor=DarkRed}

(colorlinks 选项可以让你绘制引用文本)

相关内容