adbird(広告鳥) 備忘録

Markdown to pdf 独自記法でルビ、下線

最終更新:2018年2月6日

  • 肝心なルビの置換で間違い(スペルミス)があったので、修正。
  • pandocを1.9から2.1.1にアップグレードしたら、html に変換時に-sを明示的にコマンドに入れて、スタンドアローンにしないと、htmlのヘッダーやbodyがつかなかったので、スクリプトを修正。

以下に記すものは、html経由のPDF作成です。

LaTeX(Lualatex)経由は Pandoc で markdown から 論文PDF へ変換 を参考にしてください。



Markdown記法(Pandoc拡張Markdown)では、文字へのルビや下線(アンダーライン)の表現はない。

しかし、文書作成上、欠かせない表現なので、以下の手順でMarkdownをpdfデータに変換する前提で、何とかする。

  • Markdown→(Pandoc)→html→(sedで文字列置換)→(wkhtmltopdf)→pdf

Markdown内に直接、html記法で書いてもいいのだが、とくにルビのhtml記法はめんどうくさいし、下線もu要素で書けなくもないのだが、html5ではたんに下線を引くだけにu要素を使うのは良くないっぽいので、独自記法で書いて、sedで置換という手法をとる。

フォルダ内構成

任意のフォルダ内に以下を作成。

sample.css

ruby>rt {
   font-size: 50%;
   text-align: center;
   }

.underline{text-decoration:underline;}

makepdf.sh

#!/bin/sh

#htmlに変換
pandoc $1.md -c sample.css -t html5 -s -o $1.html

#ルビ置換
sed -i -e 's/rb{/<ruby><rb>/g' $1.html
sed -i -e 's/|/<\/rb><rt>/g' $1.html
sed -i -e 's/}rb/<\/rt><\/ruby>/g' $1.html

#下線置換
sed -i -e 's/u{/<span class="underline">/g' $1.html
sed -i -e 's/}u/<\/span>/g' $1.html

#pdfに変換
wkhtmltopdf --disable-smart-shrinking --margin-top 20 --margin-left 20 --margin-right 20 $1.html `date +%Y%m%d-$1`.pdf

原稿.md

<!-- 独自記法メモ
u{下線}u
rb{漢字|かんじ}rb
-->

# 坊っちゃん

## 一

rb{親譲|おやゆずり}rbのrb{無鉄砲|むてっぽう}rbでu{小供の時から}u損ばかりしている。

シェルスクリプト実行

$ sh makepdf.sh 原稿

サンプル画像

f:id:adbird:20170209002306p:plain