状況

パソコンで実験レポートを書くことになった。Wordで書くのは嫌だし、毎回LaTex使うのはだるいので、Markdownで書いてPDFにコンパイルすればいい。

Markdownの利点

  • 数式含めとにかくプレビューが早い
  • 記述が楽
  • 基本的にLaTexの文法のエラーで悩むことはなくなるのでレポートに集中できる

環境

  • WSL Ubuntu 18.04 in Windows 10 1903
  • GNU Make 4.1
  • pandoc 1.19.2.4
  • pandoc-crossref 0.3.4.1
  • LaTex (platex,dvipdfmx) (TexLive)

OSX Mojave、CentOS 7でも確認済み

処理の概要

1
Markdown --(pandoc,pandoc-crossref)-> LaTex --(platex,dvipdfmx)-> PDF

ディレクトリ構造

1
2
3
4
5
6
7
- physics-laboratory
- Makefile
- template.tex
- 04
- report.md
- report.pdf <-これが生成される
# mdを置くのはphysics-labortory以下だったらどこでもOK

こんな感じにMarkdownを書いてこれをPDFにできればいい。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!-- 04/report.md -->
---
title: 基礎科学実験A
subtitle: 液体の比熱
author: 電通 太郎
date: 2019/04/13
---

# 実験の目的
液体の比熱を求める

# 原理
$$
\Delta Q=L\Delta T
$$

pandoc-crossrefのインストール

pandoc-crossrefは相互参照をMarkdownっぽく書けるようにするためのpandocフィルターである。

https://github.com/lierdakil/pandoc-crossref/releases

GitHubから適当に最新版をダウンロードして展開するとファイルが出てくるので、パスの通ったところに配置する。

テンプレート

PandocにMarkdownを突っ込むだけだと言語設定とか作者とかうまくいかないので、テンプレートを適当に作る。bodyにMarkdownをそのままLaTexに変換したもの、HTMLで言えばheadなどを含まないbody要素の中身。body以外はMarkdownのYamlヘッダで指定したものが入る。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
% template.tex
\documentclass{jarticle}
\usepackage[dvipdfmx]{graphicx}
\usepackage[dvipdfmx]{hyperref}
\usepackage{longtable}
\usepackage{booktabs}
\usepackage{framed}
\usepackage[margin=1in]{geometry}

$if(highlighting-macros)$
$highlighting-macros$
$endif$

\def\tightlist{\itemsep1pt\parskip0pt\parsep0pt}
\begin{document}
\date{$date$}
\title{$title$$if(subtitle)$ - $subtitle$$endif$}
\author{$author$}
\maketitle
$body$
\end{document}

Makefile

本題の自動化スクリプト。1行目でカレントディレクトリ以下の.mdを持ってきて、それを処理対象にしている。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# Makefile
MARKDOWN=$(shell find . -name "*.md")
TEX=$(MARKDOWN:.md=.tex)
PDF=$(MARKDOWN:.md=.pdf)
TEMPLATE=template.tex

%.tex:%.md
pandoc -s -F pandoc-crossref $< -f markdown-auto_identifiers+pipe_tables -M "crossrefYaml=pandoc-crossref-config.yml" --template=$(TEMPLATE) -o [email protected]

%.pdf:%.tex
platex -output-directory 01 $<
dvipdfmx $*.dvi -o [email protected]

# .PRECIOUS: $(TEX)

default: $(PDF)
@find . -type f -name "*.aux" -or -name "*.dvi" -or -name "*.log" -or -name "*.out"|xargs -r rm

clean:
[email protected] $(PDF)
@find . -type f -name "*.aux" -or -name "*.dvi" -or -name "*.log" -or -name "*.out"|xargs -r rm

実行

1
make

うまくPDFにコンパイルできた。

エラー対処

フォントがおかしいとき

明朝体ではないフォントになってレポートとしてはダサくなった場合、フォントを変えなければいけない(謎)下記コマンドでシステム全体のTexフォントを変更できる。

1
2
kanji-config-updmap ipaex --sys
# ipaexというのはipaが作っているフォントでLaTexに標準で入っている

このようにすると、フォントの設定が確認できる。

1
2
3
kanji-config-updmap status
# CURRENT family for ja: ipaex
# Standby family : ipa

kpsewhich

パッケージが足りないとき

私の環境にはこの2つのパッケージが入っていなかったので、上記サイトからダウンロードした。

framedにはsty用意されているので、これをTexが認識できる場所に置けば良い。

1
2
# Texが認識できる場所
sudo mv ~~~~~~.sty /usr/share/texlive/texmf-dist/tex/latex/tools/

booktabsはstyがなく、insとdtxだけなので、styを生成しなければならない。以下のコマンドでstyを生成し、styを上記の場所に配置する。

1
latex booktabs.ins

Texのパッケージをリロードするために、下記コマンドを実行する。

1
sudo mktexlsr

表がおかしい

全角スペースで無理やりスペースを開けると上手く行った(強引)

原因は不明。

画像のサイズ変更がおかしい

今のところいらないからこんどやろ・・・

これでやっとレポートを書き始められる・・・