Retina osx EI 10.11.3 系统下Emacs org-mode的latex preview分辨率低?是什么问题

似乎 Emacs Mac Port 最新的更新(基于 24.5 的第九次更新)有这方面的改进(粗体是我加的):

** Improvements

*** For frames on a Retina display, image-io/imagemagick image descriptors involving non-integral transformations such as shrinking or rotation are now processed with 2x pixel buffer even if the source image file/data is for 1x. For example, (insert-image (create-image “gnus/gnus.png” 'imagemagick nil :max-height 100)) now looks crisper.

*** Org mode LaTeX fragments preview may also create 2x images.

引用自: Re: Emacs Mac port

1 个赞

我也看到了,发在Slack上了。但是不一定会引入到emacs ns port.

在 Mac 下貌似可以修改配置使得生成的 PNG 尺寸更大,然后将其“压缩”(即在文件后面添加@2x,需要)放入 参见 Emacs-StackExchange: org-preview-latex-fragment in higher resolution 以及 StackOverflow: Org LaTeX preview is fuzzy on retina displays

不过每次都要自己去修改生成的文件,有什么更方便的方法吗,比如自行添加 @2x 不过貌似还可以将其改为生成 SVG?这个需要怎么配置?

现在 stackoverflow 回答中给出了一个新的方法,可以通过设置

(setq org-latex-create-formula-image-program 'dvisvgm)

使用 dvisvgm 来生成预览图,试了一下确实有显著效果。上面 OD_{260} 是默认方法生成的,下面是通过 dvisvgm 生成的。

image

但是相较于网页上这个 OD_{260} ,显示效果还是有些差距。

Screen Shot 2022-02-24 at 16.49.35 我这基本看不出差别(截图,实际效果更好)

GNU Emacs 28.0.90 (build 1, x86_64-apple-darwin21.2.0, NS appkit-2113.20 Version 12.1 (Build 21C52)) of 2021-12-22

1 个赞

使用 emacs-mac (homebrew-emacs-macport) + imagemagick 完美解决.

(setq org-preview-latex-default-process 'imagemagick)

dvisvgm 有时渲染容易出错.

1 个赞

也许可以使用一下备用方案:GitHub - manateelazycat/popweb: Show popup web window for Emacs

刚试了下好像也不行,不知道怎么回事。 装了emacs-mac-port的最新版,配置里写了这句,用的配置是Doom。生成的图片分辨率还是很普通。

试试检查下 org-preview-latex-process-alist:image-converterquality 是否为 100:

(setq org-preview-latex-process-alist
      '((imagemagick
	 :programs
	 ("latex" "convert")
	 :description "pdf > png"
	 :image-input-type "pdf"
	 :image-output-type "png"
	 :image-size-adjust
	 (1.0 . 1.0)
	 :latex-compiler
	 ("xelatex -interaction nonstopmode -output-directory %o %f")
	 :image-converter
	 ("convert -density %D -trim -antialias %f -quality 100 %O")))) ;; 这里

有可能是 Doom 为了优化渲染速度改了这个默认值.

另外如果这个还不行, 尝试下使用我的安装方式:

brew install emacs-mac --with-mac-metal --with-native-comp --HEAD

另外安装时详细的可选参数文档在这里: Formula Options

我试了一下。doom默认的这个alist的imagemagick部分和你是一样的。但我选imagemagick作为default process不但分辨率不高,反而把公式强制居中并且占用大片空间。选dvisvgm就可以了。并且这个在emacs-plus@28里可以用。

我个人不太喜欢emacs-mac,因为他自定义了一堆按键可能有冲突。比如我定义的C-M-SPC是我的mac系统切换输入法的按键,在emacs-mac里和mark-set冲突了。

无论在 emacs-mac 还是 emacs-plus 中使用 dvisvgm, 我总是遇到公式显示不完全的问题. 如下图所示, 有些积分号直接被截掉了一大半.

CleanShot 2022-03-04 at 13.38.50@2x

不知道 HepIsaac 在使用时是否遇到类似问题. 目前我试图调整 imagemagick 的渲染比例时也遇到了你所述的图片莫名居中的现象. (当生成公式的比例 aka. :scale 这个参数大于 1 时, 均会出现 imagemagick 居中显示 (有时候直偏到屏幕左下角) 的情况).

目前希望能解决的问题:

  1. 如何适当调整 dvisvgm 防止出现公式显示不完全的问题.
  2. 或者如何适当调整 imagemagick 使其能够缩小默认的公式显示大小. (scale 1.0 对我来说还是太大了)

image

这是我的dvisvgm结果,你会发现下面莫名其妙的有一个横色区域颜色是不一致的。在某些配色主题下这个区域的颜色会覆盖掉公式,导致显示不完全。这是我的感觉。

我不太愿意用emacs-mac还有一个原因是他没升级28.我电脑上27的emacs速度比28慢很多很多。

有时间我去试一下emacs-plus的imagemagick。不知道有没有emacs-plus上能完美渲染org preview的。

emacs-mac 没有遇到 “横色区域颜色不一致” 的情况, (我在用 emacs-plus 时也确实遇到了和你一致的情况), 但显示依然不完全. 所以或许不是背景色的原因.

另外其实emacs-mac是有28支持的, 你需要在安装时加入 --HEAD 选项. 但是在 emacs-mac 的 28 中暂时无法使用 emacs-plus 自带的 natural-title-bar (就是让窗口最顶端的那一栏颜色和你的 frame 背景色显示一致的功能).

我对emacs-mac的natural-title-bar一直不抱希望。哪怕装了也不能随时随着主题切换dark/light,每次都要输入命令重新启动,并且看上去作者没有改变的意思。

以及,不知道你有没有试过latex-mode里面的preview-latex的分辨率能不能改?

我试了一下emacs-mac --HEAD --with-mac-metals。

公式图片变大了,那个颜色不对的横条还在。分辨率没问题。

于是我退回emacs-plus了。。。

颜色不一致是因为org在读取latex公式转成tex文件的时候会读取当前背景的颜色作为tex文件的底色,所以你可能要改一下主题

关于图片变大, 开始时我也有遇到, 可以加入下面的代码来解决:

(require 'org)

(plist-put org-format-latex-options :scale 1.0) ;; 改这里

另外关于横条, @kssss 说的没有问题. 个人认为是 doom-themes 造成的. 可以尝试使用 Modus Themes, 它与 Doom 有很好的兼容.

我找到了似乎比较完美的解决方案, 是使用 xenops 这个 package 来代替原生的 org-latex-preview. 它会生成 svg, 但是相较于 dvisvgm 它没有出现公式显示不完全的情况.

它与 emacs 中许多内置的相关于 org-latex 的变量设置都有非常好的结合. 比如 org-latex-packages-alist 的内置包都可以顺利加载.

它的特点有:

  • 异步处理公式显示, 速度很快.
  • 完美替代 org-fragtog.

更多关于 xenops 的讨论可以参考这个帖子: 如何提高 org-mode 的 LaTeX 预览速度?


关于 svg 在 macOS 上的分辨率问题, 我似乎找到了比 emacs-mac 更好的选择 如果你更倾向于emacs-plus : 可以尝试下是新出现的 emacs-builds. 它支持 macOS 的原生图片显示. 并且它结合了部分 emacs-plus 的优质功能.

在我的机器 (M1) 上目前能够运行稳定.

或许你可以尝试一下这个?

3 个赞