emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Pre-PATCH] Overhaul of the LaTeX preview system


From: Jun Inoue
Subject: Re: [Pre-PATCH] Overhaul of the LaTeX preview system
Date: Wed, 4 Sep 2024 08:04:55 +0900

Yaroslav, I had a similar issue.  The problem there was that the relative path ../../../../var/folders/3m/9xzpnkks773bfdwzqlvr421r0000gn/T/org-tex-BYOo4y-000000001.svg was being expanded in the wrong directory.  Can you see if the problem reproduces with the attached patch?  (You could also just find the string "{?svgfile}" in (alist-get 'dvisvgm org-latex-preview-process-alist) and replace it with "{?svgpath}".


Here's a copy of the email I sent to this list regarding the issue.  It seems to have fallen through the cracks, so it would be great if someone could have a look, independently of Yaroslav's issue if it turns out to be different.

Recently, the previews stopped working after a system update.

* Symptom
On macOS with dvisvgm 3.2+, org-latex-preview can't typeset LaTeX fragments at all in a lot of files.  It gives an error like the following:

error in process filter: Opening input file: No such file or directory, /var/var/folders/8g/k689fc1j3gg2ny7xrzqchjsm0000gn/T/org-tex-ZqKlQw-000000001.svg [2 times]

** Steps to Reproduce
Put dvisvgm 3.2+ on your path and create a .org file anywhere outside temporary-file-directory that is shallower than (i.e. has fewer slashes than) temporary-file-directory.  Try to preview any LaTeX fragment in that file.

This should theoretically reproduce on non-macOS, but macOS has an especially deep temporary-file-directory that looks like /var/folders/8g/k689fc1j3gg2ny7xrzqchjsm0000g, making it easier to reproduce.  If temporary-file-directory is /tmp on your system, I think you have to make the .org file in the root directory or change temporary-file-directory to a deeper directory (haven't tried).

* Cause
This is because org-latex-preview:
1. Runs dvisvgm in the same directory as the .org file, and
2. Tells dvisvgm to report the output SVG file names as relative paths using ?svgfile, but
3. Then expands those file names under temporary-file-directory in org-latex-preview--dvisvgm-filter.

So dvisvgm relativizes in one path, then org-latex-preview expands in another.

For instance, if I try to typeset fragments in /Users/jun/org/test/test.org, then dvisvgm reports:

output written to: ../../../../var/folders/8g/k689fc1j3gg2ny7xrzqchjsm0000gn/T/org-tex-CWRtgi-000000001.svg

where /var/folders/8g... is the absolute path of the output file.  This is expanded under temporary-file-directory, which is /var/folders/8g/k689fc1j3gg2ny7xrzqchjsm0000gn/T, leading org-latex-preview to busy-wait for files to arrive in /var/var/folders/8g/k689fc1j3gg2ny7xrzqchjsm0000gn/T.

I think this is hard to reproduce on most non-macOS systems where the temporary-file-directory is shallow.  ?svgfile contains as many ../ as there are slashes in the directory hosting the .org file, and expanding that relative to (say) /tmp will effectively remove all those ../, making it expand to the correct absolute path by accident.

* Fix
Use ?svgpath instead of ?svgfile.  Here's a patch that applies to commit 9584a76a843e2e8122799e5653bb9120fe568f64 of [[https://git.tecosaur.net/tec/org-mode.git]].

modified   lisp/org-latex-preview.el
@@ -200,7 +200,7 @@ Place-holders only used by `:image-converter':
                  (list
                   (concat "dvisvgm --page=1- --optimize --clipjoin --relative --no-fonts"
                           (if (>= org-latex-preview--dvisvgm3-minor-version 2)
-                              " -v3 --message='processing page {?pageno}: output written to {?svgfile}'" "")
+                              " -v3 --message='processing page {?pageno}: output written to {?svgpath}'" "")
                           " --bbox=preview -o %B-%%9p.svg %f"))))))
 
 (defcustom org-latex-preview-compiler-command-map
@@ -2792,7 +2792,7 @@ EXTENDED-INFO, and displayed in the buffer."
         (when (save-excursion
                 (re-search-forward "output written to \\(.*.svg\\)$" end t))
           (setq fragment-info (nth (1- page) fragments))
-          (plist-put fragment-info :path (expand-file-name (match-string 1) temporary-file-directory))
+          (plist-put fragment-info :path (match-string 1))
           (when (save-excursion
                   (re-search-forward "^  page is empty" end t))
             (unless (plist-get fragment-info :error)

** Environment
GNU Emacs 29.1 (build 1, aarch64-apple-darwin21.6.0, Carbon Version 165 AppKit 2113.6) of 2023-08-09 (Brew tap railwaycat emacs-mac)

dvisvgm 3.2.2

On Wed, Sep 4, 2024 at 12:51 AM Karthik Chikmagalur <karthikchikmagalur@gmail.com> wrote:
>> Sorry for delay.
>>
>> 1. pdflatex
>> 2. processing page 1: output written to ../../../../var/folders/3m/9xzpnkks773bfdwzqlvr421r0000gn/T/org-tex-BYOo4y-000000001.svg
>> 3. nil
>
> Karthik, any thoughts?
>

It will be useful to know if that svg exists at that path.  I've had reports from other Mac users complaining about dvisvgm reporting the wrong path.

Karthik



--
Jun Inoue

reply via email to

[Prev in Thread] Current Thread [Next in Thread]