ゴール
- Docker内でTex Live/latexmkを動かして(ホスト環境に変更を加えずにtexファイルを自動でコンパイルするため),
- ホスト側でzathuraを動かしながら(vimのキーバインドで出来上がりのpdfを確認するため),
- vimを使って薄い本を作成する.
使用するもの
- Docker(仮想環境を簡単/便利に扱えるツール)
- docker-compose(複数の仮想環境を簡単に扱えるツール)
- TeX Live($\TeX$関連のもろもろのファイルが入ったディストリビューション)
- zathura(vimのキーバインドが使える軽量PDFビューアー)
手順
1. 必要なファイルを作成/ダウンロードする
bash
$ cd
$ mkdir techbook
$ cd techbook
$ touch main.tex # メインのtexファイル
$ touch test01.tex # 第1章のtexファイル
$ touch test02.tex # 第2章のtexファイル
$ touch Dockerfile # 既に作られているのを拝借.感謝!
$ touch docker-compose.yml # Dockerコマンド打つのがめんどいのでdocker-composeを使用
$ touch .latexmkrc # 自動コンパイル用の設定ファイル
$ curl -O https://raw.githubusercontent.com/h-kitagawa/plistings/master/plistings.sty # コード内で日本語をきちんと表示する
main.tex
\documentclass[dvipdfmx, uplatex, b5paper, papersize, 11pt]{jsbook}
\usepackage{amsmath,amssymb} % 数式の機能を拡張
\usepackage{layout} % レイアウトを表示する.
\usepackage{ascmac} % 囲み線を入れる.
\usepackage{makeidx} % 索引を使う.
\makeindex % 索引の元ファイルを作成する.
\usepackage[dvipdfmx]{hyperref} % PDF内で外部リンクや文書内リンクを生成する.
\usepackage[dvipdfmx]{pxjahyper} % 日本語のしおりを出力する.
\usepackage[dvipdfmx]{graphicx} % .png画像を表示する.
\usepackage{float} % figure, tableの位置をコントロールする.
\usepackage{color} % 色を使用する.
\usepackage{listings} % コードを表示する.
\usepackage{plistings} % コード表示時に日本語をきちんと表示する.
\def\lstlistingname{コード} % コードのタイトルを"コード"にする.
\usepackage{tcolorbox} % 色付きのboxを使用する.
\usepackage{fancybox} % 囲み文字を表示する.
\setcounter{tocdepth}{2} % 目次にsubsubsectionまで入れる.
\title{{\Huge LaTeXを使った薄い本の書き方}}
\author{山田太郎\footnotemark[1] taro@example.com}
\date{\today}
\begin{document}
\pagenumbering{roman} % 目次までをローマ数字でナンバリングする.
\maketitle % タイトルを出力する.
\input{introduction/main.tex}
\renewcommand{\thefootnote}{\fnsymbol{footnote}}
\footnotetext[1]{\url{https://example.com}}
\renewcommand{\thefootnote}{\arabic{footnote}}
\tableofcontents % 目次を出力する.
% \layout
\pagenumbering{arabic} % 目次よりあとをアラビア数字でナンバリングする.
\input{test01.tex} % 第1章のファイルをインプットする.
\input{test02.tex} % 第2章のファイルをインプットする.
\printindex % 索引を出力する.
\end{document}
test01.tex
\chapter{\LaTeX の使用例}
\section{数式}
\begin{equation}
y=ax+b
\end{equation}
\section{コード}
\begin{lstlisting}[caption=hoge,label=fuga]
#include<stdio.h>
int main(){
printf("Hello world!");
}
\end{lstlisting}
\section{索引}
免疫\index{めんえき@免疫}とは,体内に病原菌\index{びょうげんたい@病原体}や毒素その他の異物が侵入しても、それに抵抗して打ちかつ能力.
test02.tex
\chapter{LaTeXをインストールする}
\section{ほげ}
Dockerfile
FROM paperist/alpine-texlive-ja
docker-compose.yml
version: '3'
services:
texlive:
image: paperist/alpine-texlive-ja
build: .
volumes:
- .:/workdir
command: sh -c "latexmk --pvc main.tex"
.latexmkrc
#!/usr/bin/env perl
$latex = 'uplatex -halt-on-error -file-line-error %O %S';
$out_dir = '/workdir';
$bibtex = 'upbibtex';
$dvipdf = 'dvipdfmx %O -o %D %S';
$makeindex = 'upmendex %O -o %D %S';
$max_repeat = 5; # 最大コンパイル回数
$pdf_mode = 3; # 0:pdf化しない, 1:pdflatexを使用, 2:ps2pdfを使用, 3:dviファイルからpdfを作成する
# %O:実行時オプション
# %S:入力ファイル名
# %D:出力ファイル名
# %B:処理するファイル名の拡張子を除いた文字列
# 古い出力ファイルの保存数
# pdfビューアーにevinceを使用したときに差分を見るために使用
$pvc_view_file_via_temporary = 0;
# 好きなビューアーを指定する
# $pdf_previewer = "evince";
$pdf_previewer = "ls"; # コンテナ内で動かすのでlsを使用
2. docker-composeを使って,コンテナ内でtexファイルを自動コンパイルする
1つ目のターミナルで以下を実行してログを確認する.
bash
$ sudo docker-compose up --build
# Ctrl+C で終了
3. zathuraを使って,コンパイルされたpdfファイルを確認する
bash
# --forkオプションを付けてバックグラウンドでzathuraを実行する
$ zathura --fork main.pdf
# Ctrl+Q で終了