如何在org-mode中调整图像大小

71

是否有一种通用的方法可以定义在org-mode中链接的图像的大小(以百分比或像素为单位)?

比如我在我的.org文件中有以下链接:

[[~/images/example.jpg]]

这个 JPG 文件太大了,所以如果我将它导出为 HTML 或 LaTeX,或者在 org-mode 中使用 C-c C-o i 打开它,只会看到图像的一部分。

7个回答

93

Org 8.0版本开始,“属性行现在采用属性列表”:

#+attr_html: :width 100px
#+attr_latex: :width 100px
[[~/images/example.jpg]]

63
根据Jacobo的评论,在您的init.el文件中添加以下内容:
(setq org-image-actual-width nil)

然后在org-mode中,您可以像下面的示例一样,在每个JPG、PNG和SVG之前加上以调整每个内联图像的大小。
#+ATTR_ORG: :width 100
[[~/images/example.svg]]

如果您想将其大小调整为内联预览和HTML输出的大小:
#+ATTR_HTML: width="100px"
#+ATTR_ORG: :width 100
[[~/images/example.svg]]

1
Adam,我认为可缩放矢量图形(SVG)图像没有固有大小,因为它们被设计成可缩放的。 - Niclas Börlin
1
嗨@NiclasBörlin,看起来这是我Emacs版本中的一个错误(但已经解决了)。 我可以确认,截至Emacs 27.2(Mitsuharu's Emacs的Railwaycat Homebrew版),这也适用于SVG。 - Adam
@Adam,我不小心给你的回答点了个踩,而且 Stack Overflow 不允许我调整。因此,我给你的评论点了个赞。对此造成的不便我很抱歉。 - Kadir Gunel
1
@EmmanuelGoldstein 当您设置宽度时,高度应该按比例自动调整。因此,只要您不想故意扭曲图像,您只需要设置其中一个即可。 - Adam
1
我想有意地“扭曲”我的图像,因为默认情况下数据点看起来太密集了,所以我想要不同的比例。谢谢。 - Emmanuel Goldstein
显示剩余3条评论

14
#+ATTR_HTML: width="100px"
[[~/images/example.jpg]]

1
感谢您的回答bzg!首先,我希望有一个不仅适用于html,还适用于LaTex和在Emacs中查看的选项。无论如何,即使根据官方文档[1] [2],您的建议似乎是正确的,但对我来说却无法正常工作。我正在使用emacs 24.1.1,没有做任何自定义,但当我尝试使用您的代码时,图像仍然保持其原始的巨大尺寸。这一点在Chrome和Firefox中都是正确的。[1] http://orgmode.org/worg/org-tutorials/images-and-xhtml-export.html [2] http://www.w3schools.com/tags/tag_img.asp - user1323995
我也尝试了#+ATTR_HTML: width="0.3"如果我理解正确的话,应该会按比例缩小0.3倍(或0.003= 0.3%?),但是这也没有任何作用。 :-/ - user1323995
10
为了使这个功能起作用,您需要在 .emacs 文件中设置如下内容:(setq org-image-actual-width nil)。在 org-mode 邮件列表的此帖子中解释了其他可能的值和行为。 - Jacobo de Vera

14

这是一个关于如何使用百分比调整图像大小的示例(Org mode版本9.0.5):

#+CAPTION: Weight space                                                                                                                                     
#+ATTR_HTML: :alt neural network :title Neural network representation :align right                                                                          
#+ATTR_HTML: :width 50% :height 50%                                                                                                                         
https://istack.dev59.com/nzHSl.webp

使用其他答案对于基于URL的图像无法正常工作。 - ealfonso
这也适用于内联预览吗? - HappyFace
@HappyFace 是的,它确实可以。 - alper

8

在Emacs Org模式下,有一种预览(而不是导出)调整图像大小的方法。

  1. 我们想要将图像设置为特定宽度,比如249像素时,我们需要这样做。
  2. 我们想要设置默认图像宽度,这样我们就不需要为每个图像指定+attr_html,那样会很繁琐。

可以通过如下配置org-image-actual-width来实现:

(setq org-image-actual-width (list 550))

然后,在你的.org文件中,如果你有

#+attr_html :width 249
[[~/images/example1.jpg]]

如果指定了+attr_*,则图像将以249像素的宽度显示在预览中。对于另一张没有指定+attr_*的图像,默认宽度为550像素。

[[~/images/example2.jpg]]

你可以从org-mode源代码的文档中看到这种行为:
When set to a number in a list, try to get the width from any
#+ATTR.* keyword if it matches a width specification like
  #+ATTR_HTML: :width 300px
and fall back on that number if none is found.

我很难理解“列表中的数字代表什么”,所以我查看了实现代码,确实,像 (list 550) 这样的内容是可以运行的。


3

对于 LaTeX,如果要删除默认的 width=.9\linewidth,请将 org-latex-image-default-width 设置为空字符串。这样,图像将具有其自然尺寸。

要在运行时执行此操作,请使用 set-variable emacs 命令。或者要永久设置此变量,请在您的 init.el 中添加以下行:(setq org-latex-image-default-width "")


1
要将其设置为全行宽(或任何其他值),请使用 (setq org-latex-image-default-width "1.0\\linewidth") - lab

0

对于导出到LaTeX,如果你希望像阿里奥斯在HTML中的回答那样“缩放”图像,有几种方法可用。

相对于图像尺寸进行缩放:

#+ATTR_LATEX: :scale 1.2

相对于LaTeX认为正在进行排版的内容进行缩放:

#+ATTR_LATEX: :width 0.40\linewidth

#+ATTR_LATEX: :width 0.5\textwidth


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接