Orgmode导出PDF显示不了中文

我查了一下AUCTex的文档,它里面提到关于Tex-engine的内容有这么一句:

If you want to activate an engine for all AUCTeX modes, set TeX-engine in your init file, e.g. by using M-x customize-variable .

我在配置文件中的设置已经生效了,Tex Engine已经是xetex了,但是编译还是会报

CTeX fontset `mac’ is unavailable in current mode

和在菜单栏里设置仍旧有区别,尚不明了原因

不用xetex可以生成中文pdf,比如使用CJK包之类的……在latex里比较简单,但在org-mode里就相对麻烦,使用 xetex 解决org-mode的中文问题是最便利的。

后面这个是字体问题了……在mactex的issue里有这个问题

不过解决方案看起来并不能参考……问问其他mac用户吧,我是linux用户,没遇过字体问题……

org 文件头部

 #+LATEX_HEADER: \usepackage{ctex}

spacemacs 配置文件

(setq org-latex-pdf-process '("xelatex -interaction nonstopmode %f"
                              "xelatex -interaction nonstopmode %f"))
(setq org-latex-default-packages-alist
     (remove '("AUTO" "inputenc" t) org-latex-default-packages-alist))

这样也可以正常导出,但是不太理解为什么要remove,求解

这里是我的配置,可以导出中文. LaTeX 要支持中文目前主流做法是使用 ctex 的文档类(ctexart, ctexbook 等),这时你有两个方法,其一是先用 org-mode 导出 tex 文件,然后手工修改 tex 文件的导言区,换掉文档类,其二是你直接把 tex 文件的模板设置给 org-mode,这样你直接导出 pdf 就可以了,我的配置就是用的后者。

提示: org-mode 导出为 pdf 这个功能是 org-mode 将 org 文件转换为 tex 文件(LaTeX文件)后,自动调用 LaTeX 编译器对 tex 文件进行编译生成的,LaTeX 是一个排版软件,而且有一定的学习成本,建议如果需求不强的话,不要折腾这个功能。

1 个赞

https://macplay.github.io/posts/xetex-de-zhong-wen-hua-she-zhi/

注意自己改下字体。

试试 org2ctex, 记得看README

xeCJK 也可以。

试试在org文档的前面加上

#+LATEX_HEADER: \usepackage{ctex}
#+LATEX_COMPILER: xelatex

前提是要装好xelatex

在我的电脑上可以直接导出.

6 个赞

inputenc不用在中文上,会报错的。你在latex里编译测试下就知道了。

分享下我的做法,我是通过 brew cask install basictex 安装的 latex,然后安装 CJK,最后配置下就好了:

// 1. 安装 cjk 包
sudo tlmgr install cjk

// 2. 在 init.el 里面激活 cjk
(add-to-list 'org-latex-packages-alist '("" "CJKutf8" t))

// 3. 在 org 文档再次声明
#+LaTeX_HEADER: \usepackage{CJK}
#+LaTeX_HEADER: \begin{CJK}{UTF8}{gbsn}

其他方式:

给楼上的提个醒:

latex的CJK包,要把中文放在\begin … \end 的环境里。你的例子只有begin没有end,是不行的。在org里用 ctex包就不会有这种尴尬的情况。 (毕竟,在中文支持方面,ctex提供了比CJK更全面的解决方案。)

另外,CJK包是要配搭pdfLatex的,然而大家更爱xelatex

多谢提醒,我上面给出的 freizl.github.io 链接里有说这种方式的弊端,虽然没有 end 快,但是 pdf 还是能正确生成的。 不过今天发现 pdf 的左侧导航还是有中文乱码, 回来再试试 ctex

其实,我觉得CJK包的好处是灵活机动,因为它只会对指定环境里的字符进行必要的处理,而不影响文档的其他部分。

但是,在org header加设置是不够明确的,org的自动处理让CJK环境开头和结尾标记的地方难以控制。例如,有时CJK环境里除了有中文还有其它语言,又或者CJK环境里还有其它环境…… 这样反而容易产生混乱。

所以,还是要像那个博客里说的, 最好在中文字符的前后手动加入#+LaTeX: \begin{CJK}{UTF8}{gbsn}#+LaTex: \end{CJK}

我比较满意的解法,参看这个链接:Latex编译中中文问题 - #8,来自 wztdream

org-mode中文导出latex解决方法

请问,在emacs中,第二个设置该如何写?

安装了org2ctex,认真按readme做了,:slight_smile:

但可能因为我是linux系统,中文还是没出来,感觉就差这一步了:找不到字体:

错误信息:

Org2ctex mode is enabled, force *override*:org-latex-default-class, org-latex-classes, org-la
Loading /home/gxy/.emacs.d/elisp/emacs-nes/nes.el (source)...done                             
Loading /home/gxy/.emacs.d/.local/jingyun.el (source)...done                                  
Add pyim dict "Basedict-elpa" to ‘pyim-extra-dicts’.                                          
PYIM: ‘pyim-isearch-mode’ 已经激活,激活后,一些 isearch 扩展包有可能失效。                   
Reading bookmarks from: ~/.emacs.d/bm-repository                                              
For information about GNU Emacs and the GNU system, type C-h C-a.                             
org-latex-chinese: Emacs can’t find an available (mainfont) font for latex, ignore!           
org-latex-chinese: Emacs can’t find an available (CJKmainfont-italic) font for latex, ignore! 
org-latex-chinese: Emacs can’t find an available (CJKmainfont) font for latex, ignore!        
org-latex-chinese: Emacs can’t find an available (CJKsansfont) font for latex, ignore!        
org-latex-chinese: Emacs can’t find an available (CJKmonofont) font for latex, ignore!        
org-latex-chinese: Emacs can’t find an available (mainfont) font for latex, ignore!           
org-latex-chinese: Emacs can’t find an available (CJKmainfont-italic) font for latex, ignore! 
org-latex-chinese: Emacs can’t find an available (CJKmainfont) font for latex, ignore!        
org-latex-chinese: Emacs can’t find an available (CJKsansfont) font for latex, ignore!        
org-latex-chinese: Emacs can’t find an available (CJKmonofont) font for latex, ignore!        
org-babel-exp process json at position 1089...                                                
org-babel-exp process json at position 2832...                                                
org-babel-exp process json at position 3222...                                                
Saving file /fusion.tex...                       
Wrote /fusion.tex                                
org-latex-chinese: Emacs can’t find an available (mainfont) font for latex, ignore!           
org-latex-chinese: Emacs can’t find an available (CJKmainfont-italic) font for latex, ignore! 
org-latex-chinese: Emacs can’t find an available (CJKmainfont) font for latex, ignore!        
org-latex-chinese: Emacs can’t find an available (CJKsansfont) font for latex, ignore!        
org-latex-chinese: Emacs can’t find an available (CJKmonofont) font for latex, ignore!        
org-latex-chinese: Emacs can’t find an available (mainfont) font for latex, ignore!           
org-latex-chinese: Emacs can’t find an available (CJKmainfont-italic) font for latex, ignore! 
org-latex-chinese: Emacs can’t find an available (CJKmainfont) font for latex, ignore!        
org-latex-chinese: Emacs can’t find an available (CJKsansfont) font for latex, ignore!        
org-latex-chinese: Emacs can’t find an available (CJKmonofont) font for latex, ignore!        
Processing LaTeX file fusion.tex...                                                           
PDF file produced with errors.                                                                

org2ctex-latex-fonts 参数设置,试了各种组合,好像不管用:

 Operate on all settings in this buffer:                                                                        
 [ Revert... ] [ Apply ] [ Apply and Save ]                                                                     
                                                                                                                
 Hide Org2ctex Latex Fonts:                                                                                     
 ((mainfont "WenQuanYi Micro Hei")                                                                              
  (CJKmainfont "WenQuanYi Micro Hei" "Microsoft Yahei" "Microsoft_Yahei" "SimHei" "文泉驿微米黑" "文泉驿等宽微米
  (CJKmainfont-italic "KaiTi_GB2312" "KaiTi" "STKaiti" "楷体" "楷体_GB2312" "华文行楷")                         
  (CJKsansfont "Microsoft Yahei" "Microsoft_Yahei" "WenQuanYi Micro Hei" "SimHei" "文泉驿微米黑" "文泉驿等宽微米
  (CJKmonofont "WenQuanYi Micro Hei" "Microsoft Yahei" "Microsoft_Yahei" "SimHei" "文泉驿微米黑" "文泉驿等宽微米
    [ State ]: SAVED and set.                                                                                   
    Set fonts candidates which will used by latex.                                                              
 Groups: [Org Export Latex Chinese]                                                                             

把你系统有的字体,添加到这个字体设置的最前面

谢谢,我把所有的字体都改了以后,找不到字体的错误没有了,出现了新的错误:

后面重复的全都是下面错误信息中最后一个类似的错误.

203 (/usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty)             
204 *************************************************                           
205 * xeCJK warning: "no-CJKfamily"                                             
206 *                                                                           
207 * It seems that you have not declare a CJKfamily.                           
208 * If you want to use xeCJK in the right way, you should use                 
209 *                                                                           
210 * `\setCJKmainfont[...]{...}'                                               
211 *                                                                           
212 * in the preamble to declare the default CJKfamily.                         
213 *                                                                           
214 *************************************************                           
215 (.//fusion.aux) (/usr/share/texmf/tex/latex/tipa/t3cmr.fd)                  
216 ABD: EverySelectfont initializing macros                                    
217 *** you should *not* be loading the inputenc package                        
218 *** XeTeX expects the source to be in UTF8 encoding                         
219 *** some features of other encodings may conflict, resulting in poor output.
220 (/usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty               
221 (/usr/share/texlive/texmf-dist/tex/generic/oberdiek/gettitlestring.sty))    
222 (.//fusion.out) (.//fusion.out) ABD: EveryShipout initializing macros       
223 *geometry* driver: auto-detecting                                           
224 *geometry* detected driver: xetex                                           
225 (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd)                  
226 (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd) (.//fusion.toc   
227 ! Missing } inserted.                                                       
228 <inserted text>                                                             
229                 }                                                           
230 l.3 ...\237与用户系统相同)}{2}{subsection.2.1}                              
231                                                                             
232 ! Missing } inserted.                                                       
233 <inserted text>                                                             
234                 }                                                           
235 l.3 ...\237与用户系统相同)}{2}{subsection.2.1}                              
236                                                                             
237 )                                                                           
238 ! Missing number, treated as zero.                                          

