![警告:名称{chapter*.2}已被引用但不存在,已由固定名称替换](https://linux22.com/image/464860/%E8%AD%A6%E5%91%8A%EF%BC%9A%E5%90%8D%E7%A7%B0%7Bchapter*.2%7D%E5%B7%B2%E8%A2%AB%E5%BC%95%E7%94%A8%E4%BD%86%E4%B8%8D%E5%AD%98%E5%9C%A8%EF%BC%8C%E5%B7%B2%E7%94%B1%E5%9B%BA%E5%AE%9A%E5%90%8D%E7%A7%B0%E6%9B%BF%E6%8D%A2.png)
我正在写论文,最近我注意到我有一个无法摆脱的警告:
name{chapter*.2} has been referenced but does not exist, replaced by a fixed one
我创建了一个最小工作示例,您可以使用它来重现警告。我无法进一步减少它,因为警告似乎仅在您同时使用目录、参考书目、超链接和首字母缩略词词汇表时才会出现。它似乎也仅在文档的第一次编译运行后出现。因为这是我的论文,所以我担心这个警告可能会导致一些错误。如果您能帮助我摆脱这个警告,我将不胜感激。
编辑:我还注意到,第一次编译运行后,目录中也缺少首字母缩略词词汇表。经过另一轮编译后,它出现在目录中。
编辑:您可以在此处找到日志文件内容:https://pastebin.com/Hu8Hm3ng
移动终端
\documentclass[
12pt,
DIV=12,
paper=A4,
listof=totoc,
parskip=half,
bibliography=totoc,
]{scrreprt}
\usepackage[
backend = biber,
]{biblatex}
\addbibresource{MyBib.bib}
\usepackage[
toc,
nomain,
acronym,
nopostdot,
nonumberlist,
]{glossaries}
\loadglsentries{MyAcronym}
\makeglossaries
\usepackage[
bookmarks = true,
bookmarksnumbered = true,
pdfpagemode = {UseOutlines},
pdfpagelabels = true,
]{hyperref}
\begin{document}
\tableofcontents
\chapter{Lorem Ipsum}
This is a citation \cite{Test.2023}. This is a \acrfull{Test}
\printglossary[title={Acronyms}, type=\acronymtype]
\printbibliography
\end{document}
我的书目
@book{Test.2023,
author = {Lorem Ipsum},
year = {2023},
title = {Strange Warning},
}
我的首字母缩略词
\newacronym{Test}{Test}{Test Full}
答案1
总结:只需再次使用 LaTeX 编译几次即可消除 MWE 中的警告。
包含交叉引用和目录之类的列表的文档需要使用 LaTeX 编译多次,因为 LaTeX 无法“预见未来”。当目录排版时,LaTeX 尚未处理其中引用的章节,因此无法知道它们的页码。LaTeX 通过在编译运行期间将此信息写入辅助文件来解决此问题。然后可以在下一次运行中在文档开头读入该文件。这样,从 LaTeX 运行开始,就可以获得章节的页码,并且可以用正确的页码引用排版目录。当然,这只有在多次运行 LaTeX 时才有效。(有关背景和更多技术解释,请参阅了解引用和标签的工作原理)
LaTeX 具有启发式设置,.log
如果需要进一步运行 LaTeX(因为添加了新的交叉引用或它们可能已更改),它会在文件中警告您。请始终按需要重新运行 LaTeX 以消除这些消息。如果您收到不理解的警告,重新运行并查看它是否消失是个不错的主意。如果这没有帮助,删除所有辅助文件(、、、、、... .aux
)并从头.bbl
开始重新编译有时也很有用。.bcf
.toc
.acn
如果涉及各种外部工具(如 Biber 和)makeglossaries
,事情就会变得更加复杂,并且可能需要运行更多的 LaTeX。
我会至少按如下方式编译您的示例
LaTeX、Biber、LaTeX、LaTeX、、
makeglossaries
LaTeX、LaTeX
是否应该先运行 Biber 或 是一个有趣的问题makeglossaries
。如果您预计参考书目/引文会影响首字母缩略词列表(例如,因为条目.bib
可能引用首字母缩略词),则应在 之前运行 Biber makeglossaries
。如果您预计首字母缩略词会影响引文(例如,因为首字母缩略词列表中的条目引用了特定.bib
条目),则应makeglossaries
在 Biber 之前运行。理论上,两者可能会相互影响,在这种情况下,您必须运行 Biber、LaTeX、LaTeX、、makeglossaries
LaTeX、LaTeX、Biber、LaTeX、LaTeX。
但实际上,这可能没有什么区别,因为您不应该在运行之间删除辅助文件,而可以makeglossaries
根据需要定期重新运行 Biber。
一般来说,“过于频繁”地编译不会有问题。编译太少可能是因为辅助文件中的前向数据缺失或过期,导致引用无法正确解析。
不幸的是,你似乎设法创建了一种需要进一步运行 LaTeX 的情况,但 LaTeX 并没有明确地告诉你这一点。相反,你只会收到关于参考文献的略带神秘的警告,并且目录已关闭。事实上,以下略微减少的 MWE 甚至不会在运行后的 LaTeX 运行中产生任何重新运行警告makeglossaries
,但它肯定需要至少使用
乳胶,
makeglossaries
, 乳胶, 乳胶
以便目录正确显示。
\documentclass[
listof=totoc,
bibliography=totoc,
]{scrreprt}
\usepackage[toc,]{glossaries}
\newacronym{Test}{Test}{Test Full}
\makeglossaries
\usepackage{hyperref}
\begin{document}
\tableofcontents
\chapter{Lorem Ipsum}
This is a \acrfull{Test}
\addchap{Foo}
Hullo
\printglossary[title={Acronyms}, type=\acronymtype]
\end{document}
一般来说,我建议makeglossaries
多运行几次 LaTeX(以及 Biber 和您需要的其他任何工具),即使这似乎没有必要,以防万一。这类工具可以latexmk
监控辅助文件并自动为您运行 LaTeX 和相关程序,也许可以为您提供帮助。