我基本上有以下 LaTeX 代码,它应该显示一个编号的方程和对该方程的引用:
\[ i^2 = j^2 = k^2 = -1 \]
\begin{equation} \label{eq:ijk}
ijk = -1.
\end{equation}
Now you take \autoref{eq:ijk} and...
问题是,当使用 XeTeX 构建文件时,我收到一条错误消息,例如
! Package amsmath Error: Multiple \label's: label 'eq:ijk' will be lost.
See the amsmath package documentation for explanation.
关于如何解决此错误或如何在 tex.sx 上发布有关此问题的有用信息,有任何建议吗?
这是一个简单的例子:
\documentclass{scrreprt}
\usepackage{mathtools}
\usepackage[hidelinks]{hyperref}
\usepackage[printonlyused]{acronym}
\renewcommand{\theequation}{\ac{Gl.}~\arabic{chapter}.\arabic{equation}}
\begin{document}
\begin{equation}
\label{eq:ijk}
ijk = -1.
\end{equation}
Now you take \autoref{eq:ijk} and make something like\ldots
\end{document}
答案1
由于您正在使用该amsmath
包(间接地,因为您正在加载该mathtools
包),因此您不应该\theequation
直接操作。相反,您应该修改更高级别的宏\tagform@
。我真的不会在里面插入一个首字母缩略词生成宏\tagform@
。你认为你的读者、你的论文委员会成员或任何其他人会不确定“Gl。”可能是什么意思吗?另外,我建议您考虑加载该cleveref
包,部分原因是它具有很好的语言本地化,包括德语。额外的好处是\cref
会自动用括号括住方程式编号,这就是这种情况\autoref
。
\documentclass[ngerman]{scrreprt}
\usepackage{mathtools}
\usepackage[hidelinks]{hyperref}
\usepackage[printonlyused]{acronym}
\usepackage[noabbrev]{cleveref}
%%\renewcommand{\theequation}{\ac{Gl.}~\arabic{chapter}.\arabic{equation}}
\makeatletter
\def\tagform@#1{\maketag@@@{(\ignorespaces Gl.~#1\unskip\@@italiccorr)}}
\makeatother
\begin{document}
\setcounter{chapter}{1} % just for this example
\begin{equation}
\label{eq:ijk}
ijk = -1.
\end{equation}
Now you take \cref{eq:ijk} and make something like\ldots
\end{document}