[org-preview-latex] 的 image-converter 读取路径错误

案例分析

我正在配置 org-preview-latex 命令,但是遇到了一些问题。例如当 latex 输出的文件路径为 /private/var/folders/5t/bsbmcdh12nj60ysspdrjk_kc0000gn/T/orgtexYfEFK0.dvi; 但是因为不知名原因, image-converter 读取的路径会添加若干个 ../ 变成 ../../../../../private/var/folders/5t/bsbmcdh12nj60ysspdrjk_kc0000gn/T/orgtexYfEFK0.dvi; 导致无法正确地访问到dvi文件,从而无法生成图片。

我把image-converter访问dvi的路径直接硬编码成特定路径以后, org-preview-latex 命令可以正常访问到我指定的dvi文件并且插入公式对应的图片。

硬编码dvisvgm读取文件的路径后,可以正确生成公式图片的流程配置:


  ;; Needs Emacs to support svg display
  (setq org-preview-latex-default-process 'luadvisvgm)  ;; luapdf2svg, lua2svg, imagemagick
  ;; Export with LuaTeX -> dvisvgm
  (add-to-list 'org-preview-latex-process-alist
               '(luadvisvgm :programs
                            ("lualatex" "dvisvgm")
                            :description "dvi > svg" :message "you need to install the programs: lualatex and dvisvgm." :image-input-type "dvi" :image-output-type "svg" :image-size-adjust
                            (1.7 . 1.5)
                            :latex-compiler
                            ("lualatex --output-format dvi --shell-escape --interaction=nonstopmode --output-directory=%o %f")
                            :image-converter
                            ;;("dvisvgm %f -n -b min -c %S -o %O"))
                            ("dvisvgm /private/var/folders/5t/bsbmcdh12nj60ysspdrjk_kc0000gn/T/orgtexYfEFK0.dvi -n -b min -c %S -o %O"))
                 )

并且我尝试替换了其他的latex编译器包括 latex, pdflatex,其他的图像转换器包括 dvipng 都遇到了这个问题,所以我认为应该和这些工具无关。

问题分析

图像转换器会因为不知名原因在latex编译输出文件的路径前面添加 ../../../../ 导致读取到错误的dvi文件路径,导致无法生成图片。

可能是什么原因导致这个错误呢?小弟刚用emacs不久,还比较陌生,请求指点。

大概率是因为你的 Org Files 和我的一样在一个软链接目录里?

可以把 %f 替换成 %o/%b.dvi 之类的

(setq org-preview-latex-process-alist
      '((dvisvgm :programs ("xelatex" "dvisvgm")
                 :description "xdv > svg"
                 :message "you need to install the programs: xelatex and dvisvgm."
                 :image-input-type "xdv" :image-output-type "svg" :image-size-adjust (1.7 . 1.5)
                 :latex-compiler ("xelatex -no-pdf -interaction nonstopmode -output-directory %o %f")
                 :image-converter ("dvisvgm %o/%b.xdv --no-fonts --exact-bbox --scale=%S --output=%O"))))

PS 可以给 Org 报个 Bug,我记得之前是好的,最近暂时没空

2 个赞

谢谢你的帮助!昨天折腾这个折腾了一晚上,终于解决了。

我研究一下怎么给org报bug——我粗略地看了一下似乎是用发邮件的方式报bug?

对,最好说明详细复现步骤和 demo(emacs -Q 配置,简单示例目录结构)

emacs29.1内置org-mode有这个问题,使用https://git.savannah.gnu.org/git/emacs/org-mode.git源,org-mode更新到最新版,就没有这个问题了。

确实,Org mode version 9.7-pre (release_9.6.11-931-gbfa4f9 @ /Users/wangtianshu/.config/emacs/straight/build/30.0/org/) 已经 fix 了,一个月前的 9.6.11 还有这个问题

我也遇到了软链里面 latex preview 报错的问题。 我是把 find-file-visit-truename 打开解决了 :joy:

(setq find-file-visit-truename t)
1 个赞