淺談 reStructuredText 與 Sphinx

标签: 無分類雜文 | 发表时间:2011-08-18 05:18 | 作者:xdite khsing
出处:http://blog.xdite.net

sphinx.png

有朋友希望我談談這個主題。但因為最近非常忙碌,所以在這裡只能淺談,請見諒。

第一次學 Rails 就上手 」2011/8 月的版本包含了 PDF 版本以及 EPUB 版。
這次的版本不是改寫,而是「重新排版」。

這份書的初稿是用 Markdown 謄寫手排。而完稿則是用 Mac 上的軟體「Pages」手排。(你看,出書門檻不高吧 XD)

初稿編輯器是自己兜的(showdown + Rails backend ),讓自己能夠以很快的速度把書完成。

也許你會疑惑,為什麼我不用從頭用 Markdown 排版到底?

原因是:Markdown 不足以拿來出版書籍。

所以即便我是 Ruby Developer,最我還是選擇了 reStructuredText (python 開發者偏好格式)作為這次改版的主要格式。

出版電子程式書籍需要面對的問題

如果你想出版電子程式書籍。你將會遇到下列問題:

  1. 讀者希望出版商提供 PDF / EPUB / Mobi 三種無 DRM 版本。
  2. 必須在書中黏貼大量的程式碼以及加上 highlight。
  3. 必須張貼大量的示意圖片(可調整 Scale)。
  4. 必須有稍微複雜的表格。
  5. 除了基本的 Heading 、Ordered List,必須有 Warning / Note / Tips 以供參考。
  6. 如果章節過於冗長,必須能夠用巢狀文件書寫整理。

在這情況下,Markdown 就完全不夠用了。

當然,你也可以使用 Markdown 的 extension,但是只要是 extension ,就不免落入各自為政的情況。這對即便是我這種有能力實作 Markdown 出版系統的作者來說,也會是相當困擾的狀況。(介面的即時轉換,後端輸出成果)。

所以理想的狀況是,書籍的文件格式 必須在「基本格式」要能應付一定的複雜需求

最後我採用了 Sphinx + reStructuredText

排版與成果

  1. 支援 PDF 與 EPUB

pdf-and-epub.png

PDF 為 latex template

pdf-screenshot.png

EPUB 排程式碼也不錯看

epub-screenshot.png

  1. 可以黏貼大量的 console log / 程式碼 以及加上高亮顯示
  2. 張貼圖片
  3. 複雜表格(我還沒排過故目前無沒示意圖)

code-block.png
code-block-result.png

  1. 巢狀文件

nest-document-1.png

方便整理文件。可將文章或程式碼用 include 的方式嵌入。
在排版時不易黏膩糾纏

nest-document-2.png

  1. Warning / Note / Tips
  2. 自帶 HTML 格式

block.png

是否為一般出版者能夠使用的工具?

雖然 Sphinx 可以支援複雜的格式,滿足技術書籍出版的需求。
但相對的,它的技術需求對一般人也算高。

比如說:

  1. Sphinx 是純 command 操作,所以你必須要有 Unix 操作經驗
  2. Sphinx 是 python 寫成,所以如果有特殊需求或要 debug,需要一定程度的 python 能力去修改核心。
  3. PDF 是使用 latex 的 template 轉成,若轉出亂碼或想要更改排版格式需要一點程度的 tex 技巧。
  4. PDF hook 的 tex 轉換引擎,你必須有能力知道怎樣掛上 command line 能夠讓 Sphinx 呼叫。

而 reStructuredText 目前也沒有算好用的 WSYSG editor。重排的作業我是在 vim 上排版完成的。

結語

重排這本書花了我總共 1.5 個工作天。
比用 Pages 排版快了一點點。

Pages 也沒什麼不好,我想也是一般人堪用的工具,但程式碼與程式碼造成的浮動 box 在 epub 成品上目前會有嚴重的錯亂問題。目前無解。

這是我目前摸到現在的經驗,提供大家做參考。

如果你對出版電子技術書籍有興趣,歡迎寫信切磋討論: xuite.joke AT gmail.com ,或者是 http://twitter.com/xdite 找我也行。

我的 Google +Facebook 專頁

本文的 rst 原始版本在此: https://www.dropbox.com/s/cc6rwkn0pukn45v/01.rst 希望對大家有幫助。

====

