How do I make a reference to a figure in markdown using pandoc?
I'm currently writing a document in markdown and I'd like to make a reference to an image from my text.
this is my text, I want a reference to my image1 [here]. blablabla
![image1](img/image1.png)
I want to do that reference because after converting my markdown to pdf, images get placed in one or two pages after and the document doesn't make any sense.
UPDATE:
I've tried Ryan's answer in that post and I can't make it working. Apparently the code :
[image]: image.png "Image Title"
![Alt text][image]
A reference to the [image](#image).
should produce:
\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}).
instead, I obtain:
\begin{figure}[htbp]
\centering
\includegraphics{image.png}
\caption{Alt text}
\end{figure}
A reference to the \href{\#image}{image}.
I've noticed two problems :
-
\label{image}
doesn't appear : no reference is created. -
(\autoref{image})
becomes\href{\#image}{image}
: no cross reference is detected.
And then, when I convert that to pdf it obviously doesn't link to the image. There's a link, but it doesn't link to anything.
Any help would be much appreciated!!
Solution 1:
In pandoc you can even do:
![This is the caption\label{mylabel}](/url/of/image.png)
See figure \ref{mylabel}.
Solution 2:
You can use the pandoc-fignos filter for figure numbering and referencing. It works with any output format -- not just LaTeX.
Add a label to the image's attributes like this:
![Caption.](image.png) {#fig:description}
... and then reference the figure like this:
@fig:description
Information on how to install and apply the pandoc-fignos filter is given on its Web page. There is also the pandoc-eqnos filter for doing the same kind of thing with equations.
Solution 3:
I've had a chat with Ryan Gray after reading his answer in a similar post. Actually his solution of using :
[image]: image.png "Image Title"
![Alt text][image]
A reference to the [image](#image).
is only adapted when using multimarkdown.
When it comes to pandoc, the only solution to make cross references is using directly latex keywords:
[image]: image.png "Image Title"
![Alt text \label{mylabel}][image]
See figure \ref{mylabel}.
Solution 4:
Pandoc supports referencing sections (via section identifiers prefixed by #
).
Comments on this open issue describe how the following workaround leverages section identifiers for generating image references in LaTeX and HTML:
<div id="fig:lalune">
![A voyage to the moon\label{fig:lalune}](lalune.jpg)
</div>
[The voyage to the moon](#fig:lalune).
The empty line before </div>
is required.
Solution 5:
With pandoc-crossref you can cross reference figures with the following syntax:
![Caption](file.ext){#fig:label}
Then reference the figure in the text similar to the citation syntax [@fig:label]
and compile with --filter pandoc-crossref
(needs to come before --filter pandoc-citeproc
if you're using that also).
You can control the styling with e.g. \usepackage[font=small,labelfont=bf]{caption}
in header-includes
.
A neat related trick if you use \listoffigures
in latex, is this lua-filter, which allows you to set a short title instead of having the entire figure legend showing up in your list of figures:
![Caption](file.ext){#fig:label short-caption='my short caption'}
then compile with --lua-filter short-captions.lua
.