如何使用 pandoc 引用 markdown 中的图形?
Posted
技术标签:
【中文标题】如何使用 pandoc 引用 markdown 中的图形?【英文标题】:How do I make a reference to a figure in markdown using pandoc? 【发布时间】:2012-03-15 03:02:21 【问题描述】:我目前正在用 Markdown 编写文档,我想引用我的文本中的图像。
this is my text, I want a reference to my image1 [here]. blablabla
![image1](img/image1.png)
我想做那个参考,因为在将我的 markdown 转换为 pdf 之后,图像会放在一两页之后,并且文档没有任何意义。
更新:
我在that post 中尝试过Ryan's answer,但无法正常工作。 显然是代码:
[image]: image.png "Image Title"
![Alt text][image]
A reference to the [image](#image).
应该产生:
\beginfigure[htbp]
\centering
\includegraphics[keepaspectratio,width=\textwidth,height=0.75\textheight]i mage.png
\captionAlt text
\labelimage
\endfigure
A reference to the image (\autorefimage).
相反,我得到:
\beginfigure[htbp]
\centering
\includegraphicsimage.png
\captionAlt text
\endfigure
A reference to the \href\#imageimage.
我注意到两个问题:
\labelimage
未出现:未创建引用。
(\autorefimage)
变为 \href\#imageimage
:未检测到交叉引用。
然后,当我将其转换为 pdf 时,它显然没有链接到图像。有一个链接,但它没有链接到任何东西。
任何帮助将不胜感激!
【问题讨论】:
你试过groups.google.com/group/pandoc-discuss/msg/4a42442657a96414中提到的方法吗? 我已经对其进行了测试,但它不会产生自动引用。奇怪... 也许你应该编辑你的问题,包括你尝试了什么、你得到了什么和你想要什么(这样更容易帮助你)。 【参考方案1】:在 pandoc 中你甚至可以这样做:
![This is the caption\labelmylabel](/url/of/image.png)
See figure \refmylabel.
【讨论】:
这仅在您转换为 TeX 时有用,但如果您还想从相同的 Markdown 源创建 html,则无济于事。 有几个过滤器可用于使图形参考适用于所有输出格式pandoc-fignos 和pandoc-cros-s-ref 不幸的是,这不是一种非常灵活的方式。不能以这种方式指定图像的宽度或高度。是否可以以这种方式包含 PDF?如果不是,那也将是一个缺点,因为它在 PDF 中作为输出案例更可取。 可以通过![This is the caption\labelmylabel](/url/of/image.png)width=30px height=20px
来设置宽度和高度【参考方案2】:
您可以使用pandoc-fignos 过滤器进行图形编号和引用。它适用于任何输出格式——不仅仅是 LaTeX。
为图像的属性添加标签,如下所示:
![Caption.](image.png) #fig:description
...然后像这样引用图:
@fig:description
有关如何安装和应用 pandoc-fignos 过滤器的信息在其网页上提供。还有pandoc-eqnos 过滤器可以对方程做同样的事情。
【讨论】:
我想和referring to an element of an ordered list做类似的事情 这也适用于 pandoc-cros-s-ref。请参阅@joelostblom 答案。【参考方案3】:在阅读了类似帖子中的 his answer 后,我与 Ryan Gray 进行了交谈。实际上他的使用解决方案:
[image]: image.png "Image Title"
![Alt text][image]
A reference to the [image](#image).
仅在使用 multimarkdown 时进行适配。
对于pandoc,唯一的交叉引用方式就是直接使用latex关键字:
[image]: image.png "Image Title"
![Alt text \labelmylabel][image]
See figure \refmylabel.
【讨论】:
但正如 Jakob 在接受的答案中所说,“这仅在您转换为 TeX 时才有帮助,但如果您还想从相同的 Markdown 源创建 HTML,则无济于事。” 对于multimarkdown,有没有办法通过自动计算的图形编号来引用图形?我想像 [](#image) 之类的东西,然后 multimarkdown 会用数字替换空白文本(就像脚注一样)。【参考方案4】:Pandoc 支持引用部分(通过 section identifiers 前缀 #
)。
对此open issue 的评论描述了以下解决方法如何利用部分标识符在 LaTeX 和 HTML 中生成图像引用:
<div id="fig:lalune">
![A voyage to the moon\labelfig:lalune](lalune.jpg)
</div>
[The voyage to the moon](#fig:lalune).
</div>
之前的空行是必需的。
【讨论】:
一个合适的解决方案,即extension to pandoc markdown syntax to allow identifiers for pictures 现在终于开始了。敬请期待:)【参考方案5】:使用pandoc-cros-s-ref,您可以使用以下语法交叉引用图形:
![Caption](file.ext)#fig:label
然后在文本中引用类似于引用语法[@fig:label]
的图形并使用--filter pandoc-cros-s-ref
进行编译(如果您也使用它,则需要在--filter pandoc-citeproc
之前)。
您可以控制样式,例如\usepackage[font=small,labelfont=bf]caption
在header-includes
。
如果您在乳胶中使用\listoffigures
,一个巧妙的相关技巧是this lua-filter,它允许您设置一个简短的标题,而不是让整个图例显示在您的数字列表中:
![Caption](file.ext)#fig:label short-caption='my short caption'
然后用--lua-filter short-captions.lua
编译。
【讨论】:
--filter pandoc-citeproc
应替换为 --filter citeproc
。 pandoc-citeproc 已被citeproc 取代,它现在是 pandoc 发行版的一个组成部分。【参考方案6】:
假设您希望在最后输出 Pandoc 的 PDF:
我发现插入图像和更改其属性的最佳解决方案是:
\beginfigure[H]
\includegraphics[width=0.25\textwidth, height=!]images/path.png
\centering
\captionmycaption
\endfigure
在我的template.latex
我有:
\usepackagewrapfig
\usepackagefloat
其他解决方案无法指定图像宽度或高度,至少在标准降价中不能。但是,对于书籍或纸张之类的东西来说,指定图形的尺寸通常是必不可少的,除非您想在文档中使用它们之前配置图像的输出大小。在这种情况下,您必须为用于创建图像的工具处理不同的设置。
我建议在 Matplotlib 的情况下导出为 PDF,然后使用我发布的代码。这将为配置图像在输出 PDF 中的外观提供最佳图像质量和最高灵活性,而无需担心任何事情。
【讨论】:
所有这些 Latex 语法都直接进入你的降价文件吗? @spinup 是的。 Pandoc 可以处理 Markdown 文件中嵌入的 Latex 内容。另一个建议:从 Matplotlib 导出时导出为 PDF 文件。这样,Pandoc / Latex 引擎不会降低图像质量,并且您将获得可缩放的图像,而不是在放大和缩小 PDF 文件时出现像素化。【参考方案7】:这里有很多很棒的遮阳篷。 我只想提请您注意一个细节:
必须有说明文字! 如:
Lore ipsum @fig:label
![Caption](file.ext)#fig:label
以下将不工作
Lore ipsum @fig:label
![](file.ext)#fig:label
【讨论】:
以上是关于如何使用 pandoc 引用 markdown 中的图形?的主要内容,如果未能解决你的问题,请参考以下文章
使用 pandoc 进行文档转换(markdown转word)
如何将 pandoc markdown 的分页符添加到 RTF 输出?
css 使用`--css pandoc.css`将它添加到您的Pandoc HTML文档中,使它们看起来更棒。 (经过Markdown和LaTeX测试。)