株式会社クリアコード > ククログ

ククログ


Markdownで書いたテキストをPDFに変換してドキュメントを作成する方法(テンプレート活用編)

はじめに

以前Markdownで書いたテキストをPDFに変換して納品用ドキュメントを作成する方法としてテキストから納品用のPDFを作成する方法を紹介しました。 今回は、前回のやりかたとはちょっと趣向を変えて、既存のテンプレートを活用してドキュメントを作成する方法を紹介します。

体裁を整える

体裁を整えるときの条件を以下のとおりと想定します。

  • 章や節を採番する(-Nを指定する)
  • 注釈を使う(footnotesを指定する)
  • 定義リストを使う(definition_listsを指定する)
  • フォントにはIPAexGothicを指定する(-V CJKmainfont=IPAexGothic
  • 表紙を作成する(-V titlepage=trueを指定する)
  • クロスリファレンスを使う(pandoc-crossrefが必要)
  • 目次を作成する(--table-of-contentsを指定する)
  • 目次のレベルを3にする(--toc-depth=3を指定する)
  • 既存のテンプレートを使う(--template eisvogelを指定する)
  • コードのシンタックスハイライトはtangoを使う(--highlight-style tangoを指定する)

pandocpandoc-crossrefはすでに導入済みであるものとします。

既存のテンプレートを指定するので、以前指定していた自前のクラスファイルmyltjsarticleははずします。 eisvogelというテンプレートは https://github.com/Wandmalfarbe/pandoc-latex-template から入手できます。

上記をまとめると、次のようなコマンドでPDFを作成できます。

pandoc -o sample.pdf \
	       -N \
	       -f markdown+ignore_line_breaks+footnotes+definition_lists \
	       -V CJKmainfont=IPAexGothic \
	       -V titlepage=true \
	       -V toc-own-page=true \
	       -F pandoc-crossref \
	       --table-of-contents \
	       --toc-depth=3 \
	       --pdf-engine=lualatex \
	       --template eisvogel \
	       --highlight-style tango \
	       sample.md

メタ情報を記述するには

ドキュメントにはタイトルやキーワードといったメタ情報を含めることができます。

---
title: ○○仕様書
subject: ○○に関する仕様書
date: 2018/09/12
author: 株式会社××
keywords: [△△, □□]
---

文書の冒頭に上記のようなメタ情報を記述しておくと、eisvogelテンプレートを使ったPDFの表紙として使われます。 表紙に含まれるのはtitleauthordateです。

メタ情報の詳細については、Usageを参照するとよいでしょう。

生成されたサンプルのPDF

実際にサンプルからPDFを生成してみましょう。以下のようなMarkdownのテキストをPDFに変換してみます。

---
title: ○○仕様書
subject: ○○に関する仕様書
date: 2018/09/12
author: 株式会社××
keywords: [△△, □□]
---

# 大項目1タイトル

サンプルのテキスト

## 中項目1タイトル

サンプルのテキスト

### 小項目1タイトル

サンプルのテキスト

![サンプルの図](sample.png){#fig:sample-image}

[@fig:sample-image] はサンプルの図です。

サンプルのテキスト [^footnote]

```ruby
puts "Hello, Ruby"
```

定義リスト

: 定義の説明

[^footnote]: サンプルのテキストの注釈

\appendix
\clearpage

# 付録Aタイトル

サンプルのテキスト

PDFに変換した結果は次のようになります。

生成したPDFの複数ページプレビュー画像

サンプルはシンプル過ぎるように感じるかもしれませんが、テンプレート変数を利用していろいろカスタマイズができます。 詳細については、次のページを参照してください。

pdffonts を使うと、実際に使われているフォントを確認できます。

% pdffonts sample.pdf
name                                 type              encoding         emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
SXTRUT+IPAexGothic                   CID TrueType      Identity-H       yes yes yes     24  0
OAJEHK+IPAexGothic                   CID TrueType      Identity-H       yes yes yes     25  0
MKLQPT+SourceSansPro-Regular         CID Type 0C       Identity-H       yes yes yes     26  0
CRVRHO+SourceSansPro-Bold            CID Type 0C       Identity-H       yes yes yes     37  0
JSIIWV+SourceCodePro-Regular         CID Type 0C       Identity-H       yes yes yes     51  0

指定したとおりにIPAexGothicが使われていることがわかります。

pdfinfoを使うとPDFファイルの情報を確認できます。

% pdfinfo sample.pdf
Title:          ○○仕様書
Subject:        ○○に関する仕様書
Keywords:       △△, □□
Author:         株式会社××
Creator:        LaTeX with hyperref package
Producer:       LuaTeX-1.7.0
CreationDate:   Wed Sep 12 18:26:42 2018 JST
ModDate:        Wed Sep 12 18:26:42 2018 JST
Tagged:         no
UserProperties: no
Suspects:       no
Form:           none
JavaScript:     no
Pages:          4
Encrypted:      no
Page size:      595.276 x 841.89 pts (A4)
Page rot:       0
File size:      236561 bytes
Optimized:      no
PDF version:    1.5

メタ情報として記述していたキーワードなども反映されていることがわかります。

まとめ

今回は、Pandocを使ってMarkdownで書いたテキストをPDFに変換してドキュメントを生成する方法(既存のテンプレートを使う)を紹介しました。 PDFの生成には少し時間がかかりますが、綺麗に出力できるので特にレイアウトに制限のないようなドキュメントをテキストエディタで書きたい人は検討してみてはいかがでしょうか。

2018-09-13

«前の記事: fcitx-mozcの入力モードを外部プロセスから制御する 最新記事 次の記事: db tech showcase Tokyo 2018 - MySQL・PostgreSQLだけで作る高速あいまい全文検索システム #dbts2018 »
タグ:
年・日ごとに見る
2008|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|