reStructuredText 介绍
reStructuredText 是一门标记语言,与之类似的还有 markdown 等,它是编写python文档的主力语言。 我喜欢它主要是因为它的文本模式可读性很好,而且功能比markdown要强,另外也没有latex那么复杂。 通过docutils的支持还可以方便的转换成各种格式。
所以我一直使用它来写很多东西。比如你现在看到的这篇blog就是用它写的。
一个简单的rst文件
===== Title ===== Subject 1 --------- Subject 1.1 ~~~~~~~~~~~ - point 1 - point 2 table +--------------+-------------+ | Column1 | Value | +--------------+-------------+ | name | rst | +--------------+-------------+
rst转换成pdf的一些方法
reStructuredText可以很方便的转换成各种格式:
piglei2007@macbook-pro:rst_study$ rst2 rst2html.py rst2man.py rst2odt_prepstyles.py rst2pseudoxml.py rst2xetex.py rst2latex.py rst2odt.py rst2pdf rst2s5.py rst2xml.py
使用上面的的那些命令可以方便的把rst文件转换成各种格式,但是惟独没有pdf格式。
通过google我了解到有一位作者写了一个 rst2pdf 工具用来把rst转换成pdf文件,但是经过我的测试,这个工具 对于中文pdf的转换效果很糟糕,有很多排版上的问题。所以只能另找办法。
而pdf恰好是tex的强项,所以就有了一个曲线救国的办法,就是先把rst文件转换成xetex文件,然 后使用工具把xetex文件转换成pdf文件。
为什么不是latex
网上很多人会先把rst文件转换成latex文件,然后使用pdflatex工具转换出pdf。但是经过我的测试,使用 pdflatex转换出来的pdf文件字体非常的模糊,而且这个问题比较难得到解决,所以我换了xelatex,事实证明 xelatex格式转换出来的效果非常好,而且字体支持方面也比latex要强大很多。
PDF In Action
首先我们需要安装docutils模块
sudo pip install docutils
然后再安装 texlive ,texlive的安装过程需要网络的支持,建议选择一个比较快的镜像站。那样可以大大缩小 安装需要的时间。
安装过程中没有什么特别需要注意的,需要保持网络的通畅。安装完成后,我们需要把texlive的bin目录添加到 环境变量中。
修改~/.bashrc,添加如下行
PATH=$PATH:/usr/local/texlive/2012/bin/universal-darwin/
我使用的Mac os,所以你的目录可能会和我的有差别。
新建一个rst文件作为测试,这里我们使用这篇blog的rst文件,在转换之前我们先在当前目录下创建一个 docutils.conf文件和docutils.tex文件,定义我们使用的一些基本样式
$ cat docutils.conf [latex2e writer] documentclass: article documentoptions: 11pt,a4paper output-encoding: utf-8 stylesheet: docutils.tex $ cat docutils.tex \usepackage{fancyhdr} \pagestyle{fancy} \fancyfoot{} \usepackage{xeCJK} % 设置页面间距 \usepackage[top=1in, bottom=1in, left=1.25in, right=1.25in]{geometry} % 设置字体 \setCJKmainfont[BoldFont=SimHei, ItalicFont=KaiTi]{SimSun} \setCJKmonofont[Scale=0.9]{DejaVu Sans Mono} \setCJKfamilyfont{song}[BoldFont=SimSun]{SimSun} \setCJKfamilyfont{sf}[BoldFont=SimSun]{SimSun}
这里我设置了一些基本的字体大小,页面间距等内容。然后我们使用rst2xetex.py来将其转换为xetex文件:
rst2xetex.py restructuredtext_to_pdf.rst restructuredtext_to_pdf.xetex
然后使用xelatex工具来转换出pdf文件:
xelatex restructuredtext_to_pdf.xetex
注意
在使用xelatex转换过程过程中,很有可能因为字体不存在而报错,这个使用我们可以使用 fc-list :outline -f "%{family}n" 命令来列出系统中所有存在的字体,把字体替换充系统中存在的字体。 或者下载缺失的字体安装。
另外,使用rst2xetex.py会默认使用以下三种字体,在我的Mac系统中,前两种都找不到:
%%% Custom LaTeX preamble % Linux Libertine (free, wide coverage, not only for Linux) \setmainfont{Linux Libertine O} \setsansfont{Linux Biolinum O} \setmonofont[HyphenChar=None]{DejaVu Sans Mono}
这个时候需要删掉这三行(因为之后的docutils.tex会覆盖这三个字体设置),或者找到这两个字体,并安装上。 这里我附上这两个字体的地址:
- Linux Libertine O [.. ../texlive/2012/texmf-dist/fonts/opentype/public/libertine/]
- Linux Biolinum O [.. ../texlive/2012/texmf-dist/fonts/opentype/public/libertine/]
最后大功告成,附上最后生成的pdf文件: 点击查看
Enjoy reStructuredText and PDF!
😊 如果你喜欢这篇文章,也欢迎了解我的书: 《Python 工匠:案例、技巧与工程实践》 。它专注于编程基础素养与 Python 高级技巧的结合,是一本广受好评、适合许多人的 Python 进阶书。