我想编辑\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 选项可以让你绘制引用文本)