图解Texlive2008的安装和XeTeX的简单中文排版

OOo,TeX,KO,ABI,GIMP,Picasa,ProE,QCAD,Inkscape,Kicad,Eagle
回复
头像
runpin
帖子: 647
注册时间: 2005-09-29 11:13
来自: Boston, MA

图解Texlive2008的安装和XeTeX的简单中文排版

#1

帖子 runpin » 2008-11-20 11:33

下面的内容仅仅只是一个演示,既如何在Ubuntu 8.10 下安装Texlive 2008,以及如何用 XeTeX 来生成一个适合在网络上浏览的 PDF 文档。传统 CJK 宏包也可以生成,但字体配置着实有些令人生畏,所以这里使用XeTeX。过程很简单,如果是老手或牛人就不用看了。


解决 kile 以及 AUCTeX 等安装的依赖问题,可以看第三页 42 楼。
9.04 上 kile 的 dummy 包在第六页 79 楼。
第七页的 91 楼上有 lovelotus 修订过的 dummy 包,需要的可以下载那个!
如果使用tlmgr --gui更新时出错,可以看看 第六页 86 楼 lovelotus 的回复并下载相应的文件。


第一步、安装Texlive

我这里使用的是2008的DVD版(http://www.tug.org/texlive/acquire.html),可以全部安装,也可以挂载ISO文件直接运行。我是全部安装。不推荐Ubuntu 8.10源里的那个2007,它的XeTeX版本有些旧,后面我们要装zhspacing或者xeCJK就有些麻烦:

1)因为要使用图形界面而不是在命令行下倒腾,所以需要首先安装perl-tk包,很小:

代码: 全选

sudo apt-get install perl-tk
2)解压下载后的lzma文件并挂载此ISO文件到/mnt上:

代码: 全选

sudo mount -o loop texlive2008-20080822.iso /mnt
3)cd到mnt目录,用命令:

代码: 全选

 sudo ./install-tl --gui
接着,会跳出一个图形窗口供选择安装:
初始化安装界面
初始化安装界面
点击第四项“Language Collections“,取消不用的语言包,可以节省300兆的空间:
Screenshot-Language Collections.png
再选择最后一项“Create symlinks in system directories“,让安装程序自己来给我们创建语法链接:
Screenshot-Create symlinks in system directories.png
Screenshot-Create symlinks in system directories.png (3.16 KiB) 查看 95054 次
Screenshot-Create symlinks in system directories-1.png
Screenshot-Create symlinks in system directories-1.png (6.59 KiB) 查看 95035 次
最后的安装界面是这样的:
Screenshot-Install-tl.png
点击“Install Tex Live”就可以安装了。当然,也可以挂载ISO文件,从DVD上运行,效果一样,因为它的名字就是Live DVD嘛,不过稍微需要一些配置。如果你像我一样,硬盘大,人又懒,那么还是全部安装的好。

路径在安装过程中已经自动设置好了,如果愿意,还可以在/etc/environment中添加一句/usr/local/texlive/2008/bin/i386-linux,比如我的就是:

代码: 全选

PATH="/usr/local/texlive/2008/bin/i386-linux:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
LANGUAGE="en_US:en"
LANG="en_US.UTF-8"
这一步似乎有些画蛇添足。Anyway,加上也无所谓。

以后如果要升级的话,可以在命令行中输入:

代码: 全选

sudo tlmgr --gui
调用Texlive2008的管理器,由于帖子的附件限制,具体请看21楼。。。

完成后,需要的东东都在上头了,不过要搞定中文就需要折腾一番了。Now,接着来。。。

第二步,配置中文XeTeX

严格说,这个标题有语病,因为即使不配置,XeTeX还是可以正常处理中文,因为它不像LaTeX,它可以直接调用系统字体。比如:

代码: 全选

\documentclass{article}
\usepackage{fontspec}
\setmainfont{SimSun}

\begin{document}
Cowards die many times before their deaths.\\

