¿Cómo hago una referencia a una figura en markdown usando pandoc?

100

Actualmente estoy escribiendo un documento con rebajas y me gustaría hacer una referencia a una imagen de mi texto.

this is my text, I want a reference to my image1 [here]. blablabla

![image1](img/image1.png)

Quiero hacer esa referencia porque después de convertir mi markdown a pdf, las imágenes se colocan en una o dos páginas después y el documento no tiene ningún sentido.

ACTUALIZAR:

He tratado de respuesta de Ryan en ese puesto y no puedo hacer que funcione. Aparentemente el código:

[image]: image.png "Image Title" 
![Alt text][image] 
A reference to the [image](#image).

debe producir:

\begin{figure}[htbp] 
\centering 
\includegraphics[keepaspectratio,width=\textwidth,height=0.75\textheight]{i mage.png} 
\caption{Alt text} 
\label{image} 
\end{figure} 

A reference to the image (\autoref{image}).

en cambio, obtengo:

\begin{figure}[htbp]
\centering
\includegraphics{image.png}
\caption{Alt text}
\end{figure}

A reference to the \href{\#image}{image}.

He notado dos problemas:

  • \label{image} no aparece: no se crea ninguna referencia.
  • (\autoref{image})se convierte en \href{\#image}{image}: no se detecta ninguna referencia cruzada.

Y luego, cuando lo convierto a pdf, obviamente no se vincula a la imagen. Hay un enlace, pero no enlaza con nada.

¡Cualquier ayuda será muy apreciada!

Romain Piel
fuente
1
¿Ha probado el método mencionado en groups.google.com/group/pandoc-discuss/msg/4a42442657a96414 ?
NN
Lo he probado y no produce una autoref. raro ...
Romain Piel
Quizás debería editar su pregunta para incluir lo que intentó, lo que obtuvo y lo que desea (para que sea más fácil ayudarlo).
NN

Respuestas:

95

En pandoc incluso puedes hacer:

![This is the caption\label{mylabel}](/url/of/image.png)
See figure \ref{mylabel}.
NN
fuente
41
Esto solo ayuda si convierte a TeX, pero no si también desea crear HTML desde la misma fuente de Markdown.
Jakob
12
Hay un par de filtros disponibles para hacer el trabajo cifra de referencia con todos los formatos de salida Pandoc-fignos y Pandoc-CrossRef
joelostblom
Desafortunadamente, esta no es una forma muy flexible de hacerlo. No se puede especificar el ancho o el alto de la imagen de esta manera. ¿Es posible incluir archivos PDF de esa manera? Si no, eso también sería una desventaja, ya que es preferible en el PDF como caso de salida.
Zelphir Kaltstahl
2
Es posible establecer el ancho y el alto usando:![This is the caption\label{mylabel}](/url/of/image.png){width=30px height=20px}
Sam Walpole
24

Puedes usar los pandoc-fignos filtro para la numeración y referenciación de figuras. Funciona con cualquier formato de salida, no solo con LaTeX.

Agrega una etiqueta a los atributos de la imagen como esta:

 ![Caption.](image.png) {#fig:description}

... y luego haga referencia a la figura como esta:

 @fig:description

La información sobre cómo instalar y aplicar el filtro pandoc-fignos se proporciona en su página web. También existe el filtro pandoc-eqnos para hacer el mismo tipo de cosas con ecuaciones.

tjd
fuente
Me gustaría hacer algo similar al referirme a un elemento de una lista ordenada
DanielTuzes
18

Hablé con Ryan Gray después de leer su respuesta en una publicación similar. En realidad, su solución de usar:

[image]: image.png "Image Title" 
![Alt text][image] 
A reference to the [image](#image).

solo se adapta cuando se utiliza multimarkdown.

Cuando se trata de pandoc, la única solución para hacer referencias cruzadas es usar directamente palabras clave de látex:

[image]: image.png "Image Title"
![Alt text \label{mylabel}][image]
See figure \ref{mylabel}.
Romain Piel
fuente
5
Pero como dijo Jakob en la respuesta aceptada, "Esto solo ayuda si convierte a TeX, pero no si también desea crear HTML desde la misma fuente de Markdown".
DanielTuzes
Para multimarkdown, ¿hay alguna manera de hacer referencia a la figura mediante un número de figura calculado automáticamente? Me imagino algo como [] (# imagen) y luego multimarkdown reemplazaría el texto en blanco con un número (como lo hace con las notas al pie).
Alec Jacobson
4

Pandoc admite secciones de referencia (a través de identificadores de sección con el prefijo #).

Los comentarios sobre este problema abierto describen cómo la siguiente solución alternativa aprovecha los identificadores de sección para generar referencias de imágenes en LaTeX y HTML:

<div id="fig:lalune">
![A voyage to the moon\label{fig:lalune}](lalune.jpg)

</div>

[The voyage to the moon](#fig:lalune).

Se </div>requiere la línea vacía antes .

ivotron
fuente
4
Una solución adecuada, es decir, una extensión de la sintaxis de rebajas de pandoc para permitir identificadores para imágenes, finalmente está en camino. estad atentos :)
Susanne Oberhauser
2

Suponiendo que desea una salida PDF de Pandoc al final:

La mejor solución para insertar imágenes y cambiar sus atributos que encontré es:

\begin{figure}[H]
\includegraphics[width=0.25\textwidth, height=!]{images/path.png}
\centering
\caption{mycaption}
\end{figure}

y en mi template.latextengo:

\usepackage{wrapfig}
\usepackage{float}

Otras soluciones no pueden especificar el ancho o alto de la imagen, al menos no en la rebaja estándar. Sin embargo, a menudo es esencial que algo como un libro o un papel especifique las dimensiones de las figuras, excepto que desea configurar el tamaño de salida de las imágenes antes de usarlas en su documento. En ese caso, tendría que lidiar con diferentes configuraciones para esas herramientas que usa para crear las imágenes.

Recomiendo en el caso de Matplotlib exportar a PDF y luego usar el código que publiqué. Esto le dará la mejor calidad de imagen y la mayor flexibilidad para configurar cómo se verá la imagen en el PDF de salida, sin tener que preocuparse por cosas.

Zelphir Kaltstahl
fuente
¿Toda esta sintaxis de látex va directamente a su archivo de rebajas?
spinup
@spinup Sí. Pandoc puede manejar material de Latex incrustado en su archivo de rebajas. Otro consejo: exporte como archivo PDF al exportar desde Matplotlib. De esta manera, Pandoc / el motor de látex no disminuirá la calidad de la imagen y tendrá una imagen escalable, en lugar de algo pixelada cuando acerque y aleje su archivo PDF.
Zelphir Kaltstahl
1

Con pandoc-crossref puede cruzar figuras de referencia con la siguiente sintaxis:

![Caption](file.ext){#fig:label}

Luego, haga referencia a la figura en el texto similar a la sintaxis de la cita [@fig:label]y compile con --filter pandoc-crossref(debe aparecer antes --filter pandoc-citeprocsi también está usando eso).

Puede controlar el estilo con, por ejemplo, \usepackage[font=small,labelfont=bf]{caption}en header-includes.


Un buen truco relacionado si lo usas \listoffiguresen látex es este filtro lua , que te permite establecer un título corto en lugar de que la leyenda de la figura completa aparezca en tu lista de figuras:

![Caption](file.ext){#fig:label short-caption='my short caption'}

luego compile con --lua-filter short-captions.lua.

joelostblom
fuente