Latex编译中中文问题

https://tug.org/texlive/doc/texlive-en/texlive-en.html#x1-340003.4.4

非常感谢,按你的提示 org 可以导出为 PDF了,并且支持中文。

这里总结下在 Windows 和 macOS 平台下的配置,其他平台应该也差不多:

  1. 安装 texlive,安装时间会有点长,Windows下占用空间 7.91G

macOS 用户如果使用 macports 可以用下面的两个命令安装:

sudo port install texlive
sudo port install texlive-lang-chinese
  1. Emacs 中设置使用 xelatex
(use-package ox-latex
  :after org
  :custom
  (org-latex-compiler "xelatex")
  (org-latex-pdf-process
   '("xelatex -shell-escape -interaction nonstopmode -output-directory %o %f"
     "xelatex -shell-escape -interaction nonstopmode -output-directory %o %f"
     "xelatex -shell-escape -interaction nonstopmode -output-directory %o %f"
     "rm -fr %b.out %b.log %b.tex auto"))
  (org-latex-packages-alist
   '("\\usepackage{fontspec} \\usepackage{xeCJK} \\setmainfont{Times New Roman} \\setCJKmainfont{微软雅黑}")))

macOS 用户可以把 “微软雅黑” 改为其他 macOS 有的中文字体,比如 “PingFang SC”

注意,如果org 文档中有带下划线的英文字符,要在org文件头加入下面的设置:

#+OPTIONS: ^:nil

比如在 org 文件中是这样:

- *gauging_show_data_file:* 显示数据文档

在 PDF 中如果没加 #+OPTIONS: ^:nil 会显示成下面这样:

参考文档:https://orgmode.org/manual/Subscripts-and-Superscripts.html

2 个赞

这个相当有用!!

但这部分的设置有些疑问:

这个知乎讨论中提到了尽量避免使用xeCJK而是使用ctex作为替代

我也是刚开始用,我是参考了前面楼的设置。

刚试用了下ctex, 也好使。ctex 有什么优势吗?

\\usepackage{ctex}

其实只需要用ctexart class然后用xelatex编译就行了,其他什么都不用设置,header部分不用额外加东西。

至于一些细致的定制,去看一下ctex的包文档,中文的。

XeCJK 的标点,断行不符合中文排版习惯,只提供最基本的显示汉字的功能,ctex 类会在 XeCJK 上做封装并提供汉字相关的长度单位和字号大小,并对默认模版做了汉化。

当然,用 TeX 做对格式要求比较严谨的中文排版一般会去折腾 LuaTeX 或者 UpTeX,这方面其实还是日本人做的好用。

1 个赞

感谢大佬指点。看来这个几年前的信息果然过时了。

Emacs 中要怎么设置呢?定制这个 org-latex-classes

ctex的包文档能否给个链接?我是看看。

Ctex文档

http://mirrors.ctan.org/language/chinese/ctex/ctex.pdf

(setq org-latex-compiler "xelatex")
(setq org-latex-pdf-process
	    '("latexmk -f -pdf -xelatex -interaction=nonstopmode -output-directory=%o %f"))
(add-to-list 'org-latex-classes
		   '("ctexart"
		     "\\documentclass[UTF8, a4paper]{ctexart}
		[NO-DEFAULT-PACKAGES]
		[PACKAGES]
		[EXTRA]
"
		     ("\\section{%s}" . "\\section*{%s}")
		     ("\\subsection{%s}" . "\\subsection*{%s}")
		     ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
		     ("\\paragraph{%s}" . "\\paragraph*{%s}")
		     ("\\subparagraph{%s}" . "\\subparagraph*{%s}")))
      (setq org-latex-default-class "ctexart")


我用了latexmk,texlive里面都有。这样应该直接编译中文,org文件里什么都不配置都能导出成中文PDF。

2 个赞

用你的配置可以正常工作,但是我还有下面2个疑问。

  1. 如何隐藏第一页的内容:
pdfauthor=aqua0210, pdftitle=Test document, pdfkeywords=, pdf-
subject=, pdfcreator=Emacs 29.0.60 (Org mode 9.6.1), pdflang=English
  1. 怎么加上书签

看了 ctex 的中文文档,没找到这方面的信息。

解决了:去掉下面几行就好了

		[NO-DEFAULT-PACKAGES]
		[PACKAGES]
		[EXTRA]
1 个赞

这是其他包提供的功能,和 ctex 没啥关系

(虽然链接是 pdflatex,但是 xelatex 是向后兼容 pdflatex 的)

2 个赞

用 ^:{} 更好

1 个赞

多谢,我之前也试过^:{} ,但没成功,可能是“:”后少打了个空格。

刚刚又试了下,确实是可以的。

#+OPTIONS: ^:{}

然后开启 org cdlatex

还可以自动在^后加{}

:+1:看来又有新东西要学了。

另外请教下,是设置哪个宏包可以让目录页和正文页不要连在同一页?

org-latex-toc-command 里面加 \clearpage 一类的

1 个赞

:+1: :+1: 谢谢,我这样设置就可以封面页,目录页,正文分开了, 不知道这是不是正确的使用方式?

(setq org-latex-toc-command "\\clearpage \\tableofcontents \\clearpage")

shi de