懦夫在未死之前,已身历多次死亡的恐怖了。
\end{document}
Screenshot-test.pdf - Adobe Reader-1.png
(一)安装zhspacing

但问题是,中文是正常了,英文也用宋体渲染就太难看了。所以,这里需要安装一个 zhspacing 宏包,有了它,就可以正常处理中文的断句、断字和使用正确的英文字体。下面是步骤:

1)到http://code.google.com/p/zhspacing/上下载zhspacing080102.tar.bz2包,顺便把那个 man 文件也下载下来,看看用法。

2)解压后,把里面的六个文件放到 /usr/local/texlive/texmf-local/tex 中的 xelatex/zhspacing 中去,这里需要有 su 的权限,如果没有这两个嵌套的文件夹,自己新建就是了。其实也可以放到家目录下面的 .texlive2008 里,总之就是放在一个 XeTeX 找得着的地方。

3)在终端下使用命令:

代码: 全选

sudo mktexlsr
这里要提醒的是,其中有一个文件名为 zhfont.sty,默认设置的一些字体是:

代码: 全选

\newfontfamilywithslant\zhrmfont{SimSun}

\newfontfamilywithslant\zhsffont{SimHei}

\newfontfamilywithslant\zhttfont{FangSong_GB2312}

\else

\newfontfamilywithslantandbold\zhrmfont{SimSun}{SimHei}

\newfontfamilywithslant\zhsffont{SimHei}

\newfontfamilywithslantandbold\zhttfont{FangSong_GB2312}{KaiTi_GB2312}
如果你的系统中没有相应的字体,编译的时候会出错,所以要用 fc-list 看看你的系统中有哪些字体,替换上面代码中的字体名就可以了。另外,那个 zhspacing.sty 里也有几个字体的配置,仔细查看一下自己系统里是否有这些字体。

接下来,测试一下:

代码: 全选

\documentclass[11pt,a4paper]{article}
%------------------------------------------------------------------------------------------------------
\usepackage{fontspec,xltxtra,xunicode}    % 这里使用 xetex 相应的宏包
\usepackage{zhfont}                       % 这里调用 zhfont.sty 
\zhspacing
%------------------------------------------------------------------------------------------------------

%------------------------------------------------------------------------------------------------------
\setzhmainfont[BoldFont=LiHei Pro]{KaiTi_GB2312}%这里设置中文粗体和普通字体
\setmainfont{TeX Gyre Pagella}           %这里设置英文衬线字体
\setmonofont{Monaco}                     %英文等宽字体
\setsansfont{Trebuchet MS}               %英文无衬线字体
%-------------------------------------------------------------------------------------------------------

\begin{document}
Cowards die many times before their deaths.\\

懦夫在未死之前,已身历多次死亡的恐怖了。
\end{document}
虽然看上去头重脚轻,不过应该不会有问题了,保存为 test.tex,编译:

代码: 全选

xelatex test.tex
Screenshot-test.pdf - Adobe Reader.png
现在可以看见漂亮的英文字体了,当然楷体不怎么样,可以换成其他字体,比如宋祖德最喜欢的女神徐静蕾 MM 的方正静蕾简体就不错,可惜太淡了。

此外,也可以调用 zhspacing.sty。更简单的办法是直接修改这两个文件(zhspacing.sty 和 zhfont.sty)中的字体,设置成你需要的字体,这样无需再在你的文档里设置字体。

(二)安装xeCJK

另外,还有一个中文解决方案是使用xeCJK。可以到 http://bbs.ctex.org/viewthread.php?tid=40232 上去下载(在第 5 页的 66 楼也可以下载附件)。它并不比 zhspacing复杂,安装方式差不多:

下载后,解压xecjk-2.29.zip文件,把压缩包里的 tex/xelatex 下的 xecjk 目录复制到和上面那个zhspacing 目录相同的地方就可以了。不要忘了之后执行:sudo mktexlsr。

