Come faccio a fare riferimento a una cifra in markdown utilizzando pandoc?


101

Attualmente sto scrivendo un documento in markdown e vorrei fare un riferimento a un'immagine dal mio testo.

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

![image1](img/image1.png)

Voglio fare quel riferimento perché dopo aver convertito il mio markdown in pdf, le immagini vengono inserite in una o due pagine dopo e il documento non ha alcun senso.

AGGIORNARE:

Ho provato la risposta di Ryan in quel post e non riesco a farla funzionare. A quanto pare il codice:

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

dovrebbe produrre:

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

invece ottengo:

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

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

Ho notato due problemi:

  • \label{image} non appare: non viene creato alcun riferimento.
  • (\autoref{image})diventa \href{\#image}{image}: non viene rilevato alcun riferimento incrociato.

E poi, quando lo converto in pdf, ovviamente non si collega all'immagine. C'è un collegamento, ma non si collega a nulla.

Qualsiasi aiuto sarebbe molto apprezzato!!


1
Hai provato il metodo menzionato in groups.google.com/group/pandoc-discuss/msg/4a42442657a96414 ?
NN

L'ho testato e non produce un autoref. strano ...
Romain Piel

Forse dovresti modificare la tua domanda per includere ciò che hai provato, ciò che hai ottenuto e ciò che desideri (così sarà più facile aiutarti).
NN

Risposte:


95

In pandoc puoi persino fare:

![This is the caption\label{mylabel}](/url/of/image.png)
See figure \ref{mylabel}.

41
Questo aiuta solo se converti in TeX ma non se vuoi anche creare HTML dalla stessa sorgente Markdown.
Jakob

12
Sono disponibili un paio di filtri per far funzionare il riferimento alle figure con tutti i formati di output pandoc-fignos e pandoc-
crossref

Purtroppo questo non è un modo molto flessibile per farlo. Non è possibile specificare la larghezza o l'altezza dell'immagine in questo modo. È possibile includere PDF in questo modo? In caso contrario, sarebbe anche uno svantaggio, poiché è preferibile nel PDF come caso di output.
Zelphir Kaltstahl

2
È possibile impostare la larghezza e l'altezza utilizzando:![This is the caption\label{mylabel}](/url/of/image.png){width=30px height=20px}
Sam Walpole

24

È possibile utilizzare il filtro pandoc-fignos per la numerazione e il riferimento delle figure. Funziona con qualsiasi formato di output, non solo LaTeX.

Aggiungi un'etichetta agli attributi dell'immagine in questo modo:

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

... e quindi fai riferimento alla figura in questo modo:

 @fig:description

Le informazioni su come installare e applicare il filtro pandoc-fignos sono fornite sulla sua pagina Web. C'è anche il filtro pandoc-eqnos per fare lo stesso tipo di cose con le equazioni.



18

Ho fatto una chiacchierata con Ryan Gray dopo aver letto la sua risposta in un post simile. In realtà la sua soluzione di usare:

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

viene adattato solo quando si utilizza il multimarkdown.

Quando si tratta di pandoc, l'unica soluzione per fare riferimenti incrociati è utilizzare direttamente parole chiave in latex:

[image]: image.png "Image Title"
![Alt text \label{mylabel}][image]
See figure \ref{mylabel}.

5
Ma come ha detto Jakob alla risposta accettata, "Questo aiuta solo se converti in TeX ma non se vuoi anche creare HTML dalla stessa fonte Markdown."
DanielTuzes

Per il multimarkdown, esiste un modo per fare riferimento alla figura tramite un numero di figura calcolato automaticamente? Immagino qualcosa come [] (# immagine) e poi il multimarkdown sostituisce il testo vuoto con un numero (come fa per le note a piè di pagina).
Alec Jacobson

4

Pandoc supporta le sezioni di riferimento (tramite identificatori di sezione preceduti da #).

I commenti su questo problema aperto descrivono come la seguente soluzione alternativa sfrutta gli identificatori di sezione per generare riferimenti a immagini in LaTeX e HTML:

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

</div>

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

La riga vuota prima </div>è obbligatoria.


4
Una soluzione adeguata, ovvero un'estensione alla sintassi del markdown pandoc per consentire gli identificatori per le immagini, ora è finalmente in corso. stay tuned :)
Susanne Oberhauser

2

Supponendo che tu voglia l'output PDF di Pandoc alla fine:

La soluzione migliore per inserire immagini e modificare i loro attributi che ho trovato è:

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

e nel mio template.latexho:

\usepackage{wrapfig}
\usepackage{float}

Altre soluzioni non possono specificare la larghezza o l'altezza dell'immagine, almeno non nel markdown standard. Tuttavia è spesso essenziale che qualcosa come un libro o un foglio specifichi le dimensioni delle figure, tranne per il fatto che si desidera configurare le dimensioni di output delle immagini prima di utilizzarle nel documento. In tal caso dovresti gestire impostazioni diverse per quegli strumenti che usi per creare le immagini.

Consiglio in caso di Matplotlib di esportare in PDF e poi utilizzare il codice che ho postato. Ciò fornirà la migliore qualità dell'immagine e la massima flessibilità nella configurazione di come apparirà l'immagine nel PDF di output, senza doversi preoccupare di cose.


Tutta questa sintassi latex va direttamente nel tuo file markdown?
spinup

@spinup Sì. Pandoc può gestire materiale Latex incorporato nel tuo file markdown. Un altro consiglio: esporta come file PDF quando esporti da Matplotlib. In questo modo Pandoc / il motore latex non diminuirà la qualità dell'immagine e avrai un'immagine scalabile, invece di qualcosa di pixellato quando ingrandisci e rimpicciolisci il tuo file PDF.
Zelphir Kaltstahl,

1

Con pandoc-crossref puoi incrociare figure di riferimento con la seguente sintassi:

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

Quindi fai riferimento alla figura nel testo in modo simile alla sintassi della citazione [@fig:label]e compila con --filter pandoc-crossref(deve venire prima --filter pandoc-citeprocse stai usando anche quella).

Puoi controllare lo styling con ad esempio \usepackage[font=small,labelfont=bf]{caption}in header-includes.


Un bel trucco correlato se usi \listoffiguresin latex, è questo lua-filter , che ti consente di impostare un titolo breve invece di avere l'intera legenda della figura mostrata nell'elenco delle figure:

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

quindi compilare con --lua-filter short-captions.lua.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.