OA办公软件与PDF文件联系紧密,PDF格式的文件也是办公人员必须掌握的!  设为首页 加入收藏夹 我来推荐 
您的位置:首页 > PDF应用技术 > PDF其他应用
PDF其他应用
LaTeX生成嵌入所有字体的Pdf文件(Windows+MiKTeX)
日期:2011-9-23 9:58:22 人气: 标签:

  问题:LaTeX生成嵌入所有字体的Pdf文件(Windows+MiKTeX)

  用惯了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 -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\texmf\miktex\bin\platex.exe

  第二步:用dvips将DVI文件转成ps文件。

  在"后处理"postprocessor里面,添加一项(可命名为dvips)

  Excutable: C:\CTeX\texmf\miktex\bin\dvips.exe

  Argument:-P pdf -G0 -j0 "%Bm.dvi"

  第三步:用ps2pdf转成pdf。

  在“后处理”postprocessor里面,继续添加一项(可命名ps2pdf)

  Excutable: C:\CTeX\gs\gs8.51\bin\gswin32.exe

  Argument:-sPAPERSIZE=a4 -dSAFER -dBATCH -dNOPAUSE -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\texmf\miktex\bin\platex.exe

  第二步:用dvipdfmx将DVI文件转成pdf文件。

  在"后处理"postprocessor里面,添加一项(可命名为dvipdf)

  Excutable: dvipdfmx.exe

  Argument:"%Bm.dvi"

  第三步:由于dvipdfmx不提供直接的命令行参数,需要修改dvipdfmx的配置文件。

  文件位置可能是: C:\CTeX\localtexmf\dvipdfm\config\dvipdfmx.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就行了。

  以上尝试仅针对英文字体,中文的以后用到的时候再实验吧。

  等等。这些文章中的解决方案有些需要重新下载专用的字体子集库,有些需要繁琐的配置文件或输入复杂的命令格式,耗时耗力且不一定可行。我尝试了另一种新的快速易行的解决方法,非常成功,现分享给大家:

  我使用了CTex这款软件进行文件的编排布局,在经菜单栏TeX中的TeXify->dvips->pspdf等步骤后生成了pdf文件,此时的pdf文件未嵌入所有字体【点击pdf文件中的文件->属性->字体即可查看】,如下图所示

共有条评论信息评论信息
栏目分类

站点说明 | 站点导航 | 站点公告 |
OAPDF.COM版权所有 2009 V1.1