Comment faire référence à une figure dans Markdown à l'aide de pandoc?

101

J'écris actuellement un document en markdown et j'aimerais faire référence à une image de mon texte.

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

![image1](img/image1.png)

Je veux faire cette référence parce qu'après avoir converti ma démarque en pdf, les images sont placées dans une ou deux pages après et le document n'a aucun sens.

METTRE À JOUR:

J'ai essayé la réponse de Ryan dans ce post et je ne peux pas la faire fonctionner. Apparemment le code:

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

devrait produire:

\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}).

à la place, j'obtiens:

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

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

J'ai remarqué deux problèmes:

  • \label{image} n'apparaît pas: aucune référence n'est créée.
  • (\autoref{image})devient \href{\#image}{image}: aucune référence croisée n'est détectée.

Et puis, lorsque je convertis cela en pdf, cela ne renvoie évidemment pas à l'image. Il existe un lien, mais il ne renvoie à rien.

Toute aide serait très appréciée!!

Romain Piel
la source
1
Avez-vous essayé la méthode mentionnée dans groups.google.com/group/pandoc-discuss/msg/4a42442657a96414 ?
NN
Je l'ai testé et il ne produit pas d'autoref. bizarre ...
Romain Piel
Peut-être devriez-vous modifier votre question pour y inclure ce que vous avez essayé, ce que vous avez obtenu et ce que vous voulez (pour qu'il soit plus facile de vous aider).
NN le

Réponses:

95

Dans Pandoc, vous pouvez même faire:

![This is the caption\label{mylabel}](/url/of/image.png)
See figure \ref{mylabel}.
NN
la source
41
Cela n'aide que si vous convertissez en TeX mais pas si vous souhaitez également créer du HTML à partir de la même source Markdown.
Jakob
12
Il existe quelques filtres disponibles pour faire fonctionner la référence de la figure avec tous les formats de sortie pandoc-fignos et pandoc-crossref
joelostblom
Malheureusement, ce n'est pas une manière très flexible de le faire. On ne peut pas spécifier la largeur ou la hauteur de l'image de cette façon. Est-il possible d'inclure des PDF de cette façon? Sinon, ce serait également un inconvénient, car il est préférable dans le PDF comme cas de sortie.
Zelphir Kaltstahl
2
Il est possible de régler la largeur et la hauteur en utilisant:![This is the caption\label{mylabel}](/url/of/image.png){width=30px height=20px}
Sam Walpole
24

Vous pouvez utiliser le filtre pandoc-fignos pour la numérotation et le référencement des figures. Il fonctionne avec n'importe quel format de sortie - pas seulement LaTeX.

Ajoutez une étiquette aux attributs de l'image comme ceci:

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

... puis référencez la figure comme ceci:

 @fig:description

Des informations sur l'installation et l'application du filtre pandoc-fignos sont données sur sa page Web. Il y a aussi le filtre pandoc-eqnos pour faire le même genre de chose avec des équations.

tjd
la source
J'aimerais faire quelque chose de similaire en faisant référence à un élément d'une liste ordonnée
DanielTuzes
18

J'ai eu une conversation avec Ryan Gray après avoir lu sa réponse dans un article similaire. En fait sa solution d'utilisation:

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

est uniquement adapté lors de l'utilisation de multimarkdown.

Quand il s'agit de pandoc, la seule solution pour faire des références croisées est d'utiliser directement des mots-clés latex:

[image]: image.png "Image Title"
![Alt text \label{mylabel}][image]
See figure \ref{mylabel}.
Romain Piel
la source
5
Mais comme Jakob l'a dit à la réponse acceptée, "Cela n'aide que si vous convertissez en TeX mais pas si vous voulez également créer du HTML à partir de la même source Markdown."
DanielTuzes
Pour multimarkdown, existe-t-il un moyen de référencer la figure via un numéro de figure calculé automatiquement? J'imagine quelque chose comme [] (# image) et puis multimarkdown remplacerait le texte vide par un nombre (comme c'est le cas pour les notes de bas de page).
Alec Jacobson
4

Pandoc prend en charge les sections de référencement (via des identificateurs de section précédés par #).

Les commentaires sur ce problème ouvert décrivent comment la solution de contournement suivante exploite les identificateurs de section pour générer des références d'image en LaTeX et HTML:

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

</div>

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

La ligne vide avant </div>est obligatoire.

ivotron
la source
4
Une solution appropriée, c'est-à-dire une extension de la syntaxe de démarque pandoc pour permettre des identifiants pour les images est enfin en cours. restez à l'écoute :)
Susanne Oberhauser
2

En supposant que vous vouliez une sortie PDF de Pandoc à la fin:

La meilleure solution pour insérer des images et modifier leurs attributs que j'ai trouvée est:

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

et dans mon template.latexj'ai:

\usepackage{wrapfig}
\usepackage{float}

D'autres solutions ne peuvent pas spécifier la largeur ou la hauteur de l'image, du moins pas dans la démarque standard. Cependant, il est souvent essentiel que quelque chose comme un livre ou un papier spécifie les dimensions des figures, sauf que vous voulez configurer la taille de sortie des images avant de les utiliser dans votre document. Dans ce cas, vous devrez gérer différents paramètres pour les outils que vous utilisez pour créer les images.

Je recommande en cas de Matplotlib d'exporter au format PDF puis d'utiliser le code que j'ai posté. Cela donnera la meilleure qualité d'image et la plus grande flexibilité dans la configuration de ce à quoi l'image ressemblera dans le PDF de sortie, sans avoir à vous soucier des choses.

Zelphir Kaltstahl
la source
Est-ce que toute cette syntaxe latex va directement dans votre fichier markdown?
spinup le
@spinup Oui. Pandoc peut gérer les éléments Latex intégrés dans votre fichier de démarque. Un autre conseil: Exportez en fichier PDF lors de l'exportation depuis Matplotlib. De cette façon, Pandoc / le moteur latex ne diminuera pas la qualité de l'image et vous aurez une image évolutive, au lieu de quelque chose de pixélisé lorsque vous effectuez un zoom avant et arrière de votre fichier PDF.
Zelphir Kaltstahl
1

Avec pandoc-crossref, vous pouvez croiser les chiffres de référence avec la syntaxe suivante:

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

Ensuite, référencez la figure dans le texte similaire à la syntaxe de citation [@fig:label]et compilez avec --filter pandoc-crossref(doit venir avant --filter pandoc-citeprocsi vous l'utilisez également).

Vous pouvez contrôler le style avec par exemple \usepackage[font=small,labelfont=bf]{caption}in header-includes.


Une astuce connexe intéressante si vous utilisez \listoffiguresen latex, est ce filtre lua , qui vous permet de définir un titre court au lieu d'afficher toute la légende de la figure dans votre liste de figures:

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

puis compilez avec --lua-filter short-captions.lua.

joelostblom
la source