日本語対応ShareLatexを自前サーバーで運用する

はじめに

ShareLatex は,サーバー上でTeX原稿を執筆するツールで,同時共同編集や履歴,チャットなどができるツールです.競合サービスとして,Overleaf や CloudLatex などがありますが,ShareLatex の良いところの一つは,ソースコードを公開しているので,自前サーバーで運用できるという点です.未発表データを外部に置くことに抵抗があるユーザーでも,共同編集機能が利用でき,執筆作業が大幅に効率化できます.

しかしながら,ShareLatex には大きな欠点があります.それは,jarticle をベースとするような日本語原稿に対応していないことです(例えば,学会提供クラスファイル).前回は,一つの解決策として,こちらの記事のように,疑似スタイルファイルを用いる方法を示しました.今回は,ShareLatex 自体を改造して,コンパイルに platex が用いられるようにすることで,日本語に対応します.これによって,本物のクラスファイルを用いることができるようになります.

なお,以降は,Ubuntu 14.04.02 で動作確認した方法について述べていきますが,他のバージョンの Ubuntu でも動くと思います.違うOSの場合は,インストールパスや設定ファイルのパスが違っているかもしれませんので適宜修正してください.

2016/4/3 追記:

ShareLatex のドキュメントが一新され,下記のインストール方法に関する公式ドキュメントは削除されました.ご注意ください.

ShareLatex のダウンロード&インストール

ShareLatex をインストールする前に,依存パッケージをインストールします.

# リポジトリの追加
sudo add-apt-repository ppa:chris-lea/node.js
sudo add-apt-repository ppa:chris-lea/redis-server
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv ABF5BD827BD9BF62
echo 'deb http://nginx.org/packages/ubuntu/ precise nginx' | sudo tee /etc/apt/sources.list.d/nginx.list
sudo apt-get update
# 依存パッケージをインストール
sudo apt-get install git build-essential curl python-software-properties zlib1g-dev zip unzip
sudo apt-get install nodejs
sudo npm install -g grunt-cli
sudo npm install -g node-gyp
sudo apt-get install redis-server
sudo apt-get install mongodb-org
sudo apt-get install aspell aspell-en
sudo apt-get install texlive*
sudo apt-get install nginx
sudo apt-get install libkrb5-dev

Redis の設定として,Append only オプションを設定することが推奨されています./etc/redis/redis/conf ファイルを編集し,appendonly no となっている行を appendonly yes に変更します.

つづいて,ShareLatex のインストールを行います.

sudo mkdir -p /var/www
sudo git clone -b release https://github.com/sharelatex/sharelatex.git /var/www/sharelatex
cd /var/www/sharelatex
sudo npm install
sudo grunt install
sudo adduser --system --home /var/www/sharelatex --no-create-home --group sharelatex
sudo chown -R sharelatex:sharelatex /var/www/sharelatex
sudo mkdir /etc/sharelatex
sudo mv config/settings.development.coffee /etc/sharelatex/settings.coffee
udo mkdir -p /var/lib/sharelatex/data
sudo mkdir -p /var/lib/sharelatex/data/user_files
sudo mkdir -p /var/lib/sharelatex/data/compiles
sudo mkdir -p /var/lib/sharelatex/data/cache
sudo mkdir -p /var/lib/sharelatex/tmp
sudo mkdir -p /var/lib/sharelatex/tmp/uploads
sudo mkdir -p /var/lib/sharelatex/tmp/dumpFolder
sudo chown -R sharelatex:sharelatex /var/lib/sharelatex

つぎに,設定ファイルを設定していきます.
まずは,/etc/sharelatex/settings.coffeeを開き,以下のように設定します.

DATA_DIR = '/var/lib/sharelatex/data'
TMP_DIR = '/var/lib/sharelatex/tmp'

つぎに,Upstartを設定し,OS 起動時に ShareLatex が起動するようにします.ShareLatexを動かすためには,11個のサービスを起動するよう設定する必要があります.簡単に設定できるように,Github にスクリプトを置きました.ついでに,nginx の起動設定もできるようにしておきました.

git clone https://github.com/ken1row/sharelatex-upstart
cd sharelatex-upstart
bash set_all_upstart_conf.sh
bash set_nginx_upstart.sh

つぎに,nginx を設定し,80番ポートでShareLatexにアクセスできるようにします./etc/nginx/conf.d/sharelatex.conf を開き,以下のように設定を記述します.また,デフォルトの設定ファイル(default.conf)を削除しておきます.

server {
    listen         80;
    server_name    _; # Catch all, see http://nginx.org/en/docs/http/server_names.html
    set $static_path /var/www/sharelatex/web/public;
    client_max_body_size 50M;
    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $http_x_forwarded_host;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_read_timeout 3m;
        proxy_send_timeout 3m;
    }
    location /socket.io {
        proxy_pass http://localhost:3026;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $http_x_forwarded_host;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_read_timeout 3m;
        proxy_send_timeout 3m;
    }
    location /stylesheets {
        expires 1y;
        root $static_path/;
    }
    location /minjs {
        expires 1y;
        root $static_path/;
    }
    location /img {
        expires 1y;
        root $static_path/;
    }
}

日本語論文に対応する

日本語論文に対応するための改造ポイントは以下の4点です.

  1. latex を (u)platex にする.ついでに,jpeg や png 画像等を埋め込むときに,自動的に xbb を生成するように,-shell-escape オプションをつけておく.
  2. dvipdf を dvipdfmx にする.プログラム引数の取り方が違うので注意が必要です.
  3. 日本語フォントを埋め込む.(デフォルトでは,英語フォントのみが埋め込まれます)
  4. PDF ビューアー(PDF.js)が日本語を表示できるようにする

1 に関しては,こちらの記事が参考になります.該当箇所の Coffee script を編集して,latex が platex になるように置換していきます.2, 3 は,pvipdf の呼び出し方を変更します.’dvipdf input.dvi output.pdf’ を ‘dvipdfmx -f texfonts.map -o output.pdf input.dvi’ となるようにします.4 は,PDF.js のサイトから bcmaps をダウンロードしてきて,pdf.js に,cmaps へのパスを指定します.

これらすべての変更を行うスクリプトを Githubのページ で公開しています.以下のコマンドを実行すれば,上記変更がすべて適用されます.

git clone https://github.com/ken1row/sharelatex-platex-patch
sudo cp -r sharelatex-platex-patch/* /var/www/sharelatex/
cd /var/www/sharelatex
sudo python patch.py --compile --verbose

管理者ユーザーを作成し,ShareLatex を開始する

再起動すると,upstart により,ShareLatex が起動します.Webブラウザから http://localhost/ にアクセスすると,ShareLatex が動いていることが分かると思います.さて,最後に,管理者ユーザーの登録を行います.

cd /var/www/sharelatex/web
sudo grunt create-admin-user --email joe@example.com

コンソールに,初期パスワードの登録用URLが表示されますので,ブラウザのアドレスバーにコピー&ペーストして管理者ユーザーのパスワードを登録します.その他のユーザーの登録は,管理者ユーザーでログインし,行います.メールは送信されませんので,表示されるアドレスをコピーしてパスワードを設定しましょう.

日本語論文執筆時には,プロジェクトの設定から,コンパイラを platex に設定してください.

まとめ

ShareLatex を自前サーバーで運用することで,日本語論文,特に,学会提供クラスファイルなどが使えるようになりました.

コメント

  1. tomahawk1114 より:

    最新のインストール方法、日本語対応を行えるように説明をお願いします。
    マシンはRaspberry pi 3、OSはRaspbianを使っています。

tomahawk1114 へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です