Help us understand the problem. What is going on with this article?

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を変更しました。

ishigaki
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away