本文由asciidoctor轉docbook,再由pandoc轉markdown而來
簡述
asciidoctor-pdf是Asciidoctor一個使用Prawn將asciidoc文檔轉換成pdf的插件,由Asciidoctor組織開發維護,托管在GitHub上,本文將簡單介紹下這個插件的使用,部分內容來源於官方。
安裝
使用gem安裝
$ gem install asciidoctor-pdf
語法高亮支持
Rouge (preferred, minimum version: 2.0.0)
$ gem install rouge
Pygments
$ gem install pygments.rb
CodeRay
$ gem install coderay
啟用語法高亮,只需要在.adoc文檔頭部填寫如下內容即可:
:source-highlighter: rouge
使用
基本命令,轉換asciidoc成為pdf
$ asciidoctor-pdf basic-example.adoc
$ # 這兩個命令是等效的,只不過上邊的命令更加簡潔
$ asciidoctor -r asciidoctor-pdf -b pdf basic-example.adoc
這里需要說明一下,如果文檔中包含中文,初次轉換的時候會出現亂碼的問題。解決方式請看中文亂碼問題章節。
我是占位符
后續新增內容區間
問題
中文亂碼問題
如果文檔中包含中文,初次轉換的時候會出現亂碼的問題。這里簡單介紹下asciidoctor-pdf的默認主題。如果查閱了asciidoctor-pdf的幫助文檔,就會知道他支持自定義主題的。中文亂碼的原因也是由於默認主題中使用了非中文字體導致的,需要添加中文字體。這里有兩種解決方式可供選擇:
- 創建項目/用戶主題
項目和用戶的創建方式一樣,不同的是二者存儲的位置不一樣,用戶的存儲在一個固定文件夾,比如~/.config/adoc,只要使用命令生成的時候填寫了正確的路徑即可。
-
在adoc所在文件下新建 fonts文件夾,將中文字體復制到 fonts文件夾中
-
復制asciidoctor-pdf安裝目錄中的
data/themes/default-theme.yml到當前目錄,或者新建一個 theme.yml -
編輯修改
default-theme.yml內容,主要節點:
font:
catalog:
song: # 宋體,請保證fonts文件中包含如下字體
normal: STSONG.TTF
bold: STSONG.TTF
italic: STSONG.TTF
bold_italic: STSONG.TTF
base:
# 設置字體
font_family: song
literal:
font_family: song
- 生成pdf
$ asciidoctor-pdf -a pdf-style=default-theme.yml -a pdf-fontsdir=fonts test.adoc
- 默認主題
查看../bin/asciidoctor-pdf源碼,看到他實際使用的是../../lib/asciidoctor/pdf.rb,我們再查看下這個ruby文件,發現這個又重新定位到../asciidoctor-pdf文件夾,即../lib/asciidoctor-pdf,其中包含了 theme_loader.rb,繼續查看這個文件,閱讀源碼之后,發現默認會先加載主題data\themes\base-theme.yml,如果這個不存在會加載data\themes\default-theme.yml,也就是說base-theme.yml的優先級比default-theme.yml高,我們需要更改base-theme.yml內容。主要修改內容同創建項目/用戶主題 章節是一樣的。修改完成之后,此后只需要執行:
$ asciidoctor-pdf test.adoc
或者我們可以修改default-theme.yml,或者創建自己的主題文件,此后生成需要指明主題文件:
$ asciidoctor-pdf -a pdf-style=default-theme.yml test.adoc
如果以上兩種解決方法不合你心意,那你可以參考下asciidoctor-pdf-cjk-kai_gen_gothic這個項目,這是一個asciidoc-pdf的主題項目,主要用於支持CJK [1],支持中文簡體、繁體、韓語、日語等。
[1] 中日韓統一表意文字(CJK Unified Ideographs)
