概述由于自己使用 sphinx 作為自己的日常知識(shí)管理記錄工具,所以除了有生成直觀的 html 格式的需要外,還有作為便攜的 pdf 格式的需求. 但是 sphinx 在生成中文pdf時(shí)存在一些問題, 而目前網(wǎng)上還沒有一個(gè)非常系統(tǒng)的文檔來(lái)用來(lái)解決這個(gè)問題. 本文主要是基于 Sphinx Project How-To 和 latex學(xué)習(xí)筆記 這兩篇文章的介紹來(lái)總結(jié)出 sphinx 生成中文pdf的完整解決方案. 系統(tǒng)要求本文的操作環(huán)境為 由于作者沒有在其它環(huán)境下實(shí)驗(yàn)過,所以不保證,其它環(huán)境下也適用(但是 *nix)應(yīng)該是差不多的. 具體的操作過程安裝texlive2008推薦使用 install-tl 來(lái)進(jìn)行網(wǎng)絡(luò)安裝. 具體步驟為: - 下載 install-tl , 可以在這個(gè)網(wǎng)站下載 USTC oss
- 在命令行下使用 install-tl -location http://oss.ustc.edu.cn/CTAN/systems/texlive/tlnet/2008/ 來(lái)進(jìn)行網(wǎng)絡(luò)安裝 (這個(gè)過程依賴于你的網(wǎng)速,可能會(huì)10分鐘到1個(gè)小時(shí)不等,我用的教育網(wǎng),20分鐘搞定)
生成相關(guān)字體這個(gè)過程主要是使 texlive 支持中文(utf8, 當(dāng)然sphinx默認(rèn)是使用utf8的), 可以參考 這里 來(lái)完成. 具體的步驟為: 安裝fontforge: sudo apt-get install fontforge 在主目錄下生成 font文件夾,即 mkdir ~/font 下載 所需要的文件 font.tar.bz2 解壓到 font 文件夾下 將相應(yīng)的字體拷貝到font下,我是將windows下的simsun拷過來(lái)了 cd ~/font time fontforge -script subfonts.pe simsun.ttc song Unicode.sfd (生成相關(guān)的字體地圖, 可能會(huì)需要較長(zhǎng)的時(shí)間) 建立一個(gè)內(nèi)容為下面的名為 makemap 的文件: for i in *.tfm do cat >> song.map << EOF ${i%.tfm} ${i%.tfm} < ${i%.tfm}.pfb EOF done
./makemap 執(zhí)行 建立一個(gè)內(nèi)容為下面的名為 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
執(zhí)行下面的命令 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
然后可以測(cè)試下安裝的 song 體是否可用. 建立一個(gè)名為test.tex內(nèi)容為下面的文件: \documentclass{article} \usepackage{CJKutf8} \begin{document} \begin{CJK}{UTF8}{song} 你好!這里是Ubuntu下的TexLive+CJK環(huán)境! \end{CJK} \end{document}
執(zhí)行生成 Pdf的命令 pdflatex test.tex evince test.pdf
如果生成的中文沒有亂碼,則說(shuō)明安裝正確,可以進(jìn)入下一步,否則請(qǐng)檢查之前的操作
使用texlive和sphinx來(lái)生成中文的pdf具體的步驟為: 生成文檔的latex(使用sphinx的相關(guān)命令生成) 在生成的latex目錄下,拷貝兩個(gè)文件, ttfucs.sty 和 utf8ttf.def 可在 Unicode text with Pdflatex 下載 更改生成的latex文件,可更改如下(使用下面的內(nèi)容替換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} % 選擇系統(tǒng)字體, fc-list查看
當(dāng)前系統(tǒng)可用的字體, 我使用的是 SimSun 宋體 \setromanfont{SimSun} % 選擇系統(tǒng)字體, fc-list查看 \XeTeXlinebreaklocale "zh" \XeTeXlinebreakskip = 0pt plus 1pt
執(zhí)行命令 xelatex xx.tex 中間可能會(huì)有錯(cuò)誤,先不用管, 先查看生成的pdf是否符合自己的預(yù)期 注意:在生成pdf時(shí)可能需要 執(zhí)行再次 xelatex xx.tex 來(lái)生成相關(guān)的書簽
結(jié)束至此一個(gè)完整的sphinx中文pdf生成方案完成了,如果中間有什么小的問題,可以自行g(shù)oogle解決. 未解決的問題- 粗體(當(dāng)然latex本身對(duì)于中文是沒有粗體的概念的,但是可以使用替代的 黑體 來(lái)模擬粗體, 未實(shí)現(xiàn))
- 代碼加亮(代碼中如果有中文則,中文不能顯示,可以參考 latex學(xué)習(xí)筆記 中的說(shuō)明
原文地址:http://blog.csdn.net/mindsbook/archive/2009/06/05/4242442.aspx |