概要
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(手動でlatexのTeX Pathを設定するか、デフォルトでPATHの通っている場所ならどこでもいい)に以下のシェルスクリプトを作成し、chmod +x /usr/texbin/latexmkしておく。
${HOME}/.atom/packages/latex/resourcesのマウントはlatexのExtended 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;