sharelatexでjarticleをつかえるようにする

ShareLatex とは

Web上でLatexが書けるオープンソースプロジェクト
Webサービスとしても提供されてるけどオープンソースなので自前のサーバーで動かすこともできる
ただCloud LaTeXと違ってjarticleが使えないのでその辺もなんとかします
大体参考元記事のままです

というか大人しくDockerfile書いた方が早いです

環境

  • Docker
    1.13.1 build 092cba3
  • Docker-compose
    1.11.1 build 7c5d5e4

環境構築

イメージの用意

公式がDockerイメージを提供しているのでこちらを利用します

1$ mkdir sharelatex
2$ cd sharelatex
3$ wget https://raw.githubusercontent.com/sharelatex/sharelatex/master/docker-compose.yml
4$ docker-compose up -d

80番にフォワーディングされてるので一度アクセスして動作することを確認します
起動直後は502 bad gatewayが出ますがしばらく待てばログイン画面がでます

アカウント設定

docker execで管理用アカウントのIDを発行します

1$ docker exec sharelatex /bin/bash -c "cd /var/www/sharelatex; grunt user:create-admin --email joe@example.com"

登録用 URL
登録用URLにアクセスしてパスワードを設定しサンプルプロジェクトを作って問題なく動作することを確認します

イメージの編集

コンテナ内に入って作業します

1$ docker exec -it sharelatex bash

platexのインストール

何はともあれplatexがないことには始まらないのでインストールします

1# apt-add-repository ppa:texlive-backports/ppa
2# apt-get install texlive-lang-cjk

ここまででかなり時間かかるのでここで一度適当にコンテナをcommitしておくと失敗した時のダメージが軽くなります

latexmkの編集

1# vi /usr/local/texlive/2016/bin/x86_64-linux/latexmk
2-$latex  = 'latex %O %S';
3+$latex  = 'platex -shell-escape %O %S';
4
5-$bibtex  = 'bibtex %O %B';
6+$bibtex  = 'pbibtex %O %B';
7
8-$dvipdf  = 'dvipdf %O %S %D';
9+$dvipdf  = 'dvipdfmx %O -o %D %S';

clsiの編集

参考サイトまんまです

 1# vi /var/www/sharelatex/clsi/app/coffee/LatexRunner.coffee
 2-               else if compiler == "xelatex"
 3-                       command = LatexRunner._xelatexCommand mainFile
 4+               else if compiler == "platex"
 5+                       command = LatexRunner._platexCommand mainFile
 6
 7-       _xelatexCommand: (mainFile) ->
 8+       _platexCommand: (mainFile) ->
 9                LatexRunner._latexmkBaseCommand.concat [
10-                       "-xelatex", "-e", "$pdflatex='xelatex -synctex=1 -interaction=batchmode %O %S'",
11+                       "-pdfdvi", "-e", "$latex='platex -synctex=1 -interaction=batchmode %O %S'",
1# vi /var/www/sharelatex/clsi/app/coffee/RequestParser.coffee
2-      VALID_COMPILERS: ["pdflatex", "latex", "xelatex", "lualatex"]
3+      VALID_COMPILERS: ["pdflatex", "latex", "platex", "lualatex"]

web の編集

1# vi /var/www/sharelatex/web/app/coffee/Features/Project/ProjectOptionsHandler.coffee
2-       VALID_COMPILERS: ["pdflatex", "latex", "xelatex", "lualatex"]
3+       VALID_COMPILERS: ["pdflatex", "latex", "platex", "lualatex"]
1# vi /var/www/sharelatex/web/app/views/project/editor/left-menu.pug
2-                                       option(value='xelatex') XeLaTeX
3+                                       option(value='platex') platex

変更の適用

足りないパッケージのインストールとgrunt install(不要?)します

1# apt-get install libkrb5-dev
2# grunt install

一度コンテナから抜けコンテナ停止後イメージとして書き出します

 1# exit
 2$ docker stop sharelatex redis mongo
 3redis
 4mongo
 5sharelatex
 6$ docker commit sharelatex custom_sharelatex
 7$ docker images
 8REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
 9custom_sharelatex       lastest             xxxxxxxxx         2 days ago          4.01 GB
10mongo                   latest              xxxxxxxxx         9 days ago          402 MB
11sharelatex/sharelatex   latest              xxxxxxxxx         11 days ago         2.39 GB
12redis                   latest              xxxxxxxxx         2 weeks ago         184 MB

platex入れたりでサイズが大きくなり過ぎなので後で要対策です

先程作成したイメージを利用するようにcomposeファイルを編集します

1$ vi docker-compose.yml
2version: '2'
3services:
4    sharelatex:
5        restart: always
6        image: custom_sharelatex

これで終わり
再度起動します

1$ docker-compose up -d

してしばらく待つと起動してくるので試しにプロジェクトを作成し
Menu -> Compilerから先程作成したらplatexを選択して文章を書いてテストします

1\documentclass{jarticle}
2\begin{document}
3これはサンプルドキュメントです。
4\section{ほげほげ}
5
6\end{document}

RecompileするとPDFが出来ました

参考記事