我在 LaTeX 文档中同时使用 fancyref 和 babel,并通过 重新定义方程引用的标签\renewcommand{\frefeqname}{Eq.}
,使其看起来像“Eq. (3.4)”。但是,当我在某个地方有外语部分时,\begin{otherlanguage}{german} ... \end{otherlanguage}
就会\frefeqname
重置为英语的默认值,即equation
。当然,我可以\frefeqname
事后再次重新定义,但这很丑陋,我更希望有一个干净的解决方案来解决这个问题。
答案1
包babel
使用\caption<language>
来更改标题文本。此宏在\selectlanguage
或 环境中调用otherlanguage
。因此,重新定义应放在这些语言宏中。可以通过 来babel
完成\addto
:
\addto\captionsenglish{%
\renewcommand*{\frefeqname}{Eq.}%
}
fancyref
或者可以使用包的接口,它提供了\fancyrefaddcaptions
这个目的,参见记录fancyref
。
\documentclass{article}
\usepackage[german,english]{babel,fancyref}
\fancyrefaddcaptions{english}{%
\renewcommand*{\frefeqname}{Eq.}%
}
\fancyrefaddcaptions{german}{%
\renewcommand*{\frefeqname}{Gl.}%
}
\begin{document}
\noindent
\fref{eq:einstein} and \fref{eq:velocity}.
\begin{equation}
E=mc^2 \label{eq:einstein}
\end{equation}
\begin{otherlanguage}{german}
\fref{eq:einstein} und \fref{eq:velocity}.
\begin{equation}
v=\frac st \label{eq:velocity}
\end{equation}
\end{otherlanguage}
\fref{eq:einstein} and \fref{eq:velocity}.
\end{document}