Kitabu是一个Ruby编写的使用markdown语法制作电子书的框架。使用Prince PDF制作器,你能够获得高质量的PDF。它也支持Epub、Mobi、Text和HTML格式。
特点:
安装:
为了安装Kitabu,你需要安装Ruby 2.0+。安装好Ruby 2.0+后,运行下面的命令:
$ gem install kitabu
安装好Kitabu后,运行下面的命令来检查外部依赖项:
$kitabu check
如图:
这里没有硬性的要求;只需要确保你安装了想要导出电子书格式所需的依赖项即可。
用法:
创建新的电子书,运行:
$kitabu new wind(wind是书名)
这个命令会创建wind目录,结构如下:
config/kitabu.yml
文件会保存关于电子书的一些信息,所以你总会修改它。
现在,我们来书写电子书。所有电子书的内容都会放在text
文件夹中。Kitabu需要你将电子书按章节划分。一个章节只是一个保存许多文本文件的目录。框架会使用”文件夹/文件”语法格式来产生电子书。所以要使用有顺序的数字来作为名字,如下一个例子:
* text
* 01_Introduction
* 01_introduction.md
* 02_What_is_Ruby_on_Rails
* 01_MVC.md
* 02_DRY.md
* 03_Convention_Over_Configuration.md
* 03_Installing_Ruby_on_Rails
* 01_Installing.md
* 02_Mac_OS_X_instructions.md
* 03_Windows_instructions.md
* 04_Ubuntu_Linux_instructions.md
或者,如果你喜欢的话,可以每个文件当做一个章节:
* text
* 01_Introduction.md
* 02_What_is_Ruby_on_Rails.md
* 03_Installing_Ruby_on_Rails.md
你肯定想看一下进度,那么到了产生PDF的时候了;运行下面的命令,就会在output目录下产生电子书。
Kitabu基于h2-h6标签产生内容列表(Table of Contents),h1标签不使用,因为它是书的题目。
为了打印出TOC,你需要打印变量toc,使用eRb标签:
<%= toc %>
一.使用ERB(Embedded Ruby)
你也可以使用.erb
文件,你可以像下面这样混合使用markdown和HTML。
##This the chapter title
<% note do %>
Make sure you try .erb files!
<%end%>
以上的内容必须放在.erb文件中,产生的内容如下:
<div class="note info">
<p>
Make sure you try .erb files!
p>
div>
note
helper是内置的,可以接受不同的笔记类型。
<% note :warning do %>
Make sure you write valid ERB code.
<% end %>
二.语法高亮
为了使代码高亮,使用fenced code blocks(珊栏代码块)。
``` ruby
class User < ActiveRecord::Base
validates_presence_of :login, :password, :email
validates_uniqueness_of :login, :email
end
```
你甚至可以提供选项:
```php?start_inline=1&line_numbers=1
echo "Hello World";
```
使用Redcarpet
进行markdown处理;
使用Rouge进行语法高亮
运行以下的Redcarpet选项:
autolink
fenced_code_blocks
footnotes
hard_wrap
highlight
no_intra_emphasis
safe_links_only
space_after_headers
strikethrough
superscript
tables
三.使用自定义字体
你可以使用自定义的字体,只需要在fonts目录下添加即可(如果工程根目录下不存在时,可以创建一个)
然后,在templates/styles/pdf.scss
中,你可以添加@font-face
声明:
@font-face {
font-family: 'Open Sans Condensed Bold';
src: url('../fonts/OpenSans-CondBold.ttf');
}
最后,为了使用这个字体,像下面做法:
.chapter > h2 {
font-family: 'Open Sans Condensed Bold';
}