跟寒门崛起类似的小说:希望PDF之家

来源:百度文库 编辑:偶看新闻 时间:2024/05/09 07:31:48

sphinx生成中文pdf的完整解决方案

发布日期:2009-7-31 作者:mindsbook 出处:http://blog.csdn.net/mindsbook

概述

由于自己使用 sphinx 作为自己的日常知识管理记录工具,所以除了有生成直观的 html 格式的需要外,还有作为便携的 pdf 格式的需求. 但是 sphinx 在生成中文pdf时存在一些问题, 而目前网上还没有一个非常系统的文档来用来解决这个问题.

本文主要是基于 Sphinx Project How-Tolatex学习笔记 这两篇文章的介绍来总结出 sphinx 生成中文pdf的完整解决方案.

系统要求

本文的操作环境为

  • Ubuntu 9.04
  • texlive2008

由于作者没有在其它环境下实验过,所以不保证,其它环境下也适用(但是 *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解决.

未解决的问题

  1. 粗体(当然latex本身对于中文是没有粗体的概念的,但是可以使用替代的 黑体 来模拟粗体, 未实现)
  2. 代码加亮(代码中如果有中文则,中文不能显示,可以参考 latex学习笔记 中的说明

原文地址:http://blog.csdn.net/mindsbook/archive/2009/06/05/4242442.aspx