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

日本語でまとまって書いてあるサイトが少なかったので備忘録として書いてます。
CloudLaTeXなどのサービスを使えばそれまでなのですが....
#2019/11/15追記
新しく書き直しました．これからはこちらを見てください．
[Overleaf(旧sharelatex)環境の構築](https://qiita.com/tomy_hara/items/765257716b083dd687c4)



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

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

#この記事でできないこと
コンパイラの選択欄にplatexと表示させる

#構築環境
Ubuntu 14.04LTS
TeXLive 2016

#参考にさせていただいたサイト
公式のwikiとこちらのサイトの組み合わせです．
[sharelatex wiki](https://github.com/sharelatex/sharelatex/wiki)
[sharelatexでjarticleをつかえるようにする](https://blog.sky-net.pw/article/63)
[sharelatexでjarticleをつかえるようにする その2](https://blog.sky-net.pw/article/68)

#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
```
を使うと色々いじれないので，

```shell-session
$ 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で基本的な設定ができるようになっています．


```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 joe@example.com"
```
確認できたらアカウントを管理する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を使えるようにする](ShareLatexでjarticleを使えるようにする)と同じです．
編集が終わったら保存して

```
$ cd sharelatex/clsi
$ grunt install 
```



###platexなどの設定をするdockerfileの作成
```
$ mkdir overleaf/overleaf
$ vi Dockerfile
```
overleafの中にoverleafのディレクトリを作成してDockerfileを作成する．
platex入れたり設定いろいろます．
中身は引用先([sharelatexでjarticleをつかえるようにする その2](https://blog.sky-net.pw/article/68))と同じです．

```dockerfile: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の編集
```yml:docker-compose.yml
version: '2'

services:
    sharelatex:
        build: "./overleaf"
．．．．
```
作ったdockerfileをbuildするように編集する(buildの行を良きところに配置してください)

##再起動
```
$ docker-compose up -d --build
```
ここまでで一応latexを選択するとplatexを使用してコンパイルできるようになります。
<img width="1280" alt="スクリーンショット 2018-05-28 18.00.18.png" src="https://qiita-image-store.s3.amazonaws.com/0/257498/f5fa1a04-9ea3-db37-a508-9e7ea329f64f.png">
できたらこんなかんじ