結論
とりあえず方法を知りたい方向けに先にTipsだけのせときます。
-B
を使用してカバーページを指定する。
以上、解散!
以下の事項に興味のある方は続きをどうぞ。
- 環境構築が少なくてすみそうな方法
- powershellで作成
- 複数ファイルのmarkdownを1つのpdfにする
- pdfのマージン
- 目次の付け方
みたいなことが書いてあります。
環境
業務内で資料作成方法を横展開するため、環境構築がやさしそうな構成を考えました。
dockerを使えるならそれが一番楽そうです。
どうしてもgitで文書管理をしたかったんや。(excelはもういや!)
- windows
- pandoc v2.7.3
- wkhtmltopdf
- plantUML(使用しなくてもok)
Powershellで実行
使い慣れているのでPowershellです。
複数のmarkdownファイルを一つにまとめます
Set-Location ../
# 表紙とREADME.mdを除いたすべてのファイルパスを取得
$files_except_cover = Get-ChildItem ./ -Recurse -Name -include *.md -Exclude README.md, *cover.md
# 表紙のパス
$cover_path = Get-ChildItem ./ -Recurse -Name -include *cover.md
# ファイル名
$pdf = "main.pdf"
pandoc `
# 目次の前に入るmarkdownを指定します
-B $cover_path `
# 目次が自動で付きます。-toc-depthはどこの見出し(h)まで目次をつけるか
--toc -toc-depth=2 `
# 見出しを採番します。見出しの行に{.unnumbered}をつけることで採番をキャンセルできます
-N `
# 複数ファイルをまとめて書き出し
$files_except_cover -f markdown -t html5 `
# cssの適用(githubのcssを拾ってきています)
-c "./pdf/css/github.css" `
# pdf化した際の、余白の設定
-V margin-top=12 `
-V margin-right=5 `
-V margin-left=5 `
-V margin-bottom=12 `
# 書き出す場所と名前
-o "./pdf/$($pdf)" `
# タイトルがないとエラーを吐くのでつけてます
--metadata pagetitle=タイトル
表紙のMarkdownとCSS
めちゃくちゃ簡素な表紙ですがないよりまし。
<div class="box-title">
<p>
<span class="title">ここがタイトル</span>
</p>
<p>
<span class="sub-title">こちらサブタイトル</span>
</p>
<p>
<span class="author">一応著者名も</span>
</p>
<p>
<span class="date">日付はよろしく</span>
</p>
</div>
<!-- 改ページ -->
<div style="page-break-before:always"></div>
/* ざっくりCSSなので参考程度で */
.box-title {
margin-top: 40%;
}
.box-title,
.box-title p {
text-align: center;
}
.title {
font-size: 80px;
}
.sub-title {
font-size: 64px;
}
.author {
font-size: 32px;
}
.date {
font-size: 32px;
}
PlantUML
pandocのフィルターで変換もできるけど、色々ややこしかったので、
ローカルでpngに変換してからmarkdownにリンクを書き込み、pdf変換にしています。
環境構築的には楽です。(なんどもいうけどdockerが良さそうよ)
まとめ
まだまだいい方法がありそうですが、コスト的にここで妥協します。
良さそうな方法を思いつき次第更新します。