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

use*_*976 37 html png pdf markdown pandoc

我正在尝试使用带有 pandoc 的 markdown 将单个文档转换为 html、pdf 和 docx。这是一个非常简单的文档,只包含无数学运算的文本和一些图像。图像为 PNG 格式。我在降价源中包含了一个使用此图像的图像:

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

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

</div>
Run Code Online (Sandbox Code Playgroud)

并将其编译为:

# 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
Run Code Online (Sandbox Code Playgroud)

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

我愿意放弃自动 docx 支持(或之后处理大量手动格式)只是为了拥有 PDF/HTML。

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

Blo*_*yEl 40

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

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


示例:dpi、宽度、高度。

如果你给它 dpi 信息:

如上所述添加 --dpi 选项以覆盖默认值。


如果您的大多数图片具有共同的高度或宽度,则应该很容易更正。

例如,您将该行更改为:

![my caption](./figures/myimage.png){ width=250px }
Run Code Online (Sandbox Code Playgroud)

或者

![my caption](./figures/myimage.png){ height=256px }
Run Code Online (Sandbox Code Playgroud)

或者在直接的 HTML 标记中执行此操作:

<img src="./figures/myimage.png" alt="my caption" style="width: 250px;"/>
Run Code Online (Sandbox Code Playgroud)

或者

<img src="./figures/myimage.png" alt="my caption" style="height: 256px;"/>
Run Code Online (Sandbox Code Playgroud)

并且比例将是正确的。


参考:Pandoc 自述文件

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

图像的宽度和高度属性被特殊处理。当不带单位使用时,单位假定为像素。但是,可以使用以下任何单位标识符: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) 的概念。

当没有指定宽度或高度属性时,回退是查看图像分辨率和嵌入在图像文件中的 dpi 元数据。

  • 还可以使用 `{ width=100% }` 来表示相对于整个屏幕/页面/线宽大小的宽度。 (7认同)
  • 回答我自己的评论:`{#fig:refname width=50%}` 有效。 (5认同)