2023年7月18日发(作者:)
由TEX/LATEX制作中文PDF檔李果正2005年5月30日目录1前言2工具准备2.1CJK套件......................................2.2pdfTEX系统....................................2.3hyperref套件....................................3字型安装3.1有关字型的一般注意事项..............................3.2本文所使用的字型.................................4制作流程4.4.4.4hyperref的设定...................................4.4.1hyperref的设定档..............................4.4.2hyperref的设定项目.............................5动手实作5.1文稿内的架构....................................5.2关于交互参照(cross-reference)...........................5.3网址超级链接(hyperlink)..............................5.4所见即所得?....................................6结语7授权声明666677899911112工具准备1前言ATEX/LTEX的指令繁复,许多朋友都视为畏途,如果不是常在使用,那真的是会很累人,但又爱其排版质量的精细优良,而且您大概没想到过,我还拿他排版音乐五线谱、棋谱、化学结构式......,实在是令人又爱又恨。但是有一个比较节省时间的法子,就是有空时就把一些常用的结构整理出来,或写一篇新的格式文章时,保留档案的结构,就好像是templet一样,要用到时再拿来填入文章即可,这不失是一种方便的方法。底下就是要介绍如何使用CJK1套件来制作中文的PDF檔。所使用的工具都是一般的ATEX/LTEX系统里头就有的,而不是要去买一套所费不赀的商业软件。当然,为达到细部质量的要求,有些套件可能需要更新一下,只要照着本文的指引去更新,应该是不会太复杂,现在不都流行DIY吗?A由于基本上由TEX/LTEX系统制作PDF文件,主要是由ps档来转的,除非是使用pdfTEX系统,因此以下所说的都是要使用Type1字型或TTF字型,最好不要使用pk点阵字型,否则,制作出来的PDF文件,质量会很差。22.1工具准备CJK套件如果您的CJK是4.2.0版的,那最好更新一下,可以到以下网址下载:ftp:///pub/cjk/devel/由于这是发展中的版本,可能一切都得手动。可参考所附说明把可执行档编译出来,取代系统原有的就可以了。重要的是$TEXMF/tex/CJK2目录下的档案要更换成新的,就是原始码的/texinput目录下的所有档案。更新CJK套件的目的是可以配合hyperref套件产生中文的bookmarks,这在以前是只有商业软件才能做到。而且,在Unix-like系统中尚无制作、阅览中文bookmarks的商业软件存在。A这是由WernerLemberg所开发的一个LTEX套件,专门用来排版中日韩文。2这是指Unix-like系统,一般是在/usr/share/texmf/tex/CJK目录下。在Windows系统下,那可能会在texmf/tex/latex/cjk目录下。122.2pdfTEX系统2工具准备2.2pdfTEX系统A这不仅仅是宏套件,而是一个TEX/LTEX的代替品,可以将*.tex檔,直接编译成PDF檔。这不更新也是可以,只是就无法直接取用TTF字型文件了。在原有系统中也是可以只更新pdfTEX,可以到以下网站下载各种平台的可执行档:/texlive/tlprod/Master/bin/别忘了一些必要的档案,例如,*.pool等,在覆盖原来的档案后,执行texconfiginit。可参考第3节的网页说明。以下为必要档案列表:表1:pdfTEX必要之档案列表档案*所在位置/usr/bin*/usr/bin/usr/bin/usr/bin/usr/share/texmf/web2c/usr/share/texmf/web2c/usr/share/texmf/tex/context/base/usr/share/texmf/tex/context/base/usr/share/texmf/tex/latex/graphics不同的distribution或OS会有不同的位置,例如Slackware是集中在$TEXMF/bin目录下。Windows系统的MiKTEX则会在texmfmiktexbin目录下。2.3hyperref套件这个宏套件主要是把PDF的一些功能嵌入*.tex档内。不更新也没关系,但就无法做出PDF檔中的中文bookmarks了。当然,中文的bookmarks还得配合新版的CJK套件才行。可在以下网址下载:ftp:///pub/tex/hyperref/版本一定要高于2002/04/12v6.72l否则会无法处理中文bookmarks。这个套件的原始作者是SebastianRahtz,目前是由HeikoOberdiek所维护。实际例子请参考第5节,相关设定可参考第4.4小节。33字型安装33.1字型安装有关字型的一般注意事项A这个部份请参考前曾发表的文章“使用pdfTEX/pdfLTEX让pdf档内嵌中文TTF/TTC”:/tips/latex/这里要补充的是,目前大概还有不少朋友还留有以前的Big-5码的TTF,这可以借由oto3这支程序来加入Unicdoename/cmaptable,这样就可以当做是Unicode字型来使用。不过,其中的map表,并不合我们使用的Big-5码中有关日文的部份,我做了个patch,只要patch里头的档就可以了,不必重编译程序,可在study-area网站下载:/tips/latex/h的方法如下:cd/usr/local/share/oto/|patch-s-p0为了要使用Type1字型,$TEXMF/dvips/最好是修改一下,加入以下各种设定(这里假设您的中文Type1或TTF字型都已安装、设定妥当):%%以下设定会预设使用BlueSky的Type1字型,等同于dvips的-Ppdf参数。p+%CM/AMSfontsp+%additionalsizesp+%%以下这个o要把前面的%拿掉,否则预设执行dvips会导向打印机。o如果不加这些设定,则要执行以下的指令代替:千万不要省略这个−G0参数,不然就得在$TEXMF/tex/dvips/中把G这个设定给%起来。这是一个古老的acroread的bug所产生的兼容性问题,目前的acroread应该不会有这种情形,加进去反而会有其它副作用。这支程序是由YaoZhang所开发,不使用其它函式库,是一个独立有用的小程序,以往的Big-5码TTF可借由这个程序加入Unicodetable后借尸还魂给X或ttf2pt1来使用343.2本文所使用的字型4制作流程3.2本文所使用的字型本文PDF格式所使用的字型都是自由软件或PublicDomain,非常感谢各提供的公司及个人,由于他们的热心,使得这篇档里里外外称得上是自由档。兹列表于表2:表2:本文PDF格式使用的字型字型文件名称*.pfb使用处字型名称提供者版权GPL-likeGPLGPLPublicDomain内文文鼎细上海宋文鼎公司内文标题王汉宗特明体王汉宗博士Title王汉宗粗钢体王汉宗博士内文英文字CMPSfontsBlueSkyResearch使用的转换程序是oto及ttf2pt1。如果是使用pdfTEX的话,可直接抓取TTF而不必转换成Type1。4制作流程A以下所讨论的方法应该是最常见的,当然TEX/LTEX的世界无奇不有(个人觉得,有点像perl的世界,一大堆的现成模块可以运用)。但以处理中文而言,除非是自行写程序,否则这应该算是最方便的现成方法了。以下的举例,都是以为例,也是本文写作的文稿文件名称。4.1dvips/ps2pdf这可说是最正统,最古老的方法了。最近由于Ghostscript的大幅改进,已经使这个制作方法愈来愈完美。Ghostscript要在6.51以上的版本才会有较佳的效果。AA这个方法其实就是一般TEX/LTEX制作的正常过程,由TEX/LTEX指令,得到*.dvi檔,再由dvips制作成*.ps檔,然后再由ps2pdf将*.ps档转成*.pdf檔。当然,处理中文而言,我们使用的是CJK套件,在Big-5码的话,指令是bg5latex。实际指令如下:其中ps2pdf13是指使用PDF-1.3的格式,建议使用这个格式,比上不足,比下有余。据个人的经验,使用这个方法制作来的PDF档,会大一些,但质量会比较好,而且,在使用gzip压缩后会比由dvipdfm或pdfTEX做出来的还要小,很奇怪吧!这也是本文的PDF54.2dvipdfm4制作流程格式的制作方法。不过,无论如何,本文中文字型是内嵌的,这样可移植性会比较好,但档案就会比较大了。4.2dvipdfm这个过程比第4.1小节的方法少了一个*.ps的步骤。dvipdfm会将*.dvi檔直接生成*.pdf檔。dvipdfm标榜的是忠于原TEX,但这样一来,可加入的PDF特性的功能就少了许多,可以依靠hyperref套件来做扩充的功能。实际执行指令如下:pdfmchpdf4.3ApdfTEX/pdfLTEXAhyperref套件虽然也可以加入不少的PDF特性,但pdfTEX/pdfLTEX可说是重写的软件,A可以当做TEX/LTEX来使用,并且加入相当多的PDF特异功能,如果目标是制作PDF档A的话,pdfTEX/pdfLTEX无疑是首选的工具。这个部份可以先参考第3节所指网页的说明,先能动再来谈应用。版本至少要0.14h以上的版本才能直接抓取TTF。A当然pdfTEX/pdfLTEX的详细功能,本篇文章并没有做详细说明,仅对有用到的功能略加解说。读者可以下载使用手册来参考。4.4hyperref的设定A以目前的情形而言,hyperref套件的使用范围可能会比pdfTEX/pdfLTEX还要广。他不仅可AA以配合原来的TEX/LTEX系统,也可以和pdfTEX/pdfLTEX合用,因此对这个套件有必要多了解一下。4.4.1hyperref的设定档原则上设定档是,使用hyperref套件时,一有用到其中的macro就是会找这个文件,其中找寻的顺序是:1.文稿中是否有设定,这是最优先使用的,会盖过其它设定。65动手实作2.目前的工作目录是否有。3.系统的默认值,如Unix-like的$TEXMF/tex/latex/hyperref/。WindowsMiKTEX系统中的$。4.4.2hyperref的设定项目这里以我自已的来说明:1hypersetup{backref,2dvips,3bookmarks=true,4pdfauthor=,5colorlinks=true,6breaklinks=true,7hyperfigures=true,8pdfstartview=FitH,9linkcolor=blue}基本上,原来文稿使用label/ref及目录、索引的部份就会自动可以交互参照。2是指定要用其它如dvipdfm,pdfTEX时更改这里的值,或设在文稿内。3是指要不要bookmarks,4是作者名字,在使用Xpdf会显示出来。5及9是设定超级链接的地方要不要显示颜色,及显示什么颜色。8是指使用acroread阅览这个PDF文件时的显示模式,例如,是FitWidth还是FitinWindow。这在Xpdf及gs/gv则没有这个功能来判断这个设定。这里设的是FitWidth,不过,这个是传参数给PDFView这个key,据个人的测试,似乎控制得不是很好。最后,请大家饶了我吧!不要把例子里头的阿拉伯数字也写进您的设定档里去了。4所附的pdfinfo指令执行后就会显示。或者使用acroread在菜单上叫出Documentinfo时也会显示,在PDF正文内则不5动手实作这个部份可说是本文的精华了,因为要加入PDF特有的功能,光靠传统的方法及工具是不够的,例如一些连结及bookmarks的功能,除非很了解PDF的一些instructions,自行由TEX的指令special来带入*.tex文稿中,但这样一来可就累了,本就够复杂的ATEX/LTEX语法,再加上PDF的指令,那一篇文章还没完成,大概就打退堂鼓了。先别紧Xpdf是由rg所开发的PDF阅览器,虽不若acroread功能那么完备,但在自由软件来说,是除了Ghostscript外的唯一“专业”PDF阅览器。475.1文稿内的架构5动手实作张,本文虽没有很深入的说明,但本文这个活实例,就是您的templet,直接拿来套用就对了!本文的实际文稿及完成后的PDF檔可在study-area网站下载:/tips/latex/p:///tips/latex/这样就可以一边看文章一边看实际的排版结果。其中由于加入了许多注解,因此显得比较乱,而且个人写*.tex文稿的习惯都是不内缩的,这点请大家忍耐一下。本文没有详细说明的部份,应该在的注解里头都会稍加说明。A当然,您必须具有最基本的LTEX排版的经验,例子中已经尽量采用较简单的方式,但有一小部份,为达到所需要的效果,还是不得不要用到特殊的套件。5.1123456文稿内的架构documentclass[12pt,a4paper]{article}usepackage{CJK}usepackage[dvips,CJKbookmarks]{hyperref}begin{document}begin{CJK*}{Bg5}{这里写文章78end{CJK*}end{document}重点在2及3的部份。这里如果要改用pdfTEX,那就得把dvips改成pdftex,由于我的已经设定好dvips,因此这里的dvips也是可以省略。而且注意这个CJKbookmarks,这就是让PDF能有中文bookmarks的设定,要不然因为标题的部份经过编码,最后如果没有还原的话就变成一堆乱码了。这里要特别感谢WernerLemberg及HeikoOberdiek的帮忙,解决了中文bookmarks的问题,是由Werner提出patch,然后Heiko做了一些修改后释出。当然,这在目前只能在Windows系统下的acroread才会看得到中文bookmarks,拿到Unix-like系统的acroread阅览则仍是一堆乱码,这是acroread的问题,而不是PDF档的问题。其它关于目录、交互参照、脚注、参考文献、索引......等等,只要使用了hyperref套件,便会自动处理,不必操心。但本文并没有谈到参考文献、索引的部份,这是更进阶的课题了,留待有机会再来探讨。85.2关于交互参照(cross-reference)5动手实作5.2关于交互参照(cross-reference)A基本上LTEX本身就有交互参照的指令可用,分别是label及ref,pageref,当然这只能显示,没办法由鼠标点了以后跳来跳去。也就是说只要使用hyperref套件,纵使没有加入新的tags,也是会有基本的文内连结功能。当然hyperref套件另有扩充这方面的功能。请参考表3:表3:交互参照功能说明以name来定位显示name之所在章节、图表显示name之所在页码以name来定位按hyperlink处,会跳至hypertarget所在之处套件ALTEX指令label{name}ref{name}pageref{name}hypertarget{name}{text}hyperlink{name}{text}hyperref5.3网址超级链接(hyperlink)AA这个在原本LTEX当然是没有的,TEX/LTEX是属于平面排版系统,网络上的应用是在PDF格式广为被使用后才开始有相关套件出现,这恐怕也是TEX系统能长久维持一定比例使用者的原因,弹性、功能都相当大,质量也有保证,较不容易被时间所淘汰。底下仍以图表的方式来说明比较清楚,请参考表4:表4:网址超级链接的方法套件pdfTEXhyperref寻址说明为了兼容性,请尽量直接使用hyperref的方式href{url}{text}连结至url所在处hyperref{url}{category}{name}{text}连结至url#{category}所在处连结至url所在处ALTEX2HTMLhtmladdnormallink{text}{url}5.4所见即所得?现在很流行“所见即所得”,这里不想引发任何争议或论战,只是目前个人使用的环境是GNU/Linux系统,我就说说我是怎么编译,怎么预视的。95.4所见即所得?5动手实作首先我开了两个终端机(rxvt),我的窗口管理程序是IceWM,我已经设定好由按键就可以在两个虚拟窗口间方便移动。使用的编辑器是Vim。在工作目录已写好了一个shscript称为compile其内容如下:#!/bin/shif[$#-ne1]thenecho"Usage:‘basename$0‘"exit1fiFNAME=$1rmtextmpbg5latex$FNAME&&bg5latex$FNAME&&dvips-ta4-Ppdf-G0${FNAME%.tex}&&ps2pdf${FNAME%.tex}.ps&&xpdf${FNAME%.tex}.pdf其中rmtextmp是另一个shscript,内容如下:#!/bin/shrm-f*.aux*.toc*.log*.dvi*.cjk*.out*.brf*.idx*.ind*.lof*.lot主要是去除一些暂时产生的档案,可置于路径可达之处,否则要指明路径。这里bg5latex要执行二次,是因为交互参照的部份要第二次编译时才会完成。左边由vim编辑了一段,想预视的话,马上移到右边执行:./就可以了,文稿不大,而且又使用Type1字型的话,速度是相当快的,而vim也可以由颜色来帮忙控制语法是否正确,当然前提是文稿的整个大结构要先建立好,否则编译容易发生错误而停下来。而大文稿本就应该切割成几个部份,由make,makefile来控制。当然要做到完全由vim来控制也是可以,这样会不会更方便就看个人所持的观点和习惯了。在Emacs编辑器(系统?)也有现成的preview-latex可以使用。不晓得这样子算不算是另类WYSIWYG?在我的经验里,这样的生产量是不会输给MSWord,尤其是文稿份量相当大,例如几百页的内容,至于细部微调控制那就更不用说了。甚至国人开发的cwTEX及ChiTEX目前都有相配合的GUI工具,相当方便,只可惜偏重在Windows系统上,在Unix-like系统上还是得双手万能一下。这里要提醒大家一下,TEX系统毕竟是幕后排版系统。而且,排版是一门审美艺术,大小细节要能掌握住,才能达到质的要求,我们要的不是WTGIWYG(WhatTheyGiveIsWhatYouGet)。106结语A好了,文章告一段落。我得事先声明,我不算是什么TEX/LTEX的专家,只是常在使用,会有一些使用上的心得,文章里头所说的不敢保证百分之百正确,但至少我是亲自实作过,如果有不正确的地方,希望大家提出指正。跟据我的说法去实作,如果有任何“意外”,那A我是不负责的。您不会认为看了这十页的内容就变成TEX/LTEX的专家了吧!千万不能有这种想法,学海无涯,一山还有一山高......。A另外,有许多朋友来信问到TEX/LTEX相关文件的问题,其实一般的TEX系统里头就会附上相当多的档,只是有些可能没有编译出来,是以*.tex或*.dvi的形式存在,只要动手把他们编译出来就成了。另外,一些*.sty檔里头都会有一些说明,这可是第一手数据喔!当然,这些都是英文,但只要找到相关的指令,照着指令的格式动手实验一下就成了。当然,现成的FAQ不能忘了:/faq至于中文书籍,新版本的确实不多,但吴聪敏教授的《cwTEX排版系统》一书应该相当具参考价值,这是个人手边重要的工具书之一,虽然说的是cwTEX但其实都差不A多,LTEX的语法是固定的,这本书网络上也可以下载。陈弘毅教授的ChiTEX系统也是有一些文件可以参考,也可以由网络上下载。CJK本身的话,所附的档也有中文的,就是,如果没有编译出来的话,自行改一下里头使用的中文字型,手动编译出来就是一篇CJK中文使用手册了。7授权声明c2002李果正yright
发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1689640593a273015.html
评论列表(0条)