使用pandoc为html / pdf / docx在markdown中正确调整PNG图像的大小


25

我正在尝试将markdown与pandoc结合使用,以将单个文档转换为html,pdf和docx。这是一个非常简单的文档,仅包含无数学文本和少量图像。图像为PNG格式。我在markdown来源中包含使用此图像:

<div style="float:center" markdown="1">

![my caption](./figures/myimage.png)

</div>

并将其编译为:

# html
pandoc myarticle.md -c mystyle.css -o myarticle.html
# pdf
pandoc myarticle.md -V geometry:margin=1in -o myarticle.pdf
# docx
pandoc myarticle.md -o myarticle.docx

我注意到一些尺寸相同的 PNG图像在HTML和PDF格式中的大小不同。具有低分辨率(72 px / in)的250x256像素的PNG会在页面上以正确的尺寸显示在PDF上,并且在html中以合理的尺寸显示,但尺寸相同(250x256 px)的PNG却是高分辨率(300 px / in)在PDF输出中的页面上调整为很小的尺寸。我想保留我指定的尺寸的PNG图像集,并使它们以HTML / PDF / DOCX格式显示。

我愿意放弃对docx的自动支持(或以后要处理很多手动格式的问题),而只是拥有PDF / HTML。

如何告诉pandoc不要调整PDF或图像的PNG大小,并让它们显示在正确的图像中?谢谢。


2
一个PNG是300DPI,但只有250x256px 应该是相当小的网页上,不应该吗?(小于1平方英寸。)dpi分辨率较低的PNG在页面上会更大。Pandoc在调整图像大小时会考虑dpi信息以及像素大小。是不是?也许您可以使用CSS在全球范围内缩小HTML中的高分辨率图像。
约翰·麦克法兰

1
@JohnMacFarlane:在考虑dpi时,我看到pandoc的行为是正确的-但我希望它忽略dpi并坚持绝对大小,以便为所有图像保留单个高分辨率PNG。是这样做的正确方法是制作较低分辨率的图像版本,还是有办法使pandoc仅使用图像的尺寸并忽略分辨率?从我的
角度来看,

Answers:


17

尺寸会转换为像素,以类似HTML的格式输出。使用--dpi选项指定每英寸的像素数。默认值为96dpi。

在图片中找到最常见的元素并使用它。仅修改例外。


例如:dpi,宽度,高度。

如果您给它dpi信息:

按照说明添加--dpi选项以覆盖默认值。


如果您的大多数图片具有相同的高度或宽度,则应易于纠正。

例如,您将行更改为:

![my caption](./figures/myimage.png){ width=250px }

要么

![my caption](./figures/myimage.png){ height=256px }

或使用直接HTML标记执行此操作:

<img src="./figures/myimage.png" alt="my caption" style="width: 250px;"/>

要么

<img src="./figures/myimage.png" alt="my caption" style="height: 256px;"/>

比率将是正确的。


参考:Pandoc自述文件

对于HTML和EPUB,除宽度和高度(但包括srcset和size)之外的所有属性均按原样传递。其他作者忽略其输出格式不支持的属性。

图像上的width和height属性经过特殊处理。当不使用单位使用时,假定单位为像素。但是,可以使用以下任何单位标识符:px,cm,mm,in,inch和%。

尺寸会转换为英寸,以便以基于页面的格式(如LaTeX)输出。尺寸会转换为像素,以类似HTML的格式输出。使用--dpi选项指定每英寸的像素数。默认值为96dpi。

%单位通常相对于某些可用空间。例如,上面的示例将呈现为<img href="file.jpg" style="width: 50%;" />(HTML),\includegraphics[width=0.5\textwidth]{file.jpg} (LaTeX), or \externalfigure[file.jpg][width=0.5\textwidth](ConTeXt)。

某些输出格式具有类(ConTeXt)或唯一标识符(LaTeX \ caption)或两者(HTML)的概念。

如果未指定width或height属性,则后备方法是查看图像分辨率和图像文件中嵌入的dpi元数据。


5
也可以使用{ width=100% }相对于整个屏幕/页面/线宽大小的相对宽度。
rriemann

可以与pandoc-crossrefs {#fig:refname}语法一起使用吗?
oarfish '18 -10-8

2
回答我自己的评论:{#fig:refname width=50%}有效。
oarfish
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.