Sphinx文档,编号图形引用

6 投票
1 回答
2944 浏览
提问于 2025-04-17 16:48

我正在尝试在我的Sphinx文档项目中使用latexpdf输出,让图形编号正常工作。我安装了在这里找到的Sphinx numfig.py扩展 https://bitbucket.org/arjones6/sphinx-numfig

但是,每当我使用:num:标签来提供与图形编号的交叉引用时,我却得到了以下内容:

rst

.. _fig_logo:


.. figure:: logo.*

        Example of a figure

Reference to logo :num:`figure #fig_logo`

生成的输出是:

对logo图形的引用 ??

我是不是做错了什么?

1 个回答

7

看起来如果你的标签名称里有下划线(比如 fig_logo),sphinx 会把这个下划线替换成一个减号(-)。这样做是有道理的,因为在某些情况下,latex 对下划线的处理会有点奇怪。而引用的时候仍然使用下划线。这样一来,latex 就找不到你引用的标签了。

这是 sphinx 生成的 tex 代码:

\includegraphics{logo.png}
\caption{Example of a figure}\label{index:fig-logo}\end{figure}

Reference to logo \hyperref[index:fig_logo]{figure  \ref*{index:fig_logo}}

(注意 fig-logo 作为标签和 fig_logo 作为引用之间的区别。)

如果你把下划线换成减号,比如说:

.. _fig-logo:


.. figure:: logo.png

        Example of a figure

Reference to logo :num:`figure #fig-logo`

那么生成的 tex 代码看起来是这样的:

\includegraphics{pandas_bar.png}
\caption{Example of a figure}\label{index:fig-logo}\end{figure}

Reference to logo \hyperref[index:fig-logo]{figure  \ref*{index:fig-logo}}

在生成的 PDF 中,这个问题就解决了,显示为:

对图标 1 的引用

更新

如果你不想更改所有的标签,可以更新 numfig:只需在你扩展的副本中第 27 行之前添加这一行:

target = target.replace('_', '-')

我在 bitbucket 上开了一个 问题

撰写回答