Emacs 组织模式下的内联PDF图像

Emacs 组织模式下的内联PDF图像,emacs,org-mode,Emacs,Org Mode,在emacs+org模式中,查看组织模式缓冲区时,可以内联 使用org toggle inline images命令链接图像。这 包括各种开箱即用的格式,但显然是PDF图像 还没有包括在内 鉴于emacs完全能够呈现PDF文件,是吗 可以使组织模式内联PDF文件与图像一样 (png、jpeg等) 一些背景:PDF图片对我来说更方便一些 原因是,最大的原因是他们的规模和工作良好 latex,从小型纸张到大型海报。简短回答:不支持PDF内嵌图像 函数org image file name regex

emacs
+
org模式
中,查看组织模式缓冲区时,可以内联 使用
org toggle inline images
命令链接图像。这 包括各种开箱即用的格式,但显然是PDF图像 还没有包括在内

鉴于emacs完全能够呈现PDF文件,是吗 可以使组织模式内联PDF文件与图像一样 (png、jpeg等)

一些背景:PDF图片对我来说更方便一些 原因是,最大的原因是他们的规模和工作良好
latex,从小型纸张到大型海报。

简短回答:不支持PDF内嵌图像

函数
org image file name regexp
具有硬编码的图像文件扩展名(不包括PDF)。此函数由
org display inline images
使用,后者依次调用
create image

我尝试将PDF添加到组织图像文件名regexp,并从
imagemagik类型中删除PDF,但没有成功


您可以尝试进一步挖掘,或者向组织模式邮件列表请求该功能。

让我完成这个问题

首先,组织模式本身不支持任何pdf内联显示功能。但是,可以修改
org显示内联图像
,以实现所需。首先你需要参考这个答案:,它给了我很多启发。然后我稍微修改了这个函数,使它支持pdf、bmp在组织模式下显示。我的功能在下面

(setq图像文件扩展名
(引述
(“png”“jpeg”“jpg”“gif”“tiff”“tif”“xbm”“xpm”“pbm”“pgm”“ppm”“pnm”“svg”“pdf”“bmp”))
(setq组织图像实际宽度600)
(setq org imagemagick显示命令“转换-密度600\%s\”-缩略图\%sx%s>\%s\)
(defun组织显示内联图像(&可选包括链接刷新结束)
“显示内联图像。
通常只内联没有描述部分的链接,因为
是导出时的工作方式。设置了“包含链接”后,还将显示链接
带有说明的零件将被内联。此
可以很快就好
查看这些图像,但它并不反映导出文件的外观
喜欢
设置“刷新”后,刷新BEG和END之间的现有图像。
这将仅在必要时创建新的图像显示。
BEG和END默认设置为缓冲区边界。“
(交互式“P”)
(除非刷新)
(组织删除内联图像)
(如果(fboundp“清除图像缓存”(清除图像缓存)))
(省去远足
(保留限制)
(加宽)
(setq beg(或beg(最小点))结束(或结束(最大点)))
(goto char beg)
(let((re(concat“\\[\\[\\(\\(文件:\\)\\\\\\\;;\([./~]\\)\)\([^]\n]+?)
(子字符串(组织映像文件名regexp)0-2)
“\\)\\]”(如果包含链接的“\\]”)
旧文件(img)
(while(搜索前搜索后搜索t)
(setq old(获取字符属性和覆盖(匹配开始1)
'组织图像覆盖)
文件(展开文件名)
(concat(或(匹配字符串3)”)(匹配字符串4)))
(当(file-exists-p文件)
(let((文件thumb(格式“%s%s_thumb.png”(文件名目录文件)(文件名基本文件)))
(如果(file-exists-p file thumb)
(let((拇指时间(第n个5(文件属性文件拇指字符串)))
(文件时间(第n个5(文件属性文件字符串)))
(如果(time-less-p thumb time文件时间)
(shell命令(格式化org imagemagick显示命令)
文件组织图像实际宽度组织图像实际宽度(文件拇指)nil nil)
(shell命令(格式化org imagemagick显示命令)
文件组织图像实际宽度组织图像实际宽度(文件拇指)nil nil)
(如果(和(汽车安全旧版)刷新)
(图像刷新(覆盖获取(cdr旧)显示)
(setq img(保存匹配数据(创建图像文件)))
(当img
(setq ov(生成覆盖(匹配开始0)(匹配结束0)))
(叠加放置ov’显示img)
(覆盖放置“面”默认值)
(覆盖放置在组织图像覆盖t上)
(b)修改挂钩
(列表“组织显示内联删除覆盖”)
(推送ov org内联图像叠加(()()()()))())(
该函数使用
convert file.pdf-thumb“400x400>”file\u thumb.png
在文件夹中生成名为thumb的文件,以替换pdf的覆盖,并强制组织模式使用file\u thumb显示pdf,而不对组织文件进行任何修改

此外,因为我使用babel用python生成图像。它总是需要我更新_thumb文件,所以我添加了一个if条件来说明这个thumb文件是否存在,如果pdf文件更改了,我需要同时更改thumb文件。。。等等


希望它能对您有所帮助。

我遇到了同样的问题,在仔细研究了一下之后,通过将以下内容添加到我的.emacs文件中使其正常工作:

(add-to-list 'image-type-file-name-regexps '("\\.pdf\\'" . imagemagick))
(add-to-list 'image-file-name-extensions "pdf")
(setq imagemagick-types-inhibit (remove 'PDF imagemagick-types-inhibit))
(setq org-image-actual-width 600)
还不确定这些更改是否会导致其他模式出现任何问题。 我在org模式下的pdf是由pythonsrc代码块创建的,上面的代码块可以工作,但是当我在python模式下更改某些内容时,图像不会得到更新,我需要手动运行org display inline image


这假设您有一个支持imagemagick的emacs,使用ghostscript(在org.el中可能还有一些编辑)也可以使用类似的东西。

更正:emacs无法呈现PDF文件(我想你可以用Elisp写这样一个东西,但这将是一个非常令人失望的结果,因为它会很慢)。它可以通过使用外部工具来显示PDF文件,tho,所以它确实可以