![为什么编译器一直告诉我(永远)重新运行,因为标签已经改变?](https://linux22.com/image/266613/%E4%B8%BA%E4%BB%80%E4%B9%88%E7%BC%96%E8%AF%91%E5%99%A8%E4%B8%80%E7%9B%B4%E5%91%8A%E8%AF%89%E6%88%91%EF%BC%88%E6%B0%B8%E8%BF%9C%EF%BC%89%E9%87%8D%E6%96%B0%E8%BF%90%E8%A1%8C%EF%BC%8C%E5%9B%A0%E4%B8%BA%E6%A0%87%E7%AD%BE%E5%B7%B2%E7%BB%8F%E6%94%B9%E5%8F%98%EF%BC%9F.png)
我有一篇 LaTeX 论文(多文件设置,使用\input{}
语句),从几天前开始,每次编译时都会告诉我(使用pdflatex
或latex
):
LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right
即使重新编译十次也无法修复它。不过,论文中的所有参考资料似乎都没有问题(不能 100% 确定,需要使用\ref
PDF 输出检查源代码中的每一个)。
这可能是因为我以某种方式放错了标签或引用。但如何找到它并解决问题?什么样的放错会导致此重复消息?
编辑:我已经将它追溯到acronym
与使用结合的软件包问题\ac{}
抽象定义文章(Elsevier 的 latex 课程,我使用的是最新版本,即 2009-09-17 的 1.20b)文档。下面是出现问题的最小复制/粘贴示例:
\documentclass[final,5p, times,twocolumn]{elsarticle}
%\documentclass{article} --> no problem when using this one (and removing frontmatter)
\usepackage[nolist]{acronym}
\begin{document}
\begin{frontmatter}
\begin{abstract}
This is just a sentence with an acronym in it: \ac{ICT}.
\end{abstract}
\end{frontmatter}
\acrodef{ICT}{Information and Communication Technologies}
\end{document}
我不清楚这是由于首字母缩略词包或 elsarticle 中的错误造成的。
答案1
这实际上是与命令的不良交互\twocolumn
,因此这是一个比类更普遍的问题elsarticle
。以下是触发错误的一个最小示例:
\documentclass[twocolumn]{article}
\usepackage[nolist]{acronym}
\begin{document}
\twocolumn[Heading with acronym \ac{ICT}]{
Some text.}
\acrodef{ICT}{Information and Communication Technologies}
\end{document}
正如@Jouhn Collins 注意到的,该.aux
文件现在\reset@new@label
放置得太晚了:
\relax
\undonewlabel{acro:ICT}
\newlabel{acro:ICT}{{}{1}}
\acronymused{ICT}
\reset@newl@bel
\newacro{ICT}[ICT]{Information and Communication Technologies}
一个解决方法是添加一个写入\reset@new@label
文件的宏.aux
。(我非常不愿意干预的定义\twocolumn
。现在尝试这样做\begin{document}
已经太晚了。)下面是这样的修复,首先是最小的例子:
\documentclass[twocolumn]{article}
\usepackage[nolist]{acronym}
\makeatletter
\newcommand{\extraclearlabels}{\protected@write\@auxout{}{%
\string\reset@newl@bel
}}
\makeatother
\begin{document}
\twocolumn[\extraclearlabels Heading with acronym \ac{ICT}]{
Some text.}
\acrodef{ICT}{Information and Communication Technologies}
\end{document}
原始示例如下:
\documentclass[final,5p,times,twocolumn]{elsarticle}
\usepackage[nolist]{acronym}
\makeatletter
\newcommand{\extraclearlabels}{\protected@write\@auxout{}{%
\string\reset@newl@bel
}}
\makeatother
\begin{document}
\begin{frontmatter}
\begin{abstract}
\extraclearlabels
This is just a sentence with an acronym in it: \ac{ICT}.
\end{abstract}
\end{frontmatter}
In text acronym \ac{ICT}.
\acrodef{ICT}{Information and Communication Technologies}
\end{document}