1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Ubuntu18.04LTS/latexmk/docker-compose/zathuraを使って薄い本を書く

Last updated at Posted at 2019-08-21

ゴール

  • 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 で終了

4. 好きなエディタとドキュメントを見ながら薄い本を作成していく.

参考文献

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?