Org LaTeX 预览在视网膜显示屏上模糊不清。

18

我一直在使用Emacs 24.4进行我的所有数学/科学笔记。对于此,org-latex-preview非常好用!但是最近,我升级到了配备视网膜显示器的MacBook Pro,现在我发现在org-mode中所有的方程式都有点...模糊。有没有设置可以改变这个效果?

以下是截图:

输入图片描述

谢谢!


预览是使用png图像和臭名昭著的Ghostscript完成的,其显示质量往往较差。为了获得真正良好的显示质量,您需要使用一个在完全不同框架中打开的单独的pdf程序。至少有一个帖子中,用户努力寻找最易读的字体以满足自己的需求(使用预览),但这最终将归结为品味问题。 - lawlist
我的旧 Mac(预 Retina 显示器)上看起来很好。我只能猜测问题与 Retina 显示屏的高分辨率和自动缩放有关。 - Adam
如果你在谷歌上搜索 ghostscript png emacs pdf 等词语,你会发现一些询问如何在 Emacs 内获取更好的 PDF 图像质量的线程。美丽的显示器只是更能突出质量低劣的问题。我已经设置了外部查看器(Skim)来查看生成的 tex 文档;为了从 Emacs 文件管理器(例如 Dired 或我使用的自定义树形视图管理器)查看 PDF 文档,我编写了一个回显区域的选项集来打开 PDF:doc-view(Emacs 内选项)、Preview、Adobe、Skim、Omnipage。 - lawlist
我相信这与视网膜技术以及图像渲染的兼容性/设置有关... 我有其他应用程序,如QGIS和MS Office 2011,它们不是“视网膜就绪”的,但它们也存在同样的问题。所有图像都以大约1/4的分辨率呈现,以便它们保持正确的大小,但具有较低分辨率的图像。我还注意到在旧Mac上拍摄的屏幕截图中也存在此问题。但一定有一种方法可以在设置中指定正确的分辨率...? - Adam
2
这里有一个链接,涉及doc-view和视网膜支持的一些有趣评论,并提到了一个可能支持更好图像质量的特定Emacs版本。 https://github.com/politza/pdf-tools/issues/51 这是相关片段:如果您使用macports,可以安装emacs-mac-app进行端口安装,该版本支持视网膜。现在要以视网膜模式查看pdf,您应该将文件命名为“foo@2x.pdf”。我从以下位置获取了此信息 https://github.com/railwaycat/emacs-mac-port/blob/7be6d9e8dbd122b060b058c0a345091debc52975/doc/emacs/macport.texi#L401 - lawlist
5个回答

26

几年前,我决定解决这个问题,并编写了一个补丁程序,将dvisvgm作为latex预览的渲染选项添加进去。虽然这很有效,但我从未提交过它(没有时间或不知道如何正式地打补丁)。

今天,我发现org-mode v9.0.6现在已经具备了此功能,感到非常激动!

要启用此功能,请先检查您的系统上是否安装了dvisvgm。然后更新org-mode并将以下行添加到您的init.el文件中:

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

完成了!

在此输入图片描述


2
谢谢你的回答!我按照你建议的做了,但是生成的SVG图像在emacs中没有显示出来。这些图像已经被生成了(因为它们出现在文件夹“ltximg”中),但是LaTeX公式“$...$”并没有被这些图像替换。有什么想法吗? - Guilherme Salomé
1
请注意,从Emacs 26.1开始:“自Org 9.0以来,此变量已过时;请改用'org-preview-latex-default-process'。” - nivekuil
1
那个初始化文件在Dropbox中不再可用。你能把相关的部分添加到你的回答中吗? - HappyFace
1
@HappyFace 很高兴它起作用了!如果你需要任何额外的帮助,请告诉我,我会找到一种更永久的方式重新发布我的init文件! - Adam
@JordanHe 我最终写了一个 preview-latex 的替代品... 或许你会感兴趣?https://github.com/dandavison/xenops - 5fec
显示剩余16条评论

2

我找到了一个通用的解决方案,适用于所有内联图片。首先确保生成的所有图片都使用2倍的比例因子创建。例如,对于LaTeX代码块和内联LaTeX片段,可以通过以下方式实现:

(plist-put org-format-latex-options :scale 2)

