概述由于自己使用 sphinx 作为自己的日常知识管理记录工具,所以除了有生成直观的 html 格式的需要外,还有作为便携的 pdf 格式的需求. 但是 sphinx 在生成中文pdf时存在一些问题, 而目前网上还没有一个非常系统的文档来用来解决这个问题. 本文主要是基于 Sphinx Project How-To 和 latex学习笔记 这两篇文章的介绍来总结出 sphinx 生成中文pdf的完整解决方案. 系统要求本文的操作环境为 由于作者没有在其它环境下实验过,所以不保证,其它环境下也适用(但是 *nix)应该是差不多的. 具体的操作过程安装texlive2008推荐使用 install-tl 来进行网络安装. 具体步骤为: - 下载 install-tl , 可以在这个网站下载 USTC oss
- 在命令行下使用 install-tl -location http://oss.ustc.edu.cn/CTAN/systems/texlive/tlnet/2008/ 来进行网络安装 (这个过程依赖于你的网速,可能会10分钟到1个小时不等,我用的教育网,20分钟搞定)
生成相关字体这个过程主要是使 texlive 支持中文(utf8, 当然sphinx默认是使用utf8的), 可以参考 这里 来完成. 具体的步骤为: 安装fontforge: sudo apt-get install fontforge 在主目录下生成 font文件夹,即 mkdir ~/font 下载 所需要的文件 font.tar.bz2 解压到 font 文件夹下 将相应的字体拷贝到font下,我是将windows下的simsun拷过来了 cd ~/font time fontforge -script subfonts.pe simsun.ttc song Unicode.sfd (生成相关的字体地图, 可能会需要较长的时间) 建立一个内容为下面的名为 makemap 的文件: for i in *.tfm do cat >> song.map << EOF ${i%.tfm} ${i%.tfm} < ${i%.tfm}.pfb EOF done
./makemap 执行 建立一个内容为下面的名为 c70song.fd 的文件: % This is c70song.fd for CJK package. % created by Edward G.J. Lee % modify by Yue Wang \ProvidesFile{c70song.fd} \DeclareFontFamily{C70}{song}{\hyphenchar \font\m@ne} \DeclareFontShape{C70}{song}{m}{n}{<-> CJK * song}{} \DeclareFontShape{C70}{song}{bx}{n}{<-> CJKb * song}{\CJKbold} \endinput
执行下面的命令 mkdir -p ~/.texmf-var/fonts/map/dvips/CJK mkdir -p ~/.texmf-var/fonts/tfm/CJK/song mkdir -p ~/.texmf-var/fonts/type1/CJK/song mkdir -p ~/.texmf-var/tex/latex/CJK/UTF8
cp ~/font/song.map ~/.texmf-var/fonts/map/dvips/CJK cp ~/font/*.tfm ~/.texmf-var/fonts/tfm/CJK/song cp ~/font/*.pfb ~/.texmf-var/fonts/type1/CJK/song cp ~/font/c70song.fd ~/.texmf-var/tex/latex/CJK/UTF8
刷新缓存,使其生效 sudo texhash updmap --enable Map song.map
然后可以测试下安装的 song 体是否可用. 建立一个名为test.tex内容为下面的文件: \documentclass{article} \usepackage{CJKutf8} \begin{document} \begin{CJK}{UTF8}{song} 你好!这里是Ubuntu下的TexLive+CJK环境! \end{CJK} \end{document}
执行生成 Pdf的命令 pdflatex test.tex evince test.pdf
如果生成的中文没有乱码,则说明安装正确,可以进入下一步,否则请检查之前的操作
使用texlive和sphinx来生成中文的pdf具体的步骤为: 生成文档的latex(使用sphinx的相关命令生成) 在生成的latex目录下,拷贝两个文件, ttfucs.sty 和 utf8ttf.def 可在 Unicode text with Pdflatex 下载 更改生成的latex文件,可更改如下(使用下面的内容替换tex文档中直至title这前的部分): % Generated by Sphinx. \documentclass[letterpaper,10pt]{manual} \usepackage[utf8ttf,utf8]{inputenc} \usepackage{ttfucs} \usepackage{CJKutf8} %可以去掉 \usepackage[T1]{fontenc} % \usepackage{babel} \usepackage{times} \usepackage[Bjarne]{fncychap} \usepackage{sphinx}
\usepackage{hyperref} % 书签 \usepackage{fontspec} % 以下是xelatex的一些包 \usepackage{xunicode} \usepackage{xltxtra} \usepackage{verbatim} \setsansfont{SimSun} % 选择系统字体, fc-list查看
当前系统可用的字体, 我使用的是 SimSun 宋体 \setromanfont{SimSun} % 选择系统字体, fc-list查看 \XeTeXlinebreaklocale "zh" \XeTeXlinebreakskip = 0pt plus 1pt
执行命令 xelatex xx.tex 中间可能会有错误,先不用管, 先查看生成的pdf是否符合自己的预期 注意:在生成pdf时可能需要 执行再次 xelatex xx.tex 来生成相关的书签
结束至此一个完整的sphinx中文pdf生成方案完成了,如果中间有什么小的问题,可以自行google解决. 未解决的问题- 粗体(当然latex本身对于中文是没有粗体的概念的,但是可以使用替代的 黑体 来模拟粗体, 未实现)
- 代码加亮(代码中如果有中文则,中文不能显示,可以参考 latex学习笔记 中的说明
原文地址:http://blog.csdn.net/mindsbook/archive/2009/06/05/4242442.aspx |