【问题标题】:Sphinx cross-reference in LaTeXLaTeX 中的狮身人面像交叉引用
【发布时间】:2021-05-11 11:10:00
【问题描述】:

我在文件 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 技巧或类似的东西我做得不对?

【问题讨论】:

  • 请包含标签引用的reST。可能存在空格问题。

标签: latex python-sphinx pdflatex cross-reference


【解决方案1】:

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


我想出了以下解决方案:因为我不知道如何包含缺少的标签,所以我会这样做,以便 LaTeX 不再寻找它们。具体来说,我是通过overwriting\hyperref 命令来实现的。

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

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

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

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


注意

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

【讨论】:

    猜你喜欢
    • 2015-06-29
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多