用惯了LaTeX写论文,很喜欢这种做事的风格:把一件事情分成许多小任务,每个任务交给一个或者几个工具去做,一系列工作流下来,就得出很perfect的结果来。这种基于Unix的处世哲学很受用,而且动不动要用命令行去完成许多事情,需要修改配置文件等,乍看上去很深奥很酷,虽然自己也不是很懂,偶尔给人炫耀一下,自己也会比较膨胀……可是,我又只是个半吊子的Unix迷,很多事情还是得依靠Windows操作系统。比如,LaTeX系统还是习惯用Win下的MiKTeX包。毕竟,在Windows系统下,靠着拿着鼠标在屏幕上东点点西点点,就差不多能完成大部分工作了。鱼与熊掌不可兼得,Windows下把许多工作包装到了图标和快捷方式下,也同时失去了许多原本命令行丰富的五花八门的参数的定制特性。比如,把TeX源文件转化到pdf输出文件的过程,有许多方式,每种方式有若干步骤、每个步骤有若干可调节参数……要弄明白可真不容易。为了生成的pdf能跨平台阅读(既可以在Win下正确显示,又要在Unix/Linux等下,还要在MacOS等下显示),文件的一个比较常用的需求是把所有字体嵌入(Embedded fonts)。在Unix/Linux下,可以看文档使用相应的命令行参数,其实,在Windows下面,也可以用这些相应的参数的。相应的参数放到哪里去呢?一般的LaTeX系统,大都是把ps文件用Ghostscript转换成pdf的。可以用下面的命令行参数来将所有字体嵌入:gs -sPAPERSIZE=a4 -dSAFER -dBATCH -dNOPAUSE -dCompatibilityLevel=1.4 -sDEVICE=pdfwrite -dPDFSETTINGS=/printer -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true -sOutputFile="%bm.pdf" -c save pop -f "%bm.ps"在Windows下,LaTeX集成编辑工具可以用共享软件TeXnicCenter,也可以用版权软件WinEdt。它们都可以定制相应的命令行参数。下面以TeXnicCenter为例(WinEdt可比照修改)。在Build菜单下面有"Define Output Profiles",里面一般有几个profile(如果没有,使用Wizard生成。一般TeXnicCenter安装后第一次运行会提示生成)。LaTeX=>PS=>PDF,第一步:将TeX源文件用LaTeX等工具转化为DVI文件; 可以使用默认值,如C:CTeX exmfmiktexinplatex.exe第二步:用dvips将DVI文件转成ps文件。 在"后处理"postprocessor里面,添加一项(可命名为dvips) Excutable: C:CTeX exmfmiktexindvips.exe Argument:-P pdf -G0 -j0 "%Bm.dvi"第三步:用ps2pdf转成pdf。 在“后处理”postprocessor里面,继续添加一项(可命名ps2pdf) Excutable: C:CTeXgsgs8.51ingswin32.exe Argument:-sPAPERSIZE=a4 -dSAFER -dBATCH -dNOPAUSE -dCompatibilityLevel=1.4 -sDEVICE=pdfwrite -dPDFSETTINGS=/printer -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true -sOutputFile="%bm.pdf" -c save pop -f "%bm.ps"如此,大功告成。也可以将TeX文件经DVI使用dvipdfmx转成PDF。新建一个profile: LaTeX=>DVI=>PDF,第一步:将TeX源文件用LaTeX等工具转化为DVI文件, 可以使用默认值,如C:CTeX exmfmiktexinplatex.exe第二步:用dvipdfmx将DVI文件转成pdf文件。 在"后处理"postprocessor里面,添加一项(可命名为dvipdf) Excutable: dvipdfmx.exe Argument:"%Bm.dvi"第三步:由于dvipdfmx不提供直接的命令行参数,需要修改dvipdfmx的配置文件。 文件位置可能是: C:CTeXlocaltexmfdvipdfmconfigdvipdfmx.cfg 这个文件里面提供了生成pdf文件的权限(permission)等的配置,还提供了生成pdf所用到的最终gs命令行参数。对于Windows系统特定的LaTeX环境MiKTeX而言,是这样的:%% GhostScript (MiKTeX):D "mgs -q -dNOPAUSE -dBATCH -sPAPERSIZE=a0 -sDEVICE=pdfwrite -dCompatibilityLevel=1.3 -dAutoFilterGrayImages=false -dGrayImageFilter=/FlateEncode -dAutoFilterColorImages=false -dColorImageFilter=/FlateEncode -dUseFlateCompression=true -sOutputFile=%o %i -c quit" 原来MiKTeX使用了一个叫mgs的命令完成这一步的,它的参数几乎和gs一样,添加相应的参数变,成下面的这句话,就可以将达到嵌入所有字体的效果了。D "mgs.exe -sPAPERSIZE=a4 -dSAFER -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -dPDFSETTINGS=/printer -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true -dCompatibilityLevel=1.4 -dAutoFilterGrayImages=false -dGrayImageFilter=/FlateEncode -dAutoFilterColorImages=false -dColorImageFilter=/FlateEncode -dUseFlateCompression=true -sOutputFile="%o" "%i" -c quit"当然,这些步骤既可以互相组合,又可以完全拆分。比如,在写TeX源文件时,最常用的是只生成DVI进行检查,这个Profile就可以只包含latex命令就行了。需要查看pdf文件的时候,再转换一下查看。这时可以定义DVI=>PDF的Profile,仅包括上面第二步和第三步相应的postprocessor就行了。以上尝试仅针对英文字体,中文的以后用到的时候再实验吧。