xeCJK设置也很灵活,首先,在preamble中加载宏包:

代码: 全选

\usepackage[slantfont,boldfont]{xeCJK}
然后设置字体:

代码: 全选

\setCJKmainfont{FZJingLeiS-R-GB}    % 设置缺省中文字体
\setCJKmonofont{SimSun}		    % 设置代码或数学公式出现的中文字体
比如:

代码: 全选

% !Mode:: "TeX:UTF-8"
\documentclass[12pt,a4paper]{article}
\usepackage{xltxtra,fontspec,xunicode}
\usepackage[slantfont,boldfont]{xeCJK} % 允许斜体和粗体

\setCJKmainfont{FZJingLeiS-R-GB}	% 设置缺省中文字体
\setCJKmonofont{SimSun}	% 设置等宽字体
\setmainfont{TeX Gyre Pagella} % 英文衬线字体
\setmonofont{Monaco} % 英文等宽字体
\setsansfont{Trebuchet MS} % 英文无衬线字体

\begin{document}

\begin{verse}
Stray birds of summer come to my window to sing and fly away. \\
And yellow leaves of autumn, which have no songs, \\
flutter and fall there with a sign.\\

\hfill \emph{Rabindranath Tagore}
\end{verse}

\begin{verse}
夏天的飞鸟,飞到我的窗前唱歌,又飞去了。\\
秋天的黄叶,它们没有什么可唱,只叹息一声,飞落在那里。\\
\hfill \emph{罗宾德拉纳特·泰戈尔}
\end{verse}

\end{document}
效果为:
Screenshot-poem.pdf - Adobe Reader.png
在 xeCJK 的压缩包里有三个文件:ctex4xetex.cfg、xeCJK.sty 和 xeCJKpunct.spa。第一个是用来导入以前 CTeX 宏包对中文排版专门的设置以及 CTeX 的三个类(ctexart、ctexrep、ctexbook),第二个是 xeCJK 对 xetex 排版时中文标点符号、空格等的规定,第三个是与特定字体相对应的特定的标点符号的设置,默认给出的是 “文鼎pl简报宋”,最好自己生成。

在 xeCJK 的压缩包里有一个 source 目录,作者已经写好了一个脚本,用来为特定字体生成对应的标点符号,默认设置是 Windows 上使用的 gswin32c.exe,只需要按照作者的提示,注释掉它,使用 Linux 常用的 gs。具体的用法,作者的范例和 README 文件已经说地很详细了。

我一般在系统中会安装 Adobe 的四个字体:Adobe Song Std(宋体)、Adobe Kaiti Std(楷体)、Adobe Heiti Std(黑体)、Adobe Fangsong Std(仿宋)。正文使用 Adobe Song Std、斜体字使用 Adobe Kaiti Std、粗体字使用 Adobe Heiti Std、等宽字体使用 Adobe Fangsong Std。这样,对应的设置就是:

代码: 全选

\documentclass[11pt,a4paper]{report} % 使用 report 类
\usepackage{fontspec,xunicode,xltxtra} % 加载 xetex 的宏包

% 以下是英文字体的设置
\defaultfontfeatures{Scale=MatchLowercase} % 这个参数保证 serif、sans-serif 和 monospace 字体在小写时大小匹配
\setmainfont[Numbers=OldStyle,Mapping=tex-text]{Garamond Premier Pro} % 使用 Garamond 字体,把数字设置为等宽,比较好看
\setsansfont[Mapping=tex-text]{Optima LT Std} % 使用 XeTeX 的 text-mapping 方案,正确显示 LaTeX 样式的双引号(`` '')
\setmonofont{Monaco}

% 以下是中文字体的设置
\usepackage[slantfont,boldfont,CJKnumber,CJKtextspaces]{xeCJK} % 加载 xeCJK,允许斜体、粗体和 CJK 数字以及 CJK 对空格的设置
\setCJKmainfont[BoldFont={Adobe Heiti Std}, ItalicFont={Adobe Kaiti Std}]{Adobe Song Std}
\setCJKsansfont{YouYuan} 
\setCJKmonofont{Adobe Fangsong Std}