我按照这个网页来的:

从完全零配置开始,

把那两个要修改的地方 (一个 hook,一个变量) 加入 .dir-locals.el

((org-mode (org-latex-pdf-process
            "xelatex -interaction nonstopmode -output-directory %o %f"
            "xelatex -interaction nonstopmode -output-directory %o %f"
            "xelatex -interaction nonstopmode -output-directory %o %f")
           (eval add-to-list 'org-latex-classes
                 '("ctexart" "\\documentclass{ctexart}"
                   ("\\section{%s}" . "\\section*{%s}")
                   ("\\subsection{%s}" . "\\subsection*{%s}")
                   ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
                   ("\\paragraph{%s}" . "\\paragraph*{%s}")
                   ("\\subparagraph{%s}" . "\\subparagraph*{%s}")))))

在同一目录下添加设置字体的包 mylinuxfonts.sty (不能直接用 fontconfig 的配置,但字体名字和 fontconfig 的字体名字一致):

\ProvidesPackage{mylinuxfonts}
\setCJKmainfont{A Serif Name}
\setCJKsansfont{A Sans-Serif Name}
\setCJKmonofont{A Monospace Name}
\endinput

在这个目录下编辑某 org 文件时加上下面三行:

#+LATEX_CLASS: ctexart
#+LATEX_CLASS_OPTIONS: [nofonts]
#+LATEX_HEADER: \usepackage{mylinuxfonts}

这样就行了。

1 个赞