有没有办法让 Latex 检测前向引用?

有没有办法让 Latex 检测前向引用?

我有一个非常大的文档(我将其分成“章节”等),最近我移动了其中的一些内容。有没有一种好的方法可以让乳胶输出前向引用列表?(例如,第 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. 已经给出了一个很好的答案(我甚至会说这就是应该这样做)。但是这里有一个技术上便宜的方法,因为你已经按章节将其分解了:

  1. 删除所有.aux文件
  2. \includeonly{chapter1}并编译。查看是否有损坏的引用。然后
  3. \includeonly{chapter2}并编译。查看是否有损坏的引用。
  4. 冲洗并重复。

相关内容