![有没有办法让 Latex 检测前向引用?](https://linux22.com/image/232548/%E6%9C%89%E6%B2%A1%E6%9C%89%E5%8A%9E%E6%B3%95%E8%AE%A9%20Latex%20%E6%A3%80%E6%B5%8B%E5%89%8D%E5%90%91%E5%BC%95%E7%94%A8%EF%BC%9F.png)
我有一个非常大的文档(我将其分成“章节”等),最近我移动了其中的一些内容。有没有一种好的方法可以让乳胶输出前向引用列表?(例如,第 5 章中的内容引用了第 10 章中的结果)
答案1
这是写出所有引用(向前、向后和未定义的引用)的一种方法\jobname.refs
。
\newwrite\refs
\openout\refs=\jobname.refs
\makeatletter
\renewcommand\@setref[3]{%
\ifx#1\relax
\write\refs{'#3' \thepage\space undefined}%
\protect \G@refundefinedtrue
\nfss@text{\reset@font\bfseries ??}%
\@latex@warning{Reference `#3' on page \thepage\space
undefined}%
\else
\write\refs{'#3' \thepage\space
\expandafter\@secondoftwo#1}%
\expandafter#2#1\null
\fi
}
\makeatother
LaTeX 不跟踪章节,因此这会写出页面。格式为
'ref name' page refpage
您可以轻松地将\else
情况更改为\write\refs
仅当第二个数字晚于第一个数字时才执行。基本上,将\else
子句更改为以下内容。
\begingroup
\count@\expandafter\@secondoftwo#1\relax
\ifnum\c@page<\count@
\write\refs{'#3' \thepage\space
\expandafter\@secondoftwo#1}%
\fi
\endgroup
\expandafter#2#1\null
答案2
TH. 已经给出了一个很好的答案(我甚至会说这就是应该这样做)。但是这里有一个技术上便宜的方法,因为你已经按章节将其分解了:
- 删除所有
.aux
文件 \includeonly{chapter1}
并编译。查看是否有损坏的引用。然后\includeonly{chapter2}
并编译。查看是否有损坏的引用。- 冲洗并重复。