Table of Contents

1. 魔改org-mode的默认渲染引擎dvipng

1.1. 基本介绍

在org-mode设定的org-preview-latex-process-alist列表内

修改了dvipng

通过 C-h v org-preview-latex-default-process

就能看到 org-mode的默认引擎

就是 C-h v org-preview-latex-process-alist 里的 dvipng

1.2. 文件已写得十分详细了

;; =======================================
;; 关于variable变量
;; =======================================
(defvar variable-ui-fonts-size                       130                                            "[变量]: 默认的字体大小")
(defvar variable-latex-fragment-quality              100                                            "[变量]: latex-fragment的渲染质量")
(defvar variable-latex-fragment-adjust-width         1.7                                            "[变量]: latex-fragment的默认长度倍数")
(defvar variable-latex-fragment-adjust-height        1.5                                            "[变量]: latex-fragment的默认宽度倍数")


;; ========================================
;; note-orgmode-dvipng.el 自定义dvipng引擎
;; ========================================
;; 设置dvipng的调整图片大小
(defvar dvipng-image-size-adjust
  (read (format "(%f . %f)"
                variable-latex-fragment-adjust-width
                variable-latex-fragment-adjust-height)))

;; 设置latex编译器的生成dvi文件的行为
(defvar dvipng-latex-compiler
  (concat "latex"                         ; 使用latex编译器来生成.dvi文件
          " "
          "-interaction nonstopmode"      ; 编译时遇到错误也不停下,继续编译,防止Emacs因为一些上古LaTeX2e宏包的错误而卡住
          " "
          "-output-directory %o"          ; 在当前目录的临时目录下,输出编译出来的产物文件
          " "
          "%f"                            ; Emacs临时根据当前latex-fragment生成.tex源文件,并传入到前面的编译器来编译
          ))

;; 设置dvipng转换图片程序的从dvi生成到png的行为
(defvar dvipng-image-converter-dpi variable-ui-fonts-size)
(defvar dvipng-image-converter
  (concat
   "dvipng"                               ; 将之前得到的dvi文件,转换为png的引擎程序
   " "
   (format "-D %d"
           dvipng-image-converter-dpi)    ; 设置分辨率
   " "
   "-T tight"                             ; 自动裁剪边缘空白,防止出现大面积空白区域
   " "
   "-o %O"                                ; 在当前目录的临时目录下,输出编译出来的产物文件
   " "
   "%f"                                   ; 输入读取.dvi文件,来在下一步去转换为png文件
   ))

;; 设置imagemagick转换图片程序从png到更进一步的png的行为
(defvar dvipng-transparent-image-converter
  (concat
   "convert"                              ; convert也就是imagemagick
   " "
   (format "-density %d"                  ; 控制像素密度
         variable-ui-fonts-size)
   " "
   (format "-background '%s'"             ; 设置背景颜色
           variable-latex-fragment-background)
   " "
   "-flatten"                             ; 类似PS的合并图层,需要在-background后面使用,目的是将透明区域变成带RGB通道的区域
   " "
   (format "-quality %d"                  ; PNG 的压缩质量(对于 PNG 影响不大,对 JPEG 很重要)
           variable-latex-fragment-quality)
   " "
   "%f"                                   ; 输入读取.png文件,来载下一步去转换为magick这里设置出来的png文件
   " "
   "%O"                                   ; 输出magick这里设置出来的png文件的文件名占位符
   ))


;; ========================================
;; dvipng: 渲染非utf-8片段引擎
;; ========================================
;; 删除原本的
(setq org-preview-latex-process-alist
      (assq-delete-all 'dvipng org-preview-latex-process-alist))
;; 添加自己的
(setq org-preview-latex-process-alist
      `((dvipng
        :programs ("latex" "dvipng" "convert")
        :description "dvi > png"
        :message "you need to install the programs: latex and dvipng."
        :image-input-type "dvi"
        :image-output-type "png"
        :image-size-adjust ,dvipng-image-size-adjust
        :latex-compiler (,dvipng-latex-compiler)
        :image-converter (,dvipng-image-converter)
        :transparent-image-converter (,dvipng-transparent-image-converter))))  

Author: kle

Created: 2025-06-11 Wed 21:38

Validate