LaTeX 中的 Sphinx 交叉引用

Sphinx cross-reference in LaTeX

我在文件 A 中找到了以下参考文献:

.. _my-label:

我在文件 B 中引用了它:

this is a reference to file A :ref:`my-label`

这会在输出 HTML 时生成预期的交叉引用。但是,当输出 LaTeX 时,它没有,我有经典警告:

LaTeX Warning: Hyper reference `my-label:my-label' on page XX undefined on input line YY.

是否有 LaTeX 技巧,如双重编译或类似的东西,我没有正确地做?

我遇到了同样的问题。 HTML 对我来说编译没有错误,但是 LaTeX 编译确实抛出了你描述的 hyperref 错误。在我看来,由于某些不明原因,Sphinx 没有创建 hyperref 试图引用的标签。


我想到了以下解决方案:因为我不知道如何包含丢失的标签,所以我会这样做,这样 LaTeX 就不会再寻找它们了。详细地说,我是通过 overwriting \hyperref 命令来做到这一点的。

我在 conf.py 文件中包含了以下代码:

latex_elements = {
    'preamble': r'''
\renewcommand{\hyperref}[2][]{#2}
'''
    }

这包括 Sphinx 创建的 LaTeX 文档序言中的 \renewcommand{...。它将覆盖 \hyperref 命令,这样它就不会尝试插入 link,而只是打印 link 文本。

显然,使用此解决方案,导致错误的引用不会在您的 PDF 文档中显示为 hyperlinks,但至少它编译时没有错误。


备注

我所描述的内容非常适合我的用例,但是,Hyperref manual 中描述了 \hyperref 命令可以通过两种不同的方式调用(\hyperref{URL}{category}{name}{text}\hyperref[label]{text})。我只是覆盖了第二个,因为它似乎是 Sphinx 用于交叉引用的那个。但是,在覆盖命令时不考虑第一个可能会在某些情况下导致问题。