我在文件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
错误。在我看来,出于某种模糊的原因,斯芬克斯并没有创建hyperref
试图引用的标签。
我想出了以下解决方案:由于我不知道如何包括丢失的标签,我只会让LaTeX不再寻找它们。详细地说,我通过重写hyperref
命令来完成此操作。
我在conf.py
文件中包含了以下代码:
latex_elements = {
'preamble': r'''
renewcommand{hyperref}[2][]{#2}
'''
}
这包括斯芬克斯创建的LaTeX文件序言中的renewcommand{...
。它将覆盖hyperref
命令,这样它就不会试图插入链接,而只是打印链接文本。
显然,使用此解决方案,导致错误的引用不会在PDF文档中显示为超链接,但至少它是在编译时没有错误的。
注意
我所描述的对于我的用例来说非常好,但是,Hyperref手册中描述了hyperref
命令可以用两种不同的方式调用(hyperref{URL}{category}{name}{text}
和hyperref[label]{text}
(。我只是改写了第二个,因为这似乎是斯芬克斯用来交叉引用的那个。但是,在某些情况下,重写命令时不考虑第一个可能会导致问题。