Atom + LaTeX in Docker

概要

LaTeXをホストにインストールせず、Docker内で動かしつつ、 Atomからこれを利用できるようにする。

Requirements

  • Ubuntu 18.04
  • Docker
  • Atom
  • Atom Packages

Atom Packages

latexを入れれば最低限ビルドコマンドは叩けるようになる。

  • latex
  • シンタックスハイライト
  • アウトライン表示
  • PDFプレビュー
    • pdf-view(メモリリーク? Atomを一度閉じれば解消する)
    • または pdf-view-plus(メモリリーク対策版らしい。latexとの連携はないので注意)

Dockerイメージ

paperist/alpine-texlive-jaを使う。

1
sudo docker pull paperist/alpine-texlive-ja

non-root Docker

sudoなしでDockerを実行できるようにする。AtomからDockerコンテナを作るのに必要。

ユーザをdockerグループに追加したあと再ログインする。新しくdockerグループが作られた直後はnewgrp dockerしなければならないことがあり、シェルごとにこれを実行する必要があるようなのでAtomに反映されず、この場合OSの再起動が必要。

1
2
sudo groupadd docker
sudo adduser $USER docker

latexmkスクリプトを作る

/usr/texbin/latexmk(手動でlatexTeX Pathを設定するか、デフォルトでPATHの通っている場所ならどこでもいい)に以下のシェルスクリプトを作成し、chmod +x /usr/texbin/latexmkしておく。

${HOME}/.atom/packages/latex/resourcesのマウントはlatexExtended Build Modeが有効のときに${HOME}/.atom/packages/latex/resources/latexmkrcが読み出されるため設定している(このパスはホストのAtomから渡されるのでマウント先パスもホストと同じ)。この機能を無効にしていれば不要。

1
2
3
4
5
6
#!/bin/sh
docker run --rm \
  -v "${PWD}:/workdir" \
  -v "${HOME}/.atom/packages/latex/resources:${HOME}/.atom/packages/latex/resources" \
  paperist/alpine-texlive-ja \
  latexmk "$@"

サンプルTeXファイル

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
\documentclass[10pt,a4paper]{jsarticle}

\title{My Title}
\author{Author}
\date{2020-09-17}

\begin{document}
\maketitle

\section{サンプル}

\end{document}

注意点

カレントディレクトリ以下をマウントするため、外部においた.styなどは読み込めないので注意(デフォルトでロードされるディレクトリがあれば追加のマウントをすればOKと思われる)。

おまけ

stderrにコマンドを吐き出してエラー終了するスクリプト

1
2
3
#!/bin/sh
echo $0 $@ >&2
exit 1;