使用txt2tags制作PDF文档

2011年03月08日 14:01

(本文收录于[go4pro.org]

一直很不喜欢使用Word做文档制作工具。除了平台相关性太严重之外,二进制文件也给版本管理带来了很多麻烦。于是这次在新的项目里,就尝试使用格式化文本制作工具。

选工具的时候,在asciidoctxt2tags之间犹豫了一下。最终选择了txt2tags。有几个理由:

  • asciidoc从功能上来说比txt2tags强大很多,但是强大的功能带来了写作时的不流畅感,你要在内容之外考虑太多的东西,非常不舒服。而且其实对于我写的大部分文档来说,txt2tags够用了。
  • txt2tags工具链配置简单,编译速度非常快。
  • txt2tags我之前用过,比较熟悉。

txt2tags的语法规则其实没几条,去网站上看一下,10分钟就可以学会了。所以这一点我就不罗嗦了。txt2tags可以直接产生网页,我之前的很多文档也是用它写的。这个也没什么好说。

但是公司文档用html一个是不方便,另外一个也显得太不正式。所以,我需要一个工具链,来把它转换成PDF。

txt2tags不支持直接到PDF的转换,但是它可以转换成很容易生成pdf文件的latex格式。所以我就非常自然的想走 txt2tags -> latex -> PDF 这条路了。

首先去下载了了一个CTEX安装包,避免在latex中文问题上做过多的纠缠。

然后将txt2tags文件转换成latex文件:

python "d:\Program Files\txt2tags-2.6\txt2tags" -t tex README_deploy.t2t

没错,Windows下就是这么麻烦,在Linux下简单很多:

txt2tags -t tex README_deploy.t2t

就行了。不过还好我们可以写脚本,这个下面再提。

这样会生成 README_deploy.tex 文件,但是这个文件默认是无法编译的,因为里面没有引用中文的相关包。所以我们需要对这个tex文件做一些预处理。我写了一个简单的python脚本来自动完成这件事:

#encoding:utf-8
import sys

# 在\usepackage{graphicx}的后面加上一行\usepackage{CJKutf8}
# 将\usepackage[urlcolor=blue,colorlinks=true]{hyperref}
#   替换成\usepackage[unicode,urlcolor=blue,colorlinks=true]{hyperref}
# 用于支持中文书签和目录
# 在\begin{document}的后面加上一行\begin{CJK}{UTF8}{song}
#   并加上\CJKcaption{zh-Hans}用于生成中文目录
# 在\end{document}的前面加上两行:\newpage(中文目录hack)和\end{CJK}

input_file, output_file = sys.argv[1:3]

content = open(input_file, "rt").read()
content = content.replace("\\usepackage{graphicx}", "\\usepackage{graphicx}\n\\usepackage{CJKutf8}")
content = content.replace("\\usepackage[urlcolor=blue,colorlinks=true]{hyperref}", "\\usepackage[unicode,urlcolor=blue,colorlinks=true]{hyperref}")
content = content.replace("\\begin{document}", "\\begin{document}\n\\begin{CJK}{UTF8}{song}\n\\CJKcaption{zh-Hans}")
content = content.replace("\\end{document}", "\\newpage\n\\end{CJK}\n\\end{document}")

open(output_file, "wt").write(content)

经过这样处理之后的tex,我们就可以使用pdflatex命令直接生成pdf了。

下面给出我用于这个文件的批处理脚本,有进一步的应用可以在这个基础上改进。

set PYTHON=d:\python27\python.exe
set TXT2TAGS="d:\Program Files\txt2tags-2.6\txt2tags"
set PDFLATEX="D:\CTEX\MiKTeX\miktex\bin\pdflatex.exe"

rem generate latex source file
%PYTHON% %TXT2TAGS% -t tex README_deploy.t2t

rem Patch tex file for Chinese support
%PYTHON% pdf_cjk_patch.py README_deploy.tex temp.tex
copy temp.tex README_deploy.tex
rm temp.tex

rem Generate PDF file
%PDFLATEX% README_deploy.tex

另外要注意的一点是,latex不支持“没有编号的章节”生成目录。所以在标识章节的时候,一定要记得用"+"而不是"="

4条评论

gravatar for MK
BS令狐,装个wiki,不就可以了,基本都有将该页下载为PDF的选项 MK (URL) - 2011年03月08日 15:05

gravatar for 令狐虫
wiki你怎么管理啊,难道为每个项目搭个wiki?然后天天记得备份数据库? 令狐虫 (Email) - 2011年03月08日 16:25

gravatar for Hwa
我处理日文和中文的文档都是用的xelatex,支持直接调用系统字体,哈哈,用Adobe Song Std比自带的宋体好看。CJK的红包很麻烦,之前一直都调不好。。 Hwa (Email) - 2011年03月28日 19:42

gravatar for 令狐虫
嗯,这些玩意确实蛮复杂的。有空在慢慢研究了。现在这样暂时够用。 令狐虫 (Email) - 2011年04月23日 00:16




Remember personal info?
Notify
Hide email
Small print: All html tags except <b> and <i> will be removed from your comment. You can make links by just typing the url or mail-address.
Design downloaded from free website templates.