2010-04-21 25 views
23

Al escribir RST que se procesará con Sphinx, no puedo obtener la salida de LaTeX de Sphinx para utilizar números de figura al hacer referencia a las figuras. Por ejemplo, este código:Hacer referencia a figuras con números en Sphinx y reStructuredText

The lemmings are attacking, as can be seen in :ref:`figlem`. 

.. _figlem: 

.. figure:: _static/lemming_invasion.* 

    They're coming! 

se convertirá en esto:

Los lemmings están atacando, como se puede observar en Están viniendo!

/imagen va aquí/

Figura 1.1: Ya vienen!

Pero lo que yo quiero es la forma "estándar" del látex de figuras que hacen referencia, así:

Los lemmings están atacando, como se puede ver en la figura 1.1

Cómo ¿Lo logro? El código que estoy usando actualmente es el recomendado por el manual de Sphinx, pero no produce el resultado que deseo.

+0

se ve como una característica importante a la solicitud. – fccoelho

+0

¿Alguna vez encontró una solución para esto? Realmente necesito esta característica. – jterrace

+0

@jterrace No, nunca encontré la solución. – Lucas

Respuesta

17

La extensión numfig hace exactamente esto. Lo intenté y funcionó para mí.

+0

Gracias! Esto funciona como un encanto para mí. –

+1

Esto no funcionó para mí inicialmente (para HTML), pero utilicé la corrección por 'rrieber' aquí: https://bitbucket.org/arjones6/sphinx-numfig/issue/6/notimplementederror-unknown-node-num_ref y fue capaz de hacer que funcione. ¡Gracias! –

+0

¿Cómo hiciste que funcionara? El archivo diff provisto por rrieber no coincide con el numfig.py que obtuve de ese repositorio bitbucket. –

0

Se puede usar código de látex sin procesar, en línea. Para el ejemplo anterior, primero se define una función para el código de látex sin procesar y luego se usa para referirse a la figura con el comando latex \ref{}, y para establecer una etiqueta para la figura con el comando latex \label{}.

lo siguiente debe funcionar:

.. role:: raw-latex(raw) 
    :format: latex 

The lemmings are attacking, as can be seen in :ref:`figlem` 
on figure :raw-latex:`\ref{pic:lem}`. 

.. _figlem: 

.. figure:: _static/lemming_invasion.* 

    They're coming! :raw-latex:`\label{pic:lem}` 

Tenga en cuenta que el comando \label{} aparecerá dentro de la leyenda en el archivo tex, pero todavía es aceptable, al menos por pdflatex. También tenga en cuenta que debe haber al menos un espacio antes de :raw-latex.

5

Para ampliar la respuesta aceptada, puede configurarla rápidamente de la siguiente manera. Coloque el archivo numfig.py en su directorio source. A continuación, abra conf.py y elimine la línea que dice

sys.path.insert(0, os.path.abspath('.')) 

A continuación, añada a la lista 'numfig'extensions.

para utilizar en su documento rst, primera etiqueta su figura (por ejemplo, fig-main):

.. _fig-main: 

.. figure:: main.png 

    This is the figure caption. 

Por último, se puede hacer referencia a su número de la figura usando la directiva :num:, así:

Refer to the main figure (Figure :num:`fig-main`). 
+1

Esto ahora está integrado y el rol en línea se llama: numref http://www.sphinx-doc.org/en/stable/markup/inline.html#cross-referencing-figures-by-figure-number –

12

En las últimas versiones de Sphinx (1.3+), numerar las cifras y hacer referencia a ellas desde el texto se hizo un poco más fácil ya que el soporte ahora está incorporado.

En el texto, se puede hacer algo como:

.. _label: 
.. figure:: images/figure.* 


At :numref:`label` you can see... 

El resultado final debe ser algo así como "En la figura 1.1 se puede ver ...". Esta técnica funciona tanto con la salida HTML predeterminada como con la salida LaTeX.

En su archivo conf.py, asegúrese de establecer la marca numfig = True. También hay opciones de configuración para el formato de texto de las referencias (numfig_format y numfig_secnum_depth).

Referencias:

+0

Usted tienen razón. Esto funciona tanto para HTML como para LaTeX (aunque la documentación de Sphinx dice que solo funciona para HTML). – mzjn

Cuestiones relacionadas