自前のサーバーでplatexに対応したsharelatex環境を構築する


日本語でまとまって書いてあるサイトが少なかったので備忘録として書いてます。
CloudLaTeXなどのサービスを使えばそれまでなのですが....

2019/11/15追記

新しく書き直しました.これからはこちらを見てください.
Overleaf(旧sharelatex)環境の構築

注意

筆者はサーバーとかUbuntuに関してはド素人なので間違っているところが多いかもしれません.
こちらもわからないことが多いので訂正やコメントしてくださるとありがたいです.

この記事でできること

  1. sharelatexの環境構築
  2. sharelatexの日本語化
  3. platexになんとか対応させる

この記事でできないこと

コンパイラの選択欄にplatexと表示させる

構築環境

Ubuntu 14.04LTS
TeXLive 2016

参考にさせていただいたサイト

公式のwikiとこちらのサイトの組み合わせです.
sharelatex wiki
sharelatexでjarticleをつかえるようにする
sharelatexでjarticleをつかえるようにする その2

sharelatexを入れる前の準備

https://github.com/sharelatex/sharelatex/wiki/Dependencies
を参考にして
- docker
- Redis
- MongoDB
- Node.js
- Grunt command line tools
- libkrb5-dev / krb5-devel
を入れる必要があるそうです,

TeXLiveについて

$ sudo apt-get install texlive-all

を使うと色々いじれないので,

$ wget http://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz
$ tar -xvf install-tl-unx.tar.gz
$ cd install-tl-*
$ sudo ./install-tl

より行ってください.どのパッケージを入れるとかの詳しい説明は色んな人のを見るとわかりやすいです.ちなみに現在どのバージョンまで対応してるのかがわからないので今回は2016を使いました.

パスを通す

$ export PATH=/usr/local/texlive/2016/bin/x86_64-linux:$PATH

2016は適宜変えてください.

latexmkを入れる

# apt-get install latexmk

sharelatexの導入

$ docker run -d \
  -v ~/sharelatex_data:/var/lib/sharelatex \
  -p 5000:80 \
  --name=sharelatex \
  sharelatex/sharelatex

これでsharelatexが使えるようにはなりました.

Sharelatexの日本語化

# vi sharelatex/docker-compose.yml

処理が終わるとsharelatexの階層ができています.そこにあるdocker-compose.ymlで基本的な設定ができるようになっています.

docker-compose.yml
SHARELATEX_SITE_LANGUAGE: "ja"

をdocker-compose.ymlのよきところに追加.それ以外の言語も"ja"を変更すれば使えます.

sharelatexの起動

$ docker-compose up 

から起動しましょう
そしたらアクセスをしてみましょう.
http://localhost:5000/
説明に沿って設定していたのならばこれでアクセスできるはず.

adminユーザーの作成

$ docker exec sharelatex /bin/bash -c "cd /var/www/sharelatex; grunt user:create-admin --email [email protected]"

確認できたらアカウントを管理するadminユーザを作成します.
を実行するとURLが表示されるのでアクセスしてパスワードを設定します.

sharelatexの終了

docker-compose down

終了するときはこれで大丈夫です.

sharelatexの構成ファイルの追加

cd overleaf/
# grunt install 

上の工程までで一応LaTeXやXeLaTeXは使えます.以下よりpLaTeXをなんとか使えるようにしていきます.
単純にsharelatexを入れただけだと中身をいじれないので構成ファイル(?)を入れます.

sharelatexでplatexを使えるようにする

clsiの編集

# vi overleaf/clsi/app/coffee/LatexRunner.coffee
-     else if compiler == "xelatex"
-          command = LatexRunner._xelatexCommand mainFile
+     else if compiler == "platex"
+          command = LatexRunner._platexCommand mainFile


-     _xelatexCommand: (mainFile) ->
+     _platexCommand: (mainFile) ->
          LatexRunner._latexmkBaseCommand.concat [
-            "-xelatex", "-e", "$pdflatex='xelatex -synctex=1 -interaction=batchmode %O %S'",
+            "-pdfdvi", "-e", "$latex='platex -synctex=1 -interaction=batchmode %O %S'",
# vi overleaf/clsi/app/coffee/RequestParser.coffee
-      VALID_COMPILERS: ["pdflatex", "latex", "xelatex", "lualatex"]
+      VALID_COMPILERS: ["pdflatex", "latex", "platex", "lualatex"]

簡単に言えばXeLaTeXを消してpLaTeXを使うように書き換えています.
変更内容はほぼShareLatexでjarticleを使えるようにすると同じです.
編集が終わったら保存して

$ cd sharelatex/clsi
$ grunt install 

platexなどの設定をするdockerfileの作成

$ mkdir overleaf/overleaf
$ vi Dockerfile

overleafの中にoverleafのディレクトリを作成してDockerfileを作成する.
platex入れたり設定いろいろます.
中身は引用先(sharelatexでjarticleをつかえるようにする その2)と同じです.

Dockerfile
FROM sharelatex/sharelatex:latest

# platex install
RUN apt-get update \
  && apt-get install texlive-lang-cjk -y \
  && apt-get clean \
  && apt-get autoremove

# latexmk
RUN cd /usr/local/texlive/2016/bin/x86_64-linux/ \
  && sed -ri "s/$latex  = 'latex %O %S';/$latex  = 'platex -shell-escape %O %S';/g" latexmk \
  && sed -ri "s/$bibtex  = 'bibtex %O %B';/$bibtex  = 'pbibtex %O %B';/g" latexmk \
  && sed -ri "s/$dvipdf  = 'dvipdf %O %S %D';/$dvipdf  = 'dvipdfmx %O -o %D %S';/g" latexmk

TeXLiveのバージョンや保存場所によって適宜変更してください.

docker-compose.ymlの編集

docker-compose.yml
version: '2'

services:
    sharelatex:
        build: "./overleaf"
....

作ったdockerfileをbuildするように編集する(buildの行を良きところに配置してください)

再起動

$ docker-compose up -d --build

ここまでで一応latexを選択するとplatexを使用してコンパイルできるようになります。

できたらこんなかんじ