2012-09-28 13 views
8

Uso Sphinx para generar algunos documentos. Tengo un documento reStructuredText y me gustaría poner una imagen en él. El caso es que la imagen debe poder hacer clic para que, después de que un usuario haga clic en la imagen, se muestre esta imagen a tamaño completo. Yo uso la directiva imagen y su opción de destino así:Comportamiento similar a una miniatura utilizando el atributo de destino de la directiva de imagen

.. image:: /images/some_image.png 
    :alt: Image descripion 
    :align: center 
    :target: `big_some_image`_ 

.. _big_some_image: /images/some_image.png 

El problema es que en la página representada consigo:

<a href="/images/some_image.png"><img src="../../../_images/some_image.png"></a> 

Así que no es correcto src de la directiva de la imagen, sino una incorrecta href atributo del hipervínculo.

Preguntas:

  • ¿Hay alguna manera de generar vínculos en la forma en que lo hace la Directiva de imagen? Me refiero en relación con el documento.

  • ¿Hay alguna otra forma (incorporada) de tener un comportamiento de "miniatura -> clic -> imagen grande"?

Respuesta

3

Cuando se utiliza la directiva image desde el interior de la esfinge, esfinge hace un manejo especial para encontrar el archivo de imagen y copiarla en su proyecto (como el directorio de _images), y luego representa el HTML para que apunte a ese lugar .

Pero la opción target simplemente toma una URL como parámetro. No sabe nada acerca de su proyecto Sphinx, ni cómo se presentan sus imágenes, y no intenta adivinar.

Si desea que apunte a una versión más grande del mismo archivo, es probable que necesite hacer algunos pasos manuales (como quizás copiar el archivo a una ubicación específica), o tal vez proporcionar una URL relativa a la gran archivo, en lugar de la URL absoluta que tiene en su ejemplo.

Si quiere ir por un camino completamente diferente, también puede intentar sobrescribir y modificar las plantillas HTML para que su proyecto agregue algo de JavaScript para obtener el efecto de hacer clic en una imagen más grande que desee.

+1

¿Hay realmente ninguna otra forma? Es el tipo de funcionalidad que uno esperaría que fuera compatible de manera inmediata. – toniedzwiedz

7

Basta con utilizar la opción de escala:

.. image:: large_image.png 
    :scale: 20% 

Cuando se hace clic en la imagen escalada, la imagen se carga completo en su propia ventana. Así que esto no aumenta el tamaño de la imagen en la página, pero de todos modos sería complicado.

+0

Mientras esto funciona, significa que no obtiene ajuste automático de escala * (con sphinx 1.3 y tema de RTD al menos) * – ideasman42

+0

Sí, esto reduce mi imagen horizontalmente. Editar: encontró que este CSS funciona a su alrededor: 'img { height: auto! Important; } ' –

0

Parece que hay una extensión de Sphinx que hace esto ahora, y bastante bien en eso, sphinxcontrib-fancybox 0.3.2. Instalar con pip, añadirlo a sus extensiones en conf.py, y el uso de la directiva fancybox:

.. fancybox:: images/image.png 
+0

Acabo de probarlo. Todavía es un poco áspero en los bordes. La leyenda solo se muestra en la imagen de tamaño completo, lo cual es un factor decisivo para mí, desafortunadamente. Necesito que haga lo opuesto. Mostrar el título solo en la miniatura. – fred

+0

Lo que estoy haciendo por ahora es establecer un ancho/alto para mi tamaño de miniatura. Luego, cuando hago clic en la imagen, envía el navegador a la url de la imagen. Es lo mismo que usar 'scale'. Si puedo hacer que el navegador abra una nueva ventana/pestaña, podría vivir con eso. – fred

0

enlaces relativos parecen funcionar. Para la configuración de documentos Mapserver, si una imagen se coloca en el directorio images, un vínculo relativo como en el siguiente código funciona en mi compilación local.Aquí hay un ejemplo usando figura (el guión bajo ("_") antes de "imágenes" en el objetivo enlace es necesario):

.. figure:: ../../images/carto-elements.png 
    :height: 400 
    :width: 600 
    :align: center 
    :target: ../../_images/symcon-overlay.png 
Cuestiones relacionadas