廣告:如果你有興趣看轉出來的全部成果,可以順道購買 書:第一次學 Rails 就上手 – 7 天之內學會 Rails(USD $9.99)

排書之餘也學學 Ruby on Rails (誤)

相关 [restructuredtext sphinx] 推荐:

淺談 reStructuredText 與 Sphinx

- khsing - Blog.XDite.net
但因為最近非常忙碌,所以在這裡只能淺談,請見諒. 「 第一次學 Rails 就上手 」2011/8 月的版本包含了 PDF 版本以及 EPUB 版. 這次的版本不是改寫,而是「重新排版」. 這份書的初稿是用 Markdown 謄寫手排. 而完稿則是用 Mac 上的軟體「Pages」手排. (你看,出書門檻不高吧 XD).

文档与笔记利器reStructuredText和Sphinx

- Wick - 七星庐
关于制作文档和笔记这种事,我已经纠结了很久,网上解决方案也一大推,我试过几样,ScrapBook和Zotero,编辑不太方便,同步麻烦. Google Note过于格式简单,现在也不更新了,Google Docs又有点杀鸡用牛刀. 还有传得很神奇的Evernote跟Onenote,我压根没兴趣去用.

文档与笔记利器 reStructuredText 和 Sphinx

- timebug - Wow! Ubuntu
本文转载自七星庐 [ 原文:文档与笔记利器reStructuredText和Sphinx / 作者 muzuiget ]. 关于制作文档和笔记这种事,我已经纠结了很久,网上解决方案也一大推,我试过几样,ScrapBook 和 Zotero,编辑不太方便,同步麻烦. Google Note 过于格式简单,现在也不更新了,Google Docs又有点杀鸡用牛刀.

用Sphinx写书

- Mao.. - HYRY Blog
写技术书是一件十分费时费力的事情,作者不但需要编写有趣的内容,还需要用标准且美观大方的格式呈现内容. 在编写《Python科学计算》一书的过程中,我尝试使用Sphinx、Leo、MiKTeX等软件,拼凑出了一套适合编写技术书籍和文档的编写环境. 这本书是关于这个编写环境的一些介绍. 在线阅读版: http://hyry.dip.jp/sphinxbook.

sphinx分布式索引简介

- - haohtml's blog
sphinx分布式索引原理:. 当searchd收到一个对分布式索引的查询时,它做如下操作:. (在远程代理执行搜索的同时)对本地索引进行查询. 在应用程序看来,普通索引和分布式索引完全没有区别. 任一个searchd实例可以同时做为主控端(master,对搜索结果做聚合)和从属端(只做本地. 集群中的每台机器都可以做为主控端来搜索整个集群,搜索请求可以在主控端之间获.

开源搜索引擎评估:lucene sphinx elasticsearch

- - 鲁塔弗的博客
lucene系,java开发,包括 solr和 elasticsearch. sphinx,c++开发,简单高性能. 搜索引擎程序这个名称不妥当,严格说来应该叫做 索引程序(indexing program),早期主要用来做中文全文搜索,但是随着互联网的深入普及,各家网站规模越来越大,索引程序在 优化网站架构上发挥了更大的作用: 替代mysql数据库 内置的索引.

使用 Sphinx 更好地进行 MySQL 搜索

- - OurMySQL
MySQL 是一个出色的综合性数据库,但是,对于需要进行大量搜索的应用程序,考虑采用具体的搜索实用工具可能会更好一些. 本文章将 Sphinx(一个著名的全文本搜索包)视为 MySQL 的替代品,用它来进行搜索,提高非全文本搜索的速度. 本文章研究此更改中涉及的权衡方法和说明,演示一些具体测试,并考虑以通用方式使用 Sphinx 所需的内容.

[转] Sphinx SetGeoAnchor 经纬度查找附近地点

- - 互联网 - ITeye博客
原文地址 http://www.douban.com/group/topic/30286342. Sphinx 的 SetGeoAnchor方法,(LinkWith:http://sphinxsearch.com/docs/manual-0.9.9.html#api-func-setgeoanchor).

主流全文索引工具的比较( Lucene, Sphinx, solr, elastic search)

- - 企业架构 - ITeye博客
前几天的调研(  Rails3下的 full text search (全文本搜索, 全文匹配. ) ), 我发现了两个不错的候选: . lucene  (solr, elasticsearch 都是基于它) . 把看到的有价值的文章记录在这里: . 回答1.  Result relevance ranking is the default.