我在一本书中使用子方程环境,其中有些文本是无衬线字体。当我引用子方程时,即使周围的文本是无衬线字体,引用也会以衬线字体显示。下面是一个演示该问题的最小示例。
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\begin{subequations}
\begin{align}
1+1&=2 \label{foo}\\
2+2&=4
\end{align}
\end{subequations}
\textsf{See equation \eqref{foo}.}
\end{document}
我觉得这似乎是个 bug。有人能建议如何解决这个问题吗?
答案1
这是一项功能,而不是错误,并且它会在所有带编号的方程式环境中发生,而不仅仅是subequations
,如果amsmath
加载并\eqref
使用。造成此行为的原因是中\normalfont
的定义:\maketag@@@
amsmath.sty
\def\maketag@@@#1{\hbox{\m@th\normalfont#1}}
如果要抑制此功能,可以重新定义\maketag@@@
:
\documentclass{article}
\usepackage{amsmath}
\makeatletter
\def\maketag@@@#1{\hbox{\m@th#1}}
\makeatother
\begin{document}
\begin{subequations}
\begin{align}
1+1&=2 \label{foo}\\
2+2&=4
\end{align}
\end{subequations}
\textsf{See equation \eqref{foo}.}
\end{document}
但是请注意,这种重新定义将使交叉引用中使用的字符串继承周围文本的字体属性;这可能会带来不便;例如,想想当使用斜体时。事实上,由于方程式使用罗马字体标记,因此交叉引用应使用罗马字体。这就是软件包作者决定首先添加的原因之一(我相信)\normalfont
。
答案2
我认为你也可以重新定义\eqref
,这样不会产生斜体引用,但会选择当前的字体系列。也就是说,您会得到:
代码:
\documentclass{article}
\usepackage{amsmath}
\renewcommand{\eqref}[1]{\upshape(\ref{#1})}
%\renewcommand{\eqref}[1]{(\ref{#1})}% uncomment this line if you want references to use the font shape of the surrounding text, as well as the series and family (and you can comment/remove the previous line in that case)
\begin{document}
\begin{subequations}
\begin{align}
1+1&=2 \label{foo}\\
2+2&=4
\end{align}
\end{subequations}
\textsf{See equation \eqref{foo}.}
\textit{See equation \eqref{foo}.}
\end{document}
编辑:请注意,我推荐这个的原因并非 Gonzalo Medina 给出的。我可能会借给你我的斧头,但不会认为你应该砍掉你的谷仓当柴火。