レポート省力化
この記事は WORDIAN Advent Calendar 2017 - Adventar の2日目です。
LaTeXネタ2つ目。
何をするのか
「どうせまた.md
→ .tex
みたいなのだろ?」と思った貴方。
「そうだよ」
要求環境
- TeX Live
- Pandoc
- Make
- Printer
そのままでも見られるモノというのがLightweight Markup Languageというヤツなんで、なんだったら生テキストをそのまま印刷したい所ですがそうもいかないというワケで。
まあ先ずは.md
を書いていきましょう。好きなのはRe:VIEW(.re
)なんですけどね*1。
使うのは皆大好きbxjsclassesになります。
を見てください。
PacndocからLaTeXの話はいっぱいあるのでググッた方が早いような気もするので省きます。
Pandoc ユーザーズガイド 日本語版 - Japanese Pandoc User's Association
やりたいこと
- 毎回タイトルや名前を入れたくない
- デフォルトの見た目はちょっと変えたい
- レポート自体は時刻名とかで管理したい
という訳で、Pandocでカスタムしたテンプレートを読み込むが基本方針となります。
ちなみにbxjsclasses作者様のサイトでPandocモードの説明がされてます*2が、これそのままだと毎回自分の名前を打つ必要などがあるので、どうにかしたい。で、
テンプレ作成
$ pandoc -D latex > report.tex
でいじる元のファイルがゲットできるんですが。……結果から書くと、あんまりいじるところがなかった:cry:
まあ、一読しておくのをオススメします。
発覚するオプション
--include-in-header=FILE
(or-H FILE
) :LaTeXだと\begin{document}
の前に入る。--include-before-body=FILE
(or-B FILE
):LaTeXだと\begin{document}
の後に入る。
つまりヘッダを書いておいてPandoc叩くときに挿入すれば目的達成、ということでした。
知見
最初は--include-in-header
だけでいけるかなと思ったんですけど、titleとかを設定したテキストを-H
で入れたら、
$ pandoc input.md -o output.pdf -H header --latex-engine=lualatex -V documentclass=bxjsarticle -V classoption=pandoc -V classoption=a4paper
としたとき、完成したpdfにタイトルなどが表示されていない状態に。 -o output.tex
で確認するとヘッダ内容が入っているので、
「コイツどのタイミングでヘッダ挿入してんだ?*3」となった。
力技解決として、-B maketitle
(中身は\maketitle
だけ書いてある)も入れて叩くことに。解決した。
headerは
\title{\today Weekly-Report} \author{hidaruma}
maketitleは
\maketitle
みたいな感じに。テンプレートで\date{}
が入っているので、headerに書いてあっても無になるので注意ですね。書くならmaketitle
の前に挿入すべし。
いざ省力化へ
Makefile
使うコマンドが大体分かったらmake
パイセンの出番です。正直しょっちゅう書き方を忘れます。
LATEX ?= lualatex PAPER ?= a4paper CLASS ?= bxjsarticle OPTIONPANDOC ?= pandoc OPTIONJAFONT=sourcehan PANDOC ?= pandoc MONOFONT ?= SourceHanCodeJP HEADER ?= header BEFOREBODY ?= maketitle SRC_DIR = ./src BUILD_DIR = ./build RM = rm .PHONY clean %.pdf: %.md $(PANDOC) $(SRC_DIR)/$< -o $(BUILD_DIR)/$@ \ --latex-engine=$(LATEX) -V papersize=$(PAPER) -V documentclass=$(CLASS) \ -V classoption=$(OPTIONPANDOC) -V classoption=jafont=$(OPTIONJAFONT) \ -V monofont=$(MONOFONT) \ --listings \ --include-in-header=$(HEADER) --include-before-body=$(BEFOREBODY) %.tex: %.md $(PANDOC) $(SRC_DIR)/$< -o $(BUILD_DIR)/$@ \ --latex-engine=$(LATEX) -V papersize=$(PAPER) -V documentclass=$(CLASS) \ -V classoption=$(OPTIONPANDOC) -V classoption=jafont=$(OPTIONJAFONT) \ -V monofont=$(MONOFONT) \ --listings \ --include-in-header=$(HEADER) --include-before-body=$(BEFOREBODY) clean: $(RM) $(BUILD_DIR)/*.pdf $(BUILD_DIR)/*.tex
あとはsrcディレクトリに.mdを突っこんで
make hoge.pdf
とすればbuildディレクトリにブツが生成されます。
終わりに
成果物を
https://github.com/hidaruma/report/
に上げました。
WORDIAN Advent Calendar 2017 - Adventar 明日の担当はびしょ〜じょ君です。
僕はまた空きっぱなしの所があったら、とりあえずGitHub - takahashim/review-pandoc: Re:VIEW Writer for Pandocを覗いてネタを確定させたいと思います。
*1:あるやん!(但し3年前)
GitHub - takahashim/review-pandoc: Re:VIEW Writer for Pandoc
*2:BXjscls がまた新しくなった(v1.1a) - マクロツイーター
*3::thinking_face: