#+LATEX_HEADER: \usepackage{fontspec}
#+LATEX_HEADER: \usepackage[left=2.00cm, right=2.00cm, top=2.00cm, bottom=2.00cm]{geometry}
#+LATEX_HEADER: \setmainfont{KaiTi}
#+LATEX_HEADER: \XeTeXlinebreaklocale "zh"
#+LATEX_HEADER: \XeTeXlinebreakskip = 0pt plus 1pt
#+LATEX_HEADER: \usepackage{setspace}
#+LATEX_HEADER: \onehalfspacing
#+LATEX_HEADER: \XeTeXinterchartokenstate=1
* 中文测试
** as;df啊上了飞机公司啊打工i阿斯弗阿斯弗哦热i啊大家发了
\circ\\
^sf\\
\shy\\
\asciicirc\\
$asfl
#+NAME: translate
#+BEGIN_SRC perl :results value :exports results both
my $todolist="GOTO / -71.42857, -16.00000, -49.48717,-0.866025, 0.000000,-0.500000";
$todolist !~ tr/A-Z/a-z/;
#表示将变量todolist 中的所有大写字母转化为小写字母,如果转化发生了则返回 "0",否则返回 "1"。
return "$todolist"
#+END_SRC
啥都正常,有时候表格里输出不正常,有时候代码块中的不正常,有没有方法破啊。
到处搜答案,未果,还是求助老师吧。
应该是转 PDF 的时候中文字体/编码出了问题,不是 org-mode 没有输出。
1 个赞
谢啦,倒是没有注意使用你告诉的方法分析一下,我看看我的tex文件也是。
确实已经输出 ,看来今后要多方分析,才能找到原因,谢谢指教。
开始以为与#号有关,结果不是。看来不能自以为啊。org相当完善了啊。
这样配置就解决了。
#+LATEX_CLASS: ctexart
#+LATEX_HEADER: \usepackage{fontspec}
#+LATEX_HEADER: \usepackage[left=2.00cm, right=2.00cm, top=2.00cm, bottom=2.00cm]{geometry}
#+LATEX_HEADER: \setmainfont{KaiTi}
#+LATEX_HEADER: \XeTeXlinebreaklocale "zh"
#+LATEX_HEADER: \XeTeXlinebreakskip = 0pt plus 1pt
#+LATEX_HEADER: \usepackage{setspace}
#+LATEX_HEADER: \onehalfspacing
#+LATEX_HEADER: \XeTeXinterchartokenstate=1
* 中文测试
** as;df啊上了飞机公司啊打工i阿斯弗阿斯弗哦热i啊大家发了
\circ\\
^sf\\
\shy\\
\asciicirc\\
$asfl
LATEX_HEADER: \usepackage{mylinuxfonts}
#+NAME: translate
#+BEGIN_SRC perl :results value :exports results both
my $todolist="GOTO / -71.42857, -16.00000, -49.48717,-0.866025, 0.000000,-0.500000";
$todolist !~ tr/A-Z/a-z/; #表示将变量todolist 中的所有大写字母转化为小写字母,如果转化发生了则返回 "0",否则返回 "1"。
return "$todolist"
#+END_SRC
希望碰到相同问题的朋友有用。
2 个赞
只标示出差异部分,让别人更快聚焦问题所在,例如以下是我的修改(macOS + texlive):
⋊> diff -U0 old.org new.org
--- old.org 2017-11-20 16:17:53.000000000 +0800
+++ new.org 2017-11-20 16:20:03.000000000 +0800
@@ -3 +3,2 @@
-#+LATEX_HEADER: \setmainfont{KaiTi}
+#+LATEX_HEADER: \usepackage{xeCJK}
+#+LATEX_HEADER: \setCJKmainfont{STKaiti}
1 个赞
谢提醒,事实上,感觉
#+LATEX_CLASS: ctexart
起了作用,因为开始的时候,我就有了。
\setmainfont{KaiTi}
但是不能显示。
我使用你的类似方法实现了中英文分别设置了字体,在文档中可以**实现英文等宽字,和中文字体的分别设置**。感觉还蛮有用的,给需要的人参考。下面是我最新的配置。
OS=windows server 2016,
emacs=25.3
latex=MikTex2.9
org文件开头放入以下字串:
#+LATEX_CLASS: ctexart
#+LATEX_HEADER: \usepackage{graphicx}
#+LATEX_HEADER: \usepackage{amsmath}
#+LATEX_HEADER: \usepackage{fontspec,xunicode, xltxtra}
#+LATEX_HEADER: \usepackage{xeCJK}
#+LATEX_HEADER: \setCJKmainfont{KaiTi} % 中文的字体为楷体
#+LATEX_HEADER: \setmainfont{Source Code Pro} % 英文字体使用
#+LATEX_HEADER: \usepackage[left=2.00cm, right=2.00cm, top=2.00cm, bottom=2.00cm]{geometry}
#+LATEX_HEADER: \XeTeXlinebreaklocale "zh"
#+LATEX_HEADER: \XeTeXlinebreakskip = 0pt plus 1pt
#+LATEX_HEADER: \usepackage{setspace}
#+LATEX_HEADER: \onehalfspacing
#+LATEX_HEADER: \XeTeXinterchartokenstate=1
根据我的测试,只需要以下最简配置就行。连 XeCJK
包都不需要。
https://macplay.github.io/posts/xetex-de-zhong-wen-hua-she-zhi/
ctexart
看网上一些评论说,也是过时的。不推荐使用。
谢指教,空了试验一下。不知道能不能中英文单独设置字体。当然喜欢简单设置,一步搞定。现在文章越来越大,编译越来越慢了。看来后面要折腾分章了,不知道还要产生多少坑。
中英文单独设置字体有时候会显得不协调。我的做法是直接选用字符集大的字体,同时包含中英文的那种。这样下来,选择范围急剧缩窄。
另外一个纠结点在于:代码块我们肯定希望优先使用等宽字体。但有时代码块中也会包含中文,而中文压根没等宽这个概念。这时你去指定一个等宽字体,肯定要编译失败。所以干脆也直接用字符集大的字体吧。
\setmonofont[Scale=0.9]{PingFang SC}
嗯,总结下来只有一条经验:不想折腾的话,就用字符集大的字体。
1 个赞
刚才无聊又用 emacs 试了下,真的不需要 XeCJK
和 ctexart
。所有一切正常,包括你说的中文注释。
-#+LATEX_HEADER: \setmainfont{KaiTi}
+#+Latex_HEADER: \setmainfont{PingFang SC}
+#+Latex_HEADER: \setsansfont{Hiragino Sans GB}
+#+Latex_HEADER: \setmonofont[Scale=0.9]{PingFang SC}
#+LATEX_HEADER: \XeTeXlinebreaklocale "zh"
#+LATEX_HEADER: \XeTeXlinebreakskip = 0pt plus 1pt
#+LATEX_HEADER: \usepackage{setspace}
#+LATEX_HEADER: \onehalfspacing
-#+LATEX_HEADER: \XeTeXinterchartokenstate=1
最后删除的那行是因为不知道它干嘛用的,而且影响了文章目录正常生成。
确实,只要字体对了就能显示。但效果还是有差别的,从 log 也能看得出来,XeCJK 对中文样式/间距做了调整:
(./export-comment-in-codeblock_xecjk.toc
(/usr/local/texlive/2016/texmf-dist/tex/latex/amsfonts/umsa.fd)
(/usr/local/texlive/2016/texmf-dist/tex/latex/amsfonts/umsb.fd))
(/usr/local/texlive/2016/texmf-dist/tex/latex/euenc/eu1lmtt.fd)
Overfull \hbox (22.65216pt too wide) in paragraph at lines 57--57
[]\EU1/lmtt/m/n/10.95 # \EU1/PingFangSC(1)/m/n/10.95 表 示 将 变 量 \EU1/lmtt/m/n/10
.95 todolist \EU1/PingFangSC(1)/m/n/10.95 中 的 所 有 大 写 字 母 转 化 为 小 写 字 母 , 如 果
转 化 发 生 了 则 返 回 \EU1/lmtt/m/n/10.95 "0" \EU1/PingFangSC(1)/m/n/10.95 , 否 则 返 回
\EU1/lmtt/m/n/10.95 "1" \EU1/PingFangSC(1)/m/n/10.95 。 []
[1] (./export-comment-in-codeblock_xecjk.aux) )
(see the transcript file for additional information)
Output written on export-comment-in-codeblock_xecjk.pdf (1 page).
Transcript written on export-comment-in-codeblock_xecjk.log.
不仅仅是英文两侧加空格,还包括中文标点符号的压缩:
以及换行禁则,判断哪些符号不能出现在行首/尾:Line breaking rules in East Asian languages - Wikipedia
不用 XeCJK 肯定是能实现的。