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 用于交叉引用的那个。但是,在覆盖命令时不考虑第一个可能会在某些情况下导致问题。
我在文件 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 用于交叉引用的那个。但是,在覆盖命令时不考虑第一个可能会在某些情况下导致问题。