然后,您可以使org对所有内联图像进行缩放。
对于LaTeX代码块,我们可以使用以下方式建议org--create-inline-image

(defun my/image-scale-advice (image)
  (let* ((factor (image-property image :scale))
         (new-factor (if factor
                         (/ factor 2.0)
                       0.5)))
    (image--set-property image :scale new-factor)
    image))
(advice-add 'org--create-inline-image :filter-return #'my/image-scale-advice)

这将把任何已存在的缩放因子除以2,如果没有缩放因子,则设置缩放因子为0.5。

对于内联LaTeX代码片段,我们可以像这样建议使用org--make-preview-overlay

(defun my/overlay-scale-advice (beg end image &optional imagetype)
  (mapc (lambda (ov) (if (equal (overlay-get ov 'org-overlay-type) 'org-latex-overlay)
                                (overlay-put ov
                                             'display
                                             (list 'image :type (or (intern imagetype) 'png) :file image :ascent 'center :scale 0.5))))
        (overlays-at beg)))
(advice-add 'org--make-preview-overlay :after #'my/overlay-scale-advice)

这将使Retina显示屏上的内联图片更加清晰。

对我来说,这导致了一个“错误:void-variable org-format-latex-options”。 - pfincent
这在我的 macOS 上完美运行,并避免了安装 dvisvgm 的需要(你需要从源代码构建它在 macOS 上)。 - gsgx
截至目前为止,在MacPorts和Homebrew上确实存在dvisvgm。如果你希望进行大量的TeX相关工作,MacTeX也包含了dvisvgm(以及其他工具)。 - undefined

1

默认情况下,orgmode LaTeX 预览不支持视网膜屏幕,在具有视网膜屏幕的 Mac 上,LaTeX 预览将变得模糊。
然而,我们可以通过修改 org.el 来实现此功能。只需按照以下步骤进行操作:

获取适合的Emacs版本

如果您想使用Yamamoto Mitsuharu版本的Emacs 25.1(具有更多的Mac特定功能):

brew tap railwaycat/emacsmacport
brew install emacs-mac

最后将其链接到您的应用程序文件夹:
brew linkapps emacs-mac

这个版本的emacs将支持视网膜图片显示。

更改 org-format-latex-options

将比例从1.0更改为2.0,以生成两倍大小的图像。

删除org.elc。

在org.el中添加函数
(defun galaxy-compose-image-filename-2x(image-file-name)
  (concat (file-name-directory image-file-name) (file-name-base image-file-name) "@2x." (file-name-extension image-file-name)))

并且评估函数。

修改函数 org-format-latex

修改片段:

(unless (file-exists-p movefile)
  (org-create-formula-image value movefile options forbuffer processing-type)

to

(unless (file-exists-p movefile)
  (org-create-formula-image value movefile options forbuffer processing-type)
  (setq filename-2x (galaxy-compose-image-filename-2x movefile))
  (rename-file movefile filename-2x)
  (call-process-shell-command "convert" nil nil nil nil (concat "\"" filename-2x "\" -scale \"50%\" -quality \"100%\"" ) (concat "\"" movefile "\"" )))

并且执行该函数。

现在,您可以在Mac Retina屏幕上预览具有2倍大小图像的LaTeX。


0

我已经尝试过emacs-mac-port

如果我在同一个目录下创建2个文件foo.png和foo@2x.png,这将起作用。


0

这可能不是问题的答案,但我想分享在AUCTEX mode中使用preview-latex时的经验。

模糊图像主要由位图图像引起,因此需要使用dvisvgm,因此需要preview-dvisvgm包,并且环境变量LIBGS需要设置正确。

仍然有一个问题与ghostscript的dvisvgm有关。在带有M1芯片的OSX 12.6.1中,ghostscript v10.00.0存在一些pdf解释问题,导致dvisvgm无法从pdf文件生成svg。一个解决方法是:

  1. 通过更改preview-LaTeX-command为“%`xelatex --no-pdf...”来让预览latex生成xdv文件而不是pdf文件
  2. 通过将preview-dvisvgm-pdf-command更改为“dvisvgm --no-fonts _region_.xdv ...”来让preview-dvisvgm使用第一步中的region.svg文件。

示例


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