Chinaunix首页 | 论坛 | 博客
  • 博客访问: 540717
  • 博文数量: 51
  • 博客积分: 8000
  • 博客等级: 中将
  • 技术积分: 1040
  • 用 户 组: 普通用户
  • 注册时间: 2006-10-28 17:26
文章分类

全部博文(51)

文章存档

2011年(1)

2010年(20)

2009年(27)

2008年(3)

我的朋友

分类: LINUX

2009-11-22 18:18:34

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


第一步、安装Texlive

我这里使用的是2008的DVD版(),可以全部安装,也可以挂载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


接着,会跳出一个图形窗口供选择安装:

附件:
文件注释: 初始化安装界面

install1.png [ 112.88 KiB | 被浏览 13091 次 ]



点击第四项“Language Collections“,取消不用的语言包,可以节省300兆的空间:

附件:

Screenshot-Language Collections.png [ 47.53 KiB | 被浏览 12818 次 ]



再选择最后一项“Create symlinks in system directories“,让安装程序自己来给我们创建语法链接:

附件:
Screenshot-Create symlinks in system directories.png
Screenshot-Create symlinks in system directories.png [ 3.16 KiB | 被浏览 22330 次 ]


附件:
Screenshot-Create symlinks in system directories-1.png
Screenshot-Create symlinks in system directories-1.png [ 6.59 KiB | 被浏览 22311 次 ]


最后的安装界面是这样的:

附件:

Screenshot-Install-tl.png [ 112.9 KiB | 被浏览 12653 次 ]



点击“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 [ 172.67 KiB | 被浏览 12748 次 ]



(一)安装zhspacing

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

1)到上下载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 [ 481.32 KiB | 被浏览 12669 次 ]



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

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

(二)安装xeCJK

另外,还有一个中文解决方案是使用xeCJK。可以到 上去下载(在第 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 [ 210.52 KiB | 被浏览 6843 次 ]



在 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 [ 317.04 KiB | 被浏览 6747 次 ]



这样就可以了,需要的文字会被显示在一个长宽适中的范围内。但是,页面周围的空白太多了,很不好看,所以要剪裁掉多余的 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 [ 338.12 KiB | 被浏览 6482 次 ]



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/layout/geometry.htm(要设置一下驱动选项)。此外还有简单一些的 zwgetfdate 宏包等,都可以对页面进行调整。上面使用的只是能实现效果的一种途径(可能很蹩脚),所谓 there is more than one way to do it。如有不当或没说清楚,请见谅,仅仅是个演示,重要的是 XeTeX 的安装和中文字体的设置。
 
还可以参考另外一篇文章
http://zhan.blog.ubuntu.org.cn/2008/10/ ... %E7%BD%AE/
阅读(2861) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~