使用 Pandoc 创建电子书
从 1.6 版本开始,Pandoc 可以输出 EPUB 电子书格式。EPUB 电子书可以在 iPad、Nook 和其他电子书阅读器(包括许多智能手机)上查看。(它们也可以使用仅支持 GUI 的 KindlePreviewer 在 Windows 和 Mac OSX 上转换为 Kindle 电子书。KindleGen – 提供命令行界面并支持 Linux、Mac OSX 和 Windows – 已被弃用,但其二进制文件仍可在互联网上找到。)
这意味着现在创建电子书变得非常容易!我们来试试看。
一个简单的例子
使用文本编辑器创建一个名为 mybook.txt
的文件,内容如下:
% My Book
% Sam Smith
This is my book!
# Chapter One
Chapter one is over.
# Chapter Two
Chapter two has just begun.
要将其制作成电子书,只需一个命令:
pandoc mybook.txt -o mybook.epub
您可以将 mybook.epub
上传到您的电子书阅读器并试用。
请注意,如果您的 Markdown 文件包含本地图片链接,例如:

Pandoc 会自动将图片包含在生成的 EPUB 文件中。
一本真实的电子书
为了看看真实书籍的效果,我们来转换 Scott Chacon 的书籍 Pro Git,这本书是他使用 Pandoc 的 Markdown 变体编写的,并以 知识共享 许可发布。(如果您使用这本书,请考虑 购买一份 以支持他出色的工作。)
您可以在其 GitHub 站点 上找到该书的 Markdown 源文件。我们来获取整个仓库的副本:1
git clone https://github.com/progit/progit.git
这个命令将在您的机器上创建一个名为 progit
的工作目录。该书英文版的实际 Markdown 源文件位于 en
子目录中,所以首先切换到该目录:
cd progit/en
如您所见,每个章节都是其自身目录中的一个文本文件。Chacon 对这些文件进行了一些后处理,例如插入图片。这是一个图 1-1 的占位符,例如:
Insert 18333fig0101.png
Figure 1-1. Local version control diagram.
实际的图片文件名为 18333fig0101-tn.png
,并位于仓库的 figures
子目录中,您可以进行验证。
为了演示目的,我们想要纯 Markdown 文件,所以让我们将这个占位符更改为 Markdown 图片链接。Pandoc 会将包含单个图片的段落视为带有标题的图,这正是我们想要的:

我们可以使用 Perl 一行命令在所有文件中进行此更改:
perl -i -0pe \
's/^Insert\s*(.*)\.png\s*\n([^\n]*)$/!\[\2](..\/figures\/\1-tn.png)/mg' \
*/*.markdown
这将就地修改文件。(我们不必担心备份它们;如果我们弄乱了,可以使用 git reset --hard
恢复原始文件。)
好的!现在我们几乎准备好制作电子书了。我们有了章节,每个章节都在自己的文件中,但我们仍然需要一个标题。创建一个名为 title.txt
的文件,其中包含一个 Pandoc YAML 元数据块:
---
title: Pro Git
author: Scott Chacon
rights: Creative Commons Non-Commercial Share Alike 3.0
language: en-US
...
有关这些字段的更多信息,请参阅用户指南。
现在运行 Pandoc 来制作电子书,使用我们的标题页和修改后的章节文件作为源:
pandoc -o progit.epub title.txt \
01-introduction/01-chapter1.markdown \
02-git-basics/01-chapter2.markdown \
03-git-branching/01-chapter3.markdown \
04-git-server/01-chapter4.markdown \
05-distributed-git/01-chapter5.markdown \
06-git-tools/01-chapter6.markdown \
07-customizing-git/01-chapter7.markdown \
08-git-and-other-scms/01-chapter8.markdown \
09-git-internals/01-chapter9.markdown
就这样!电子书 progit.epub
已准备好上传到您的阅读器。
更改格式
您可以使用 --css
选项为书籍指定 CSS 文件。默认 CSS 是最简单的,可以在 GitHub 上 或在您数据目录中的 epub.css
文件中找到(请参阅用户指南中的 --data-dir
)。
如果需要,您甚至可以将字体嵌入到 EPUB 中;请参阅用户指南中 --epub-embed-font
部分的说明。
数学公式
Pandoc 有一个 EPUB3 写入器。它将 LaTeX 数学公式渲染成 MathML,EPUB3 阅读器应该支持(但遗憾的是很少有支持)。
当然,如果您想要 EPUB2 输出 (pandoc -t epub2
) 或目标阅读器不支持 MathML,这帮助不大。那么您有两个选择:
GladTeX 和 WebTeX 都会将公式的 LaTeX 源作为图片的替代文本添加,从而提高盲人用户的可访问性。