LoginSignup
6
10

More than 3 years have passed since last update.

[Pandoc]複数のmarkdownからpdfに変換し、目次の前に表紙をつける

Posted at

結論

とりあえず方法を知りたい方向けに先に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が良さそうよ)

まとめ

まだまだいい方法がありそうですが、コスト的にここで妥協します。
良さそうな方法を思いつき次第更新します。

参考

pandocでマークダウンをPDF化する(LaTexなし)
Pandoc ユーザーズガイド 日本語版

6
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
10