如何使用pandoc引用Markdown中的图形?


100

我目前正在用markdown编写文档,我想参考我的文字中的图片。

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

![image1](img/image1.png)

我想参考一下,因为在将markdown转换为pdf后,图像在之后放置了一两页,而文档没有任何意义。

更新:

我曾在那篇文章中尝试过Ryan的答案无法使其正常工作。显然代码:

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

应该产生:

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

相反,我获得:

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

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

我注意到了两个问题:

  • \label{image} 未出现:未创建参考。
  • (\autoref{image})变为\href{\#image}{image}:未检测到交叉引用。

然后,当我将其转换为pdf时,显然不会链接至图像。有一个链接,但没有任何链接。

任何帮助将非常感激!!



我已经测试过了,它不会产生自动引用。很奇怪...
罗曼·皮尔

也许您应该编辑问题,以包括尝试过的内容,获得的内容和想要的内容(以便更轻松地为您提供帮助)。
NN 2012年

Answers:


95

在pandoc中,您甚至可以执行以下操作:

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

41
这仅在您转换为TeX时有用,而在您还想从相同的Markdown源创建HTML时则无济于事。
雅各布2012年

12
有几种过滤器可用于使图形参考与所有输出格式一起使用pandoc-fignospandoc-
crossref

不幸的是,这不是一种非常灵活的方式。无法以这种方式指定图像的宽度或高度。是否可以通过这种方式包含PDF?如果不是这样,那也将是不利的一面,因为在PDF中最好将其作为输出案例。
Zelphir Kaltstahl '16

2
可以使用以下方法设置宽度和高度:![This is the caption\label{mylabel}](/url/of/image.png){width=30px height=20px}
Sam Walpole

24

您可以使用pandoc-fignos过滤器进行图形编号和参考。它适用于任何输出格式-不仅限于LaTeX。

像这样向图像的属性添加标签:

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

...然后参考如下图:

 @fig:description

其网页上提供了有关如何安装和应用pandoc-fignos过滤器的信息。还有pandoc-eqnos过滤器,可以对方程式做同样的事情。



18

在类似的文章中看到他的回答后,我已经和Ryan Gray聊天。实际上,他的解决方案是:

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

仅在使用multimarkdown时才适用。

关于pandoc,进行交叉引用的唯一解决方案是直接使用乳胶关键字:

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

5
但是正如Jakob在接受的答案中所说:“这仅在转换为TeX时有用,而在您还想从相同的Markdown源创建HTML时则无济于事。”
DanielTuzes

对于multimarkdown,是否可以通过自动计算的图形编号来引用图形?我想像像[](#image)这样的东西,然后multimarkdown将用数字替换空白文本(就像对脚注所做的那样)。
亚历克·雅各布森

4

Pandoc支持引用节(通过以前缀的节标识符#)。

关于此未解决问题的评论描述了以下解决方法如何利用节标识符在LaTeX和HTML中生成图像引用:

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

</div>

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

之前的空行</div>是必需的。


4
最终将出现一种适当的解决方案,即pandoc markdown语法扩展,现在允许图片的标识符。敬请期待:)
Susanne Oberhauser 2014年

2

假设您要在最后输出Pandoc的PDF:

我发现插入图像并更改其属性的最佳解决方案是:

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

在我中,template.latex我有:

\usepackage{wrapfig}
\usepackage{float}

其他解决方案不能指定图像的宽度或高度,至少不能在标准Markdown中指定。但是,对于书或纸之类的东西来说,通常通常必须指定图形的尺寸,除非要在文档中使用图像之前配置图像的输出尺寸。在这种情况下,您将不得不为用于创建图像的那些工具处理不同的设置。

我建议万一Matplotlib导出为PDF,然后使用我发布的代码。这将在配置图像在输出PDF中的外观时提供最佳的图像质量和最大的灵活性,而无需担心任何事情。


所有这些乳胶语法会直接进入您的markdown文件吗?
Spinup

@spinup是的。Pandoc可以处理Markdown文件中的嵌入式Latex内容。另一个建议:从Matplotlib导出时,导出为PDF文件。这样,Panddoc /乳胶引擎不会降低图像质量,并且您将获得可缩放的图像,而不是放大和缩小PDF文件时的像素化。
Zelphir Kaltstahl 2016年

1

使用pandoc-crossref,您可以使用以下语法交叉引用图形:

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

然后,在文本中引用[@fig:label]与引用语法相似的图并进行编译--filter pandoc-crossref--filter pandoc-citeproc如果还要使用,则需要在此之前)。

您可以控制如造型\usepackage[font=small,labelfont=bf]{caption}header-includes


如果您\listoffigures在乳胶中使用,则一个与之相关的巧妙技巧就是lua-filter,它使您可以设置一个简短的标题,而不是将整个图例显示在图列表中:

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

然后用编译--lua-filter short-captions.lua

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.