\begin{document}

% 开始码字

\end{document}
这里的前提是,上面所有的字体都安装了,其中“Numbers=OldStyle” 这个选项不是对所有英文字体都起作用,有的英文字体没有这个属性,不过对于 TeX Gyre Pagella 系列是适用的。

如果你写的东西基本和英文没什么关系,大可以不用设置英文,甚至无需加载 “\usepackage{fontspec,xunicode,xltxtra}” 这一项,而是使用 xeCJK 作者提供的 ctex4xetex.cfg,这样就可以充分利用以前 CTeX 的特性:

代码: 全选

\input{ctex4xetex.cfg} % 导入 ctex4xetex.cfg
\documentclass{ctexbook} % 使用 ctexbook 类

\usepackage[boldfont,slantfont,CJKnumber]{xeCJK}
\setCJKmainfont[BoldFont={Adobe Heiti Std}, ItalicFont={Adobe Kaiti Std}]{Adobe Song Std}
\setCJKsansfont{YouYuan}
\setCJKmonofont{Adobe Fangsong Std}

\begin{document}

% 开始码字

\end{document}
上面代码中没有设置英文,所以默认使用的是计算机现代字体。

第三步,简单的排版

以上安装配置搞定以后,中文英文都不成问题了,就可以来实际地排一排版了,这里祭出偶最喜欢的《金瓶梅》第一回中的几段文字来看看实际效果。

开始之前,有这样一个问题,就是,我们想要 PDF 文件在用 acrobat reader 打开的时候只显示一页,就像幻灯片一样,不多不少就是一页,而且不需要用滚动条就可以看到这一页的全部内容。acrobat reader 会视屏幕大小自动放大页面,显示相应的、更清晰的字体。很适合在在网页中在线浏览。当然,你可以直接用 beamer 来实现,不过这里我们不是做幻灯,所以可以用另一种办法。

首先,需要考虑一下页面的大小,也就是适合在什么样尺寸的显示器上表现。我的本本是 13.3 寸的,所以就假定是十四英寸的显示器,宽高比大致保持为 3:2 这样一个比例,这样,在 preamble 区中设置如下命令:

代码: 全选

\setlength{\textwidth}{4.166in}
\setlength{\textheight}{3in}
(这里的 4.166in 来源于图像处理时的 300dpi 下 300x300 像素的一英寸图像在导出为 72dpi 解析度后的实际大小,也就是 4.166in。这个解释好费劲,你可以直接忽略掉,用 Photoshop 的人应该知道。)

效果如下:
Screenshot-jpm.pdf - Adobe Reader.png
这样就可以了,需要的文字会被显示在一个长宽适中的范围内。但是,页面周围的空白太多了,很不好看,所以要剪裁掉多余的 margins,怎么办呢,使用 Texlive2008 自带的一个小工具 pdfcrop 就可以了,用法很简单,我这里使用的是:

代码: 全选

pdfcrop --margins '20 20 20 12.36' --clip jpm.pdf jpm_new.pdf
上面的四个数字代表的是左、顶、右、底的 bp(big points),这是 pdfcrop 的单位(1 in = 72 bp) 。

到这里,我们的文章就排好了,效果如下:
Screenshot-crop.pdf - Adobe Reader.png
PS:剪裁这一步,如果你有 acrobat 9 的话,可以很直观地调节,Document / Crop Pages。调整好后保存,然后用 vim 之类的编辑器打开 PDF 文件,查找 /Cropbox 这个语句,它后面会有一个参数表,比如:[72.0 441.0 478.28 769.89]。复制下来,然后在 preamble 中添加一句:
\usepackage[dvipsone,pdfpagescrop={72.0 441.0 478.28 769.89},]{hyperref}
以后编辑的时候就无须再用pdfcrop来剪裁了。

