这个东西我总算彻底搞懂了,最坑的地方是他报错只有一种错误信息,让你误以为总是dvi输出出错.
实际上这里的错误是很多方面的,你需要自己运行这段指令的每一个环节逐个排除各种错误.
由于我装的是texlive套件,其他人遇到的和程序对接不上导致的错误我没遇到过.
但我至少遇到了以下四种错误
- 1pdflatex不兼容中文出错
- 2中文字体找不到出错
- 3dvipng不兼容xelatex的xdv出错
- 4imagemagick 安全策略出错
如果你在linux上成功编译过latex文档,那么上面的1和2错误就不会犯,但是3和4还是可能会错.
下面我来全面讲一讲他们为什么错.
首先肯定不能用原本的pdflatex编译器,因为他不支持中文字符,会报错 所以要用xelatex.
但是你用了xelatex,编译器又不会找中文字体,需要你手动给它指定你想要渲染的中文字体.
所以你需要给模板最终生成的tex文件里加上两句代码
\usepackage{fontspec}
\setmainfont{Noto Serif CJK SC}
setmainfont中的参数是你系统中存在的中文字体.
其他的ctex,xeCJK都不需要,只要这两条,加多了影响运行速度,特别是ctex.
把他们加到最终tex里的方案也有两种
一种是永久的
- 先从org-mode给的API加\usepackage{fontspec}
(setq org-latex-packages-alist
'(("" "fontspec" t)))
- 再从模板文件
fullpage.sty
里追加一行
\setmainfont{Noto Serif CJK SC}
另一种是临时的,
- 把代码直接加到org文件头部
#+LaTeX_HEADER: \usepackage{fontspec}
#+LaTeX_HEADER: \setmainfont{Noto Serif CJK SC}
加了上面的内容后,再用上面的人写的
(setq org-preview-latex-default-process 'dvisvgm)
(setq org-preview-latex-process-alist
'((dvisvgm :programs
("xelatex" "dvisvgm")
:description "xdv > svg" :message "you need to install the programs: xelatex and dvisvgm." :use-xcolor t :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 %f -n -b min -c %S -o %O"))
(imagemagick :programs
("xelatex" "convert")
:description "pdf > png" :message "you need to install the programs: xelatex and imagemagick." :use-xcolor t :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"))))
就可以了.
如果你想在latex fragment里用中文,只能用这一种由xelatex->dvisvgm 的 dvi>svg的模式
其他的模式如
xelatex->dvipng,
他们的中间文件版本不兼容,会报错
还有xelatex->imagemagick
由于imagemagick的安全策略禁止了ghostscript执行,也会导出png不成功而报错.
所以你只能用这一种.