📖

Overleafが落ちたときに備える

2024/02/25に公開

モチベーション

論文執筆中にoverleafが落ちた。

https://twitter.com/overleaf/status/1761323536411439437

めったにないことっぽいが、体感3時間ほど作業できなかったので、もし同じようなことでもっと大きな被害だと困るので、ローカル環境でも実行できる用意をしておきたいと思い、その手順をメモして、次回の障害に備えられるようにする。

ローカルで作業できる状態にする

ローカルで作業できるようになれば落ちても問題ない。そもそもクラウドIDEに依存した作業という時点でリスクが大きい。

そこでいろいろ調べたら公式が提供しているツールキットがあった。

https://github.com/overleaf/toolkit

これを使って、ローカルでの論文執筆環境を整えてみる。

ローカル環境構築

作業を進める中で、 overleafに障害が起きてから環境を作っても遅い ことがわかった。

これから記載する作業は、overleafが生きている状態 で実施しておく必要がある。

また実際に障害下では動かしてないので、なにかしら別の問題が発生する可能性はあることを断っておく。

試した環境は Apple M1 OSX 13.4.1 です。

overleaf環境のセットアップ

この手順を実施する。

https://github.com/overleaf/toolkit/blob/master/doc/quick-start-guide.md

自分の場合は data/redis などのフォルダは手動で作成する必要があった。

http://localhost/launchpad からこれが見られるようになれば成功。

プロジェクトのバックアップ

overleafで作業するにはプロジェクトのドキュメントが必要になる。

また、複数ファイルにわかれていることがほとんどであり、
それらは overleafに障害が起きるとダウンロード不可能になる

よって、overleafが生きている状態 で作業を実施しておく必要がある。

手順は簡単で、 https://www.overleaf.com/project から zipファイルとしてプロジェクトのドキュメントをダウンロードしておくだけです。

overleaf環境でプロジェクトが読み込めるようにする

これがけっこうめんどくさかったです。
ただダウンロードしたzipファイルを読み込ませれば作業できるわけではありません。

プロジェクトに含まれるpackageをインストールしたり諸問題に対処する必要があり、
これはプロジェクトごとにケースバイケースだと思います。自分の場合を記載しておきます。

一般的な話っぽいところ

まずいくつかパッケージが独自にインストールされているため、最初にコンパイルしてもよくわからないエラーになります。

エラーがpackageによるものの場合、 Recompile from scratch を実施して、いちからコンパイルしないとエラー内容が出力されないという仕様らしいです。

そこで Recompile from scratch を実施すると、以下のようなエラーが出力されます。

これはつまり booktabs という package がインストールされてないことによるエラーらしいです。

なので、こういうパッケージ不足のエラーが消えるまで package をインストールしまくります。

package のインストールには事前に tlmgr というもののアップデートが必要です。

sadahiroyoshi (arm64):~/Documents/apps/othergit/overleaf
% docker exec sharelatex tlmgr update --self      
tlmgr: package repository https://mirror.ox.ac.uk/sites/ctan.org/systems/texlive/tlnet (verified)
[1/1, ??:??/??:??] update: texlive.infra [354k] (66822 -> 69740) ... done
running mktexlsr ...
done running mktexlsr.
tlmgr: package log updated: /usr/local/texlive/2023/texmf-var/web2c/tlmgr.log
tlmgr: command log updated: /usr/local/texlive/2023/texmf-var/web2c/tlmgr-commands.log

インストールしてコンパイル、をつづけるとこんな感じに足りないパッケージが出てきます。

e.g., interspeech 2024

% docker exec sharelatex tlmgr install booktabs
% docker exec sharelatex tlmgr install caption 
% docker exec sharelatex tlmgr install siunitx
% docker exec sharelatex tlmgr install lipsum 
% docker exec sharelatex tlmgr install tipa  
% docker exec sharelatex tlmgr install enumitem
% docker exec sharelatex tlmgr install xkeyval

これらをインストールしたらPDFのコンパイルは成功するでしょう。

interspeech2024特有っぽいケース

ただ自分のケースだとバグって表示されずでした。

そこでいろいろ調べると、原因は2つありました。

文字フォントがインストールされていない

interspeechのデフォルトフォントはtimesとtimes rowanですが、それがデフォルトではインストールされていないらしく、文字が出てこなかったのだと考えられます。

これは以下で解決できます。

% docker exec sharelatex tlmgr install times   

これをしたあと Recompile from scratch もしくは再起動でなんとかなるはずです。

\url{} 記法に対応していない

クラウドのoverleafだとなにも入れずとも \url{} が表示されますが、ローカルだとそうならないらしいです。

なので以下に倣って記載を追加しました。
ref. https://ja.overleaf.com/learn/latex/Hyperlinks#Styles_and_colours

e.g.,

\documentclass{Interspeech2024}

\usepackage{hyperref}
\hypersetup{
    colorlinks=true,
    linkcolor=blue,
    filecolor=magenta,      
    urlcolor=cyan,
    pdftitle={Overleaf Example},
    pdfpagemode=FullScreen,
    }
\urlstyle{same}

\textsf{} が表示されない

テンプレートに含まれるこのサンセリフ体が表示されませんでした。

以下をインストールしてもうまくいかずで、自分は使わないので諦めました。。

% docker exec sharelatex tlmgr install pdf2ps  
% docker exec sharelatex tlmgr install ps2pdf

サービスが落ちた時の作業を想定しておく

overleafが落ちても、ローカルの作業タブにはファイルの内容が残っていました。
サービスが落ちたかどうかはコンパイルができないことで自分は気がつきました。

つまり、あらかじめテンプレートでローカル環境を構築しておき、クラウドで作業するなかでコンパイルがなんか落ちるようになったら作業中のtexファイルをコピー、本当に落ちてたらそのコピーをローカルにペーストして作業再開する、というのが想定として良いんじゃないでしょうか。

使い勝手

実際、ローカルで作業できるようになることは安定性ではメリットですが、
自分の環境だとコンパイルが遅かったです(体感だと5~8秒)。

加えて、自分はbibtexをzoteroから自動連携してるので、
そのあたりが使えないのは不便だったりします。

あと、当たり前ですがコメントが使えないです。地味にストレスが大きいです。

よって、クラウド環境との差異がそれなりにあるので、
デフォルトの作業環境をローカルにしよう!とはならなかったです。

まとめ

ローカル環境はつくれるがクラウドより不便なので、
緊急時の備えとして使えそうかなー、という印象です。

とはいえ、overleafが落ちてもやれる作業はあるはずなので、もしoverleafが落ちてもTableだったりレイアウトだったりを調整する環境はあるよ! という安心感を持っておきたいかどうかで、環境を整えるかどうかを決めるといいんじゃないでしょうか。

まあ勢いで書いてみましたが、あとあと考えてみれば、相当大規模な障害なら〆切は伸ばしてくれそうな気もします。。

それでは。

Discussion