另外,楼下的 milksea 说应该使用 geometry 宏包,的确,那才是正统的方式。中文说明可以看 CTeX 上的文档 http://www.ctex.org/documents/packages/ ... ometry.htm(要设置一下驱动选项)。此外还有简单一些的 zwgetfdate 宏包等,都可以对页面进行调整。上面使用的只是能实现效果的一种途径(可能很蹩脚),所谓 there is more than one way to do it。如有不当或没说清楚,请见谅,仅仅是个演示,重要的是 XeTeX 的安装和中文字体的设置。
上次由 runpin 在 2009-06-14 17:55,总共编辑 23 次。
头像
zhan
帖子: 1880
注册时间: 2005-08-15 0:04
来自: 南7技校

Re: 用xetex排排文章

#2

帖子 zhan » 2008-11-20 14:10

不错,同时推荐下宏包 xeCJK,
还有安装方式可以采用网络安装,以及安装之后的升级等工具的使用,提到就好了,看起来可以和我的那篇文章互补。

http://zhan.blog.ubuntu.org.cn/2008/10/ ... %E7%BD%AE/
飞得高,飞得低,学习再学习,多少大秘密!
http://zhan.blog.ubuntu.org.cn
头像
runpin
帖子: 647
注册时间: 2005-09-29 11:13
来自: Boston, MA

Re: 用xetex排排文章

#3

帖子 runpin » 2008-11-20 15:50

谢谢zhan,你blog的文章我刚刚也拜读了,等忙完手头的活儿我再来修改一下。谢谢。
头像
zhan
帖子: 1880
注册时间: 2005-08-15 0:04
来自: 南7技校

Re: 用xetex排排文章

#4

帖子 zhan » 2008-11-20 15:59

把以前的置顶 texlive 的帖子给下了,都脱离时代一些时间了。这个不错,跟得上时代,就置顶了。

这个帖子好好维护下,相应的可以将题目改下(更具有引导性)。runpin 辛苦了。
飞得高,飞得低,学习再学习,多少大秘密!
http://zhan.blog.ubuntu.org.cn
头像
runpin
帖子: 647
注册时间: 2005-09-29 11:13
来自: Boston, MA

Re: 图解Texlive2008的安装和XeTeX的简单中文排版

#5

帖子 runpin » 2008-11-20 19:41

呵呵,谢谢老大,我又添了些内容,主要是你提到的xeCJK和遗漏的一些内容,修改了下标题。附件最多10个,所以有些琐碎的没贴上。剩下要补充的,我抽空再来。水平有限,万望包涵。
头像
eagle5678
帖子: 1865
注册时间: 2006-07-08 14:07

Re: 图解Texlive2008的安装和XeTeX的简单中文排版

#6

帖子 eagle5678 » 2008-11-22 17:00

pdf那个文件,有附件下载吗 :em04

这样做出来的pdf能不能搜索?

我用pdflatex的,可copy,书签中文,不能搜索…… :em20
头像
runpin
帖子: 647
注册时间: 2005-09-29 11:13
来自: Boston, MA

Re: 图解Texlive2008的安装和XeTeX的简单中文排版

#7

帖子 runpin » 2008-11-22 17:48

eagle5678 写了:pdf那个文件,有附件下载吗 :em04

这样做出来的pdf能不能搜索?

我用pdflatex的,可copy,书签中文,不能搜索…… :em20
哎呀,气死,源文件找不着了,只好重做一份给你:
jpm_new.pdf.tar.gz
(371.19 KiB) 已下载 1371 次
搜索没有问题,我发两张图你看看,第二张是搜索千古名句“二八佳人体似酥“的结果:
这是源文件
这是源文件
附件
acrobat reader 中搜索
acrobat reader 中搜索
头像
zhan
帖子: 1880
注册时间: 2005-08-15 0:04
来自: 南7技校

