LaTeX
ShareLatex

ShareLatexでjarticleを使えるようにする

More than 3 years have passed since last update.


概要

Web上でTeXの組版ができるShareLatexというサービスがあります。自前の環境を用意しなくてもいいし,他の人と共有できたりと便利です。それのオープンソース版がGitHubGithubのShareLatexにあります。

ShareLatexは便利なのですが,日本語の対応がいまいち。公式ページにもやり方は書いてありますが,いまいちです。今回,オープンソース版のShareLatexを修正して,jarticleを使って,platexでビルドできるようにしたので,そのやり方を書いときます。


ShareLatexの修正

ShareLatexのインストール方法はGithub上にある通りやります。Fedora上で今回やりましたが,TexLive自体はyum経由ではなく,ネットワークインストーラを使ってやったほうがいいです。参考TeX wikiのページ


修正のおおまかな内容


  • xelatexのコマンドをplatexに置き換えるために,既存のxelatexコマンドで処理する部分をplatexに書き換える。

  • .latexmkrcの設定でdviからPDFへの変換をdvipdfmxになるようにする。

  • bounding boxの設定を自動化するために,extractbbの自動設定を行う。

おおまかな変更内容は上の3つです。順にやっていきます。


既存のコマンドをplatexに修正する

ShareLatexではpdfLatex, Latex, xeLatex, LuaLatexがコンパイラとして選択できるようになっています。コンパイラを追加するのは大変そうなので,既存のどれかをそっくりplatexに変更します。xeLatexなんて使わなさそうなので,これを修正することにしました。

ShareLatexのソースコードをGithubからクローンしてくると,個別のパッケージからできているのが分かります。修正するのはclsi, webのソースコードです。

基本的にはxelatexというところをplatexに書き換えているだけです。若干違うのはclsiの_platexCommand: (mainFile) ->のところ。ここはlatexmkにわたすコマンドの内容なので,Latexの処理を参考にします。"-pdfdvi"のオプションを渡さないといけません。platexはdviまで処理してくれないからです。


clsiの修正

$ git diff

diff --git a/app/coffee/LatexRunner.coffee b/app/coffee/LatexRunner.coffee
index cd6e356..9467553 100644
--- a/app/coffee/LatexRunner.coffee
+++ b/app/coffee/LatexRunner.coffee
@@ -20,8 +20,8 @@ module.exports = LatexRunner =
command = LatexRunner._pdflatexCommand mainFile
else if compiler == "latex"
command = LatexRunner._latexCommand mainFile
- else if compiler == "xelatex"
- command = LatexRunner._xelatexCommand mainFile
+ else if compiler == "platex"
+ command = LatexRunner._platexCommand mainFile
else if compiler == "lualatex"
command = LatexRunner._lualatexCommand mainFile
else
@@ -43,9 +43,9 @@ module.exports = LatexRunner =
Path.join("$COMPILE_DIR", 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'",
Path.join("$COMPILE_DIR", mainFile)
]

diff --git a/app/coffee/RequestParser.coffee b/app/coffee/RequestParser.coffee
index 66765fb..a32dc11 100644
--- a/app/coffee/RequestParser.coffee
+++ b/app/coffee/RequestParser.coffee
@@ -1,5 +1,5 @@
module.exports = RequestParser =
- VALID_COMPILERS: ["pdflatex", "latex", "xelatex", "lualatex"]
+ VALID_COMPILERS: ["pdflatex", "latex", "platex", "lualatex"]
MAX_TIMEOUT: 60

parse: (body, callback = (error, data) ->) ->


webの修正

$ git diff

diff --git a/app/coffee/Features/Compile/ClsiManager.coffee b/app/coffee/Features/Compile/ClsiManager.coffee
index 6395111..2278858 100755
--- a/app/coffee/Features/Compile/ClsiManager.coffee
+++ b/app/coffee/Features/Compile/ClsiManager.coffee
@@ -51,7 +51,7 @@ module.exports = ClsiManager =
type: file.type
return outputFiles

- VALID_COMPILERS: ["pdflatex", "latex", "xelatex", "lualatex"]
+ VALID_COMPILERS: ["pdflatex", "latex", "platex", "lualatex"]
_buildRequest: (project_id, settingsOverride={}, callback = (error, request) ->) ->
Project.findById project_id, {compiler: 1, rootDoc_id: 1}, (error, project) ->
return callback(error) if error?
diff --git a/app/coffee/Features/Project/ProjectOptionsHandler.coffee b/app/coffee/Features/Project/ProjectOption
index 0a0b02e..f519ea4 100644
--- a/app/coffee/Features/Project/ProjectOptionsHandler.coffee
+++ b/app/coffee/Features/Project/ProjectOptionsHandler.coffee
@@ -3,7 +3,7 @@ logger = require('logger-sharelatex')
_ = require('underscore')
settings = require("settings-sharelatex")

-safeCompilers = ["xelatex", "pdflatex", "latex", "lualatex"]
+safeCompilers = ["platex", "pdflatex", "latex", "lualatex"]

module.exports =
setCompiler : (project_id, compiler, callback = ()->)->
diff --git a/app/views/project/editor/left-menu.jade b/app/views/project/editor/left-menu.jade
index 283a5fd..8e1f4f9 100644
--- a/app/views/project/editor/left-menu.jade
+++ b/app/views/project/editor/left-menu.jade
@@ -66,7 +66,7 @@ aside#left-menu.full-size(
)
option(value='pdflatex') pdfLaTeX
option(value='latex') LaTeX
- option(value='xelatex') XeLaTeX
+ option(value='platex') pLaTeX
option(value='lualatex') LuaLaTeX

.form-controls(ng-show="permissions.write")


grunt install

上のファイルが修正できたら,ビルドするために

grunt install

でインストールします。


.latexmkrcの設定

ShareLatexではlatexmkを使って,コンパイルの自動化を行います。LaTeXでは複数回コンパイルするのは当たり前ですが,latexmkを実行すると,必要なコマンド処理を自動的に判断して勝手にやってくれます。今回はじめて知りました。自分が使うときにも便利そうです。

latexmkでdviからPDFへの変換がdvipdfmxで行われるように,ホームに.latexmkrcファイルを生成して,以下の内容で保存します。

#!/usr/bin/perl

$latex = 'platex';
$bibtex = 'pbibtex';
$makeindex = 'mendex';
$dvipdf = "dvipdfmx %O -o %D %S";
$dvips = 'dvips';

ShareLatexを起動するユーザーごとにこの設定するのが面倒なら,大本のlatexmkの内容を編集してもいいかもしれません。latexmkの大本のコマンドは単なるPerlのスクリプトなので,編集できます。


extractbbの自動化

platexでは,jpegやPDFなどを図として使うとxbbファイルを作る必要があります。xbbファイルを自動的に作成してくれるようにします。TeX wikiのページを見て,設定します。


修正したShareLatexを使ってみた

platexが使えるようにして,documentclassにjarticleを指定したのが下記の図です。コンパイルもできて,日本語のPDFが出てきています。

ShareLatex1.jpg


まとめ

ShareLatexでplatexを使って,jarticleを使ったファイルをコンパイルできるようにしました。latexmkのコマンドが分かれば,なんとか修正できると思います。

ブラウザ上で日本語LaTeXを使えるサービスにCloud LaTeXというのがあります。無料で使えるのでいいんですが,外部のサーバーにデータを置きたくないというわけで,自前のサーバー上で使えるShareLatexを変更しました。