警告:名称{chapter*.2}已被引用但不存在,已由固定名称替换

警告:名称{chapter*.2}已被引用但不存在,已由固定名称替换

我正在写论文,最近我注意到我有一个无法摆脱的警告:

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、、makeglossariesLaTeX、LaTeX

是否应该先运行 Biber 或 是一个有趣的问题makeglossaries。如果您预计参考书目/引文会影响首字母缩略词列表(例如,因为条目.bib可能引用首字母缩略词),则应在 之前运行 Biber makeglossaries。如果您预计首字母缩略词会影响引文(例如,因为首字母缩略词列表中的条目引用了特定.bib条目),则应makeglossaries在 Biber 之前运行。理论上,两者可能会相互影响,在这种情况下,您必须运行 Biber、LaTeX、LaTeX、、makeglossariesLaTeX、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 和相关程序,也许可以为您提供帮助。

相关内容