自己顕示欲の開放治療所

erg, programming and something.

別名:Laughing and Grief 雑記

Latin and Greekは習ったこともない

真面目な記事の他、特定の方には不快と思われる事柄に関して言及を行うことがあります。ちょっと頑張りますが、Blog内で解決できなかった場合要望があれば別ページに技術記事は書き直します

レポート省力化

この記事は 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を覗いてネタを確定させたいと思います。