Re: 图解Texlive2008的安装和XeTeX的简单中文排版

#8

帖子 zhan » 2008-11-23 14:01

嘿嘿,我怕楼上的楼上想要的是金瓶梅全本吧。。。

楼主有空把 tlmgr 的用法相关的也增加上去吧,安装了 perl-tk 之后, tlmgr 也是有界面的,安装升级方便了,也不用
每次都跟着追 texlive2009 texlive2010 什么的了。。
飞得高,飞得低,学习再学习,多少大秘密!
http://zhan.blog.ubuntu.org.cn
头像
makeday1984
帖子: 61
注册时间: 2007-12-11 15:02

Re: 图解Texlive2008的安装和XeTeX的简单中文排版

#9

帖子 makeday1984 » 2008-11-23 16:41

留个脚印!
freester
帖子: 11
注册时间: 2008-09-22 18:22

Re: 图解Texlive2008的安装和XeTeX的简单中文排版

#10

帖子 freester » 2008-11-24 10:21

:em11 太好了,谢谢!
tamsun
帖子: 451
注册时间: 2006-07-07 21:07

Re: 图解Texlive2008的安装和XeTeX的简单中文排版

#11

帖子 tamsun » 2008-11-24 10:35

请问lz是否有一些适合论文用的模板?
比如带封面,目录,内容,参考文件的一个整套模板?
leeyee
帖子: 723
注册时间: 2006-04-11 9:01

Re: 图解Texlive2008的安装和XeTeX的简单中文排版

#12

帖子 leeyee » 2008-11-24 11:51

好帖好帖,看来是时候考虑把我的texlive2005给换掉了! :em05
I would love to change the world, but they won't give me the source code.
http://hi.baidu.com/wienerlee
头像
runpin
帖子: 647
注册时间: 2005-09-29 11:13
来自: Boston, MA

Re: 图解Texlive2008的安装和XeTeX的简单中文排版

#13

帖子 runpin » 2008-11-24 17:38

谢谢几位捧场,zhan香主的提议等我空出手来就加上。tamsun嘛就有些为难了,我这里没啥好的模板,都是google来的,推荐你到“LaTex编辑部”(http://zzg34b.w3.c361.com/),那里有些模板,网上应该很多的,http://bbs.ctex.org更是不错的地方。
tamsun
帖子: 451
注册时间: 2006-07-07 21:07

Re: 图解Texlive2008的安装和XeTeX的简单中文排版

#14

帖子 tamsun » 2008-11-24 17:50

是这样的,虽然用LaTeX也不少时间了,不过都是拿别人来的模板自己填填内容而已,呵呵。
所以我不清楚XeTeX和LaTeX的关系是什么,如果原来写的东西(用LaTeX写的),也可以XeTeX编译通过,那是最好不过了。
头像
runpin
帖子: 647
注册时间: 2005-09-29 11:13
来自: Boston, MA

Re: 图解Texlive2008的安装和XeTeX的简单中文排版

#15

帖子 runpin » 2008-11-24 18:39

你的问题涉及三个概念:语言(language)、引擎(engine)和宏包(macro)。概念上:

语言:基本排版标识(指令),这些指令可以组合为宏(类似于批处理命令)。
引擎:语言的解释器,把排版的命令翻译成机器识别的二进制代码,而后再反向输出结果(文档)。
宏包:宏的集合。

那么相对应的TeX术语就是:

语言:TeX的排版标识(指令)
引擎:TeX(最早的TeX解释器)、PDFTeX、XeTeX、LuaTeX等等
宏包:plain TeX、AMS-TeX、LaTeX、LAMS-TeX、ConTeXt等等

我们使用xelatex编译文件的时候,实际上是调用了XeTeX引擎来处理使用LaTeX宏包所写的源文件,所以也就没有是否可以编译通过的问题了。当然了,以前的CJK宏包的指令就不需要了。我的理解就是这样。
回复