執筆用のChromebookにAsciiDocでコンテンツをビルドする環境をつくったときの備忘録です。 HTMLに変換するだけならわけないのですが、PDFに変換しようとすると日本語が文字化けしてしまう問題がありました。 ググってもかなり苦労したのと、Chromebook の Linux(Crostini) 環境での構築説明が見つからなかったのでメモを残します。 ChromeOS バージョンは Version 86.0.4240.77 (Official Build) (64-bit) です。
とりあえずは:
sudo apt get install asciidoctor
するだけで asciidoctor コマンドは入ります。
成果物としてHTMLだけをつくるつもりならこれでよいのですが、PDFも生成しようと思うと asciidoctor-pdf などが必要になり それらは apt では入らない(たぶん)ので 試行錯誤の上、結局 ruby と gem を使ってインストールしました。
apt で入れた方の asciidoctor は削除しましょう。 sudo apt remove asciidoctor
つまり、以下のようにしました。
sudo gem install asciidoctor
sudo gem install coderay
sudo gem install asciidoctor-pdf
coderay は ソースコード部分をシンタックスハイライトするものです。 これで asciidoctor と asciidoctor-pdf コマンドが入ります。
which asciidoctor
which asciidoctor-pdf
などして確認してみましょう。
カレントディレクトリに article.adoc というファイル名で以下の内容を用意。
= 転生したらInDesignだった件
Tomoaki Oshima <tomo.osima@gmail.com>
:doctype: article
:source-highlighter: coderay
:icons: font
== はじまりはいつも夜だった
かずやは今夜も眠い目をこすりながらディスプレイを睨んでいた。
[source,javascript]
----
var applyParagraphStyle = function(textFrame, paragraphIndex, fontSize){
if( paragraphIndex<textFrame.paragraphs.length ){
var paragraph = textFrame.paragraphs[paragraphIndex];
paragraph.pointSize = fontSize;
}
};
applyParagraphStyle(textFrame, 0, '24Q');<1>
----
<1> 最初の段落を指定して フォントサイズを 24Q に変更
ちなみに、source-highlighter を指定しているが、この方法では適用できなかった。コマンドオプションとして指定すれば適用できた。方法は後述。
asciidoctor -b html article.adoc -o article.html
asciidoctor-pdf article.adoc -o article.pdf
これでそれぞれの形式に変換はできるのだが、PDFは日本語部分が文字化けしてしまう。
このように:
それでどうしたら良いかと言えば、 https://github.com/asciidoctor/asciidoctor-pdf#support-for-non-latin-languages の説明の通り pdf-theme=default-with-fallback-font 指定すればとりあえずは回避できる。
つまり:
asciidoctor-pdf -a pdf-theme=default-with-fallback-font article.adoc -o article.pdf
これで日本語フォントが文字化けしないでPDF出力できました。 未確認ですが、事前に別途 Noto フォントをインストールしていたので、それがないと日本語が出ないかもしれません。
明示的に使うフォントを指定するなどは 別途 pdf theme 設定を yml で記述して指定するなど必要らしい。現状はそこまで把握していません。
その他、改行位置を調整してくれるなどの追加オプション scripts=cjk とか、PDF用紙サイズを指定するためオプション pdf-page-size=A5 を追加して、 最終的には変換コマンドは以下のようになりました。
asciidoctor-pdf -a scripts=cjk -a pdf-theme=default-with-fallback-font -a pdf-page-size=A5 article.adoc -o article.pdf
結果:
adoc 内で source-highligher として coderay 指定しているがうまく適用されない。 しかし、asciidoctor コマンドの引数として指定してやると難なく適用できました。
このように:
asciidoctor -a source-highlighter=coderay -b html article.adoc -o article.html
asciidoctor-pdf -a source-highlighter=coderay -a scripts=cjk -a pdf-theme=default-with-fallback-font -a pdf-page-size=A5 article.adoc -o article.pdf
なお coderay が対応している言語は coderay のサイト でご確認ください。
コマンドを毎回打つのが面倒なので、Makefile にまとめます。
sudo apt install make して make コマンドを入れておくことが必要です.
Makefile
papersize:=A5
highlighter:=source-highlighter=coderay
cjk:=scripts=cjk
pdftheme:=pdf-theme=default-with-fallback-font
all: html pdf
html: article.html
pdf: article.pdf
article.html: article.adoc
asciidoctor -a $(highlighter) -b html $< -o $@
article.pdf: article.adoc
asciidoctor-pdf -a $(highlighter) -a $(cjk) -a $(pdftheme) -a pdf-page-size=$(papersize) $< -o $@
clean:
rm -f *.html
rm -f *.pdf