数式ありのレポートや本をモダンに書く

数式ありでメモを書くことが多くて，
誰のパソコンでもすぐに数式ありでメモを書けるようにさっと環境構築したかったので，
できるだけシンプルな構成で，できるだけ便利にしたかった．

最初はmarkdown的なもので書きたいと思って，Re:VIEWを試してみたが，
数式と表を手こずってしまい，冷静になると``tex``で書けば良い気がしてきた，という経緯．

- https://qiita.com/eisoku9618/items/078251a08a8eb2ffc302


# TL;DR

1. Docker Imageを持ってくる
   - ``sudo docker pull eisoku9618/kuroiwa_dockefiles_for_latexmk``
2. 下記の``main.tex``と``.latexmkrc``を現在のディレクトリに作る
3. ビルドする
   - ``sudo docker run -it --rm -v `pwd`:/tmp eisoku9618/kuroiwa_dockefiles_for_latexmk /bin/sh -c "cd /tmp; latexmk -pvc main.tex"``
4. ``evince .tmp/main.pdf``
5. ``main.tex``を編集すると，自動でビルドが走って，``.tmp/main.pdf``が自動で更新される

```tex:main.tex
\documentclass[a4paper, 12pt, oneside, openany, uplatex]{jsbook}

%% 多くの人が使っているから使う
\usepackage{amsmath, amssymb}
%% for vector and matrix
\usepackage{bm}
%% for index：こうしないと日本語が文字化けする
\usepackage[dvipdfmx]{hyperref}
\usepackage{pxjahyper}
%% bmパッケージをchapter名やsection名で使う場合に必要なおまじない
\pdfstringdefDisableCommands{\renewcommand*{\bm}[1]{#1}}
%% for noto font
\usepackage[noto-otc]{pxchfon}

\title{モダンな\LaTeX 環境}
\author{Your Name}
\date{\today}

\begin{document}

\maketitle

\frontmatter
\chapter{Preface}
ここにはPrefaceを書きます．

\tableofcontents

\mainmatter
\chapter{ちゃぷたー}
ここには本文を書きます．
引用は\cite{hoge, fuga}です．

\section{セクション}
ここはセクションになります．
\begin{equation}
  \sum_{i=1}^{10} i = 55
\end{equation}

\section{セクション名にベクトル$\bm{a}$が登場する}
セクション名にベクトルが登場する場合は，上のようにbmコマンドを再定義する必要があります．

\appendix
\chapter{付録的なもの}

\bibliographystyle{unsrt}

\begin{thebibliography}{2}
\bibitem{hoge} Hoge Taro, "a b c d", 2017
\bibitem{fuga} Fuga Taro, "e f g h", 2018
\end{thebibliography}

\end{document}
```

```perl:.latexmkrc
#!/usr/bin/env perl
$latex            = 'uplatex -halt-on-error -file-line-error %O %S';
$out_dir          = '.tmp';
$bibtex           = 'upbibtex';
$dvipdf           = 'dvipdfmx %O -o %D %S';
$makeindex        = 'upmendex %O -o %D %S';
$max_repeat       = 5;
$pdf_mode	  = 3;

$pvc_view_file_via_temporary = 0;

# $pdf_previewer    = "evince";
$pdf_previewer    = "ls";       # beacause we use latexmk in a docker container
```

# 詳細

## Dockerfile について

``sudo docker pull eisoku9618/kuroiwa_dockefiles_for_latexmk``で持ってくるimageは以下が元ネタになっている．

- https://github.com/eisoku9618/kuroiwa_dockefiles/blob/master/latexmk/Dockerfile

ポイントは以下．

- Ubuntuのversionを18.04にしている
   - TeX Live 2017が使える
- latexmkをインストールしている
   - ``.tex``→``.dvi``→``.pdf``の変換を良い感じにやってくれる
   - latexrunも良いし，latexrunの方が使っていた時期も長いが，最近は設定ファイルの少なさ的にlatexmkを使っている
- notoフォントをインストールしている
   - モダンっぽい

## ``.latexmkrc``について

ググると詳しく分かる．
ただ，``out_dir``について触れている日本語記事は見つけられなくて，英語記事を読んでいたらたまたま知った．
途中生成物を別ディレクトリに出力してくれるので，``ls``したときに見やすくなるしgitで管理しやすくなるので，オススメ．

## ビルドについて

``.tex``を編集したら勝手に``.pdf``も更新して欲しいという話があるが，それも``latexmk``がやってくれる．
``latexmk main.tex``だと1回こっきりのビルドになって，``latexmk -pvc main.tex``だと``.tex``を更新する度にビルドしてくれる．
``.latexmkrc``の``out_dir``を``.tmp``に設定しているので，``main.pdf``は``.tmp``以下に出来る．

## ``docker run``について

```
sudo docker run --rm -v `pwd`:/tmp eisoku9618/kuroiwa_dockefiles_for_latexmk /bin/sh -c "cd /tmp; latexmk -pvc main.tex"
```

を詳しく説明すると

- ``--rm``：終了した時にコンテナを削除してくれる．これを付けないと，コンテナがどんどんできちゃって良くないので，基本付ける．
- ``-v from:to``：ローカルの``from``のパスにあるものをコンテナ内の``to``のパスにマウントする．ローカルにある``.tex``をコンテナに持って行って，コンテナでビルドした``.pdf``をローカルに持ってくる，という用途

## Future Work
理由がよく分からないが，``latexmk -pvc``にしていると，``C-c``でコンテナを止めようとしても止まらない．
ので，``sudo docker ps``して起動しているコンテナIDを調べて，``sudo docker stop 調べたID``で止める必要がある．


2018/07/04 追記 dockerのoptionに`-it`を付けることで解決した！