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を使う。

sudo docker pull paperist/alpine-texlive-ja

Docker

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

注意として、この方法で一般ユーザがDockerを使えるようにすると特権昇格できてしまうため、 共有サーバにおいてはDocker 20.10以降のDocker rootlessを設定する。

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

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から渡されるのでマウント先パスもホストと同じ)。この機能を無効にしていれば不要。

#!/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ファイル

\documentclass[10pt,a4paper]{jsarticle}
\title{My Title}
\author{Author}
\date{2020-09-17}
\begin{document}
\maketitle
\section{サンプル}
\end{document}

注意点

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

おまけ

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

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