Como faço uma referência a uma figura em redução usando pandoc?

100

Atualmente estou escrevendo um documento em markdown e gostaria de fazer uma referência a uma imagem do meu texto.

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

![image1](img/image1.png)

Quero fazer essa referência porque depois de converter minha marcação para pdf, as imagens são colocadas em uma ou duas páginas depois e o documento não faz nenhum sentido.

ATUALIZAR:

Eu tentei a resposta de Ryan em que pós e eu não posso fazê-lo funcionar. Aparentemente, o código:

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

deve produzir:

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

em vez disso, obtenho:

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

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

Eu percebi dois problemas:

  • \label{image} não aparece: nenhuma referência é criada.
  • (\autoref{image})torna \href{\#image}{image}- se : nenhuma referência cruzada é detectada.

E então, quando eu converto isso para pdf, obviamente não tem um link para a imagem. Existe um link, mas não vincula a nada.

Qualquer ajuda seria muito apreciada !!

Romain Piel
fonte
1
Você tentou o método mencionado em groups.google.com/group/pandoc-discuss/msg/4a42442657a96414 ?
NN
Eu testei e não produz um autoref. estranho ...
Romain Piel
Talvez você deva editar sua pergunta para incluir o que você tentou, o que obteve e o que deseja (para que seja mais fácil ajudá-lo).
NN

Respostas:

95

No pandoc, você pode até fazer:

![This is the caption\label{mylabel}](/url/of/image.png)
See figure \ref{mylabel}.
NN
fonte
41
Isso só ajuda se você converter para TeX, mas não se também quiser criar HTML a partir da mesma fonte Markdown.
Jakob
12
Existem alguns filtros disponíveis para fazer a referência de figura funcionar com todos os formatos de saída pandoc-fignos e pandoc-crossref
joelostblom
Infelizmente, essa não é uma maneira muito flexível de fazer isso. Não se pode especificar a largura ou altura da imagem dessa forma. É possível incluir PDFs dessa forma? Do contrário, isso também seria uma desvantagem, já que é preferível no PDF como caso de saída.
Zelphir Kaltstahl
2
É possível definir a largura e altura usando:![This is the caption\label{mylabel}](/url/of/image.png){width=30px height=20px}
Sam Walpole
24

Você pode usar o filtro pandoc-fignos para numeração e referência de figuras. Funciona com qualquer formato de saída - não apenas LaTeX.

Adicione um rótulo aos atributos da imagem como este:

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

... e, em seguida, referencie a figura assim:

 @fig:description

Informações sobre como instalar e aplicar o filtro pandoc-fignos são fornecidas em sua página web. Há também o filtro pandoc-eqnos para fazer o mesmo tipo de coisa com equações.

tjd
fonte
Eu gostaria de fazer algo semelhante com referência a um elemento de uma lista ordenada
DanielTuzes
18

Tive uma conversa com Ryan Gray depois de ler sua resposta em um post semelhante. Na verdade, sua solução de usar:

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

só é adaptado ao usar o multimarkdown.

Quando se trata de pandoc, a única solução para fazer referências cruzadas é usar palavras-chave diretamente em látex:

[image]: image.png "Image Title"
![Alt text \label{mylabel}][image]
See figure \ref{mylabel}.
Romain Piel
fonte
5
Mas, como Jakob disse na resposta aceita, "Isso só ajuda se você converter para TeX, mas não se também quiser criar HTML a partir da mesma fonte Markdown."
DanielTuzes
Para multimarkdown, há uma maneira de referenciar a figura por meio de um número de figura calculado automaticamente? Eu imaginaria algo como [] (# imagem) e então o multimarkdown substituiria o texto em branco por um número (como acontece com as notas de rodapé).
Alec Jacobson
4

Pandoc oferece suporte a seções de referência (por meio de identificadores de seção prefixados por #).

Os comentários sobre este problema aberto descrevem como a seguinte solução alternativa aproveita os identificadores de seção para gerar referências de imagem em 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).

A linha vazia antes </div>é obrigatória.

ivotron
fonte
4
Uma solução apropriada, ou seja, uma extensão para a sintaxe de marcação pandoc para permitir identificadores para imagens agora finalmente está a caminho. fique ligado :)
Susanne Oberhauser
2

Supondo que você deseja a saída em PDF do Pandoc no final:

A melhor solução para inserir imagens e alterar seus atributos que encontrei é:

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

e no meu template.latextenho:

\usepackage{wrapfig}
\usepackage{float}

Outras soluções não podem especificar a largura ou altura da imagem, pelo menos não na redução padrão. No entanto, geralmente é essencial para algo como um livro ou papel especificar as dimensões das figuras, exceto que você deseja configurar o tamanho de saída das imagens antes de usá-las em seu documento. Nesse caso, você teria que lidar com configurações diferentes para as ferramentas que usa para criar as imagens.

Recomendo no caso do Matplotlib exportar para PDF e depois usar o código que postei. Isso dará a melhor qualidade de imagem e a maior flexibilidade na configuração de como a imagem ficará no PDF de saída, sem ter que se preocupar com coisas.

Zelphir Kaltstahl
fonte
Toda essa sintaxe de látex vai direto para o seu arquivo de marcação?
spinup de
@spinup Sim. O Pandoc pode lidar com o látex incorporado em seu arquivo de marcação. Outro conselho: Exporte como arquivo PDF ao exportar do Matplotlib. Desta forma, o mecanismo Pandoc / latex não diminuirá a qualidade da imagem e você terá uma imagem escalável, em vez de algo pixelado quando você aumenta e diminui o zoom do arquivo PDF.
Zelphir Kaltstahl
1

Com pandoc-crossref, você pode cruzar referências de figuras com a seguinte sintaxe:

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

Em seguida, referencie a figura no texto semelhante à sintaxe de citação [@fig:label]e compile com --filter pandoc-crossref(precisa vir antes --filter pandoc-citeprocse você também estiver usando).

Você pode controlar o estilo com, por exemplo, \usepackage[font=small,labelfont=bf]{caption}em header-includes.


Um truque interessante relacionado, se você usar \listoffiguresem látex, é este filtro lua , que permite definir um título curto em vez de ter a legenda inteira da figura aparecendo em sua lista de figuras:

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

em seguida, compilar com --lua-filter short-captions.lua.

joelostblom
fonte