卒研を倒すための装備の整え方

タイトルはoverclaimなので話半分に読みましょう。

TL;DR

TeXを使って論文を書いているときに gitを使って管理したり、自動校正を導入したりする方法についてなんとなく話します。 具体的には

  • latexmkを使った自動ビルド
  • 自動校正ツールの使い方
  • gitにとりあえずファイルを放り込む

みたいな話です。

だいたい、このリポジトリの説明。

github.com

まえがき

皆さん!楽しい研究ライフを送っていますか? まあ、楽しいことも楽しくないこともあると思います。 私は死んでます。

さて、研究をしていてもそれで終わりでなくて最終的には何かしらの記録を残す必要があります。 そう、論文です。 論文を書くのは大変ですね。 ところでWordで論文を書いていて体裁がひどいことになったりしていませんか? あるいは、突然論文がすっ飛んでしまったり?

どうせなら、論文を書く環境をあらかじめ整えておきたいですよね。 ここではTeXにターゲットを絞って論文を倒すために考えられることを列挙します。 君も論文をやっていけ。

論文を書き始める前に

論文を書き始める前の設定が論文がうまく書けるかを決めると言っても過言ではないので、先にその話をします。 論文を書くときに予めフォーマットが定まっているのならそのフォーマットを使いましょう。 私が卒論を書いたときはTeXフォーマットが用意されていなかった記憶があり、キレながら適当なフォーマットをでっち上げた記憶があります。 フォーマットをでっち上げる必要がある人はフォントサイズとフォント指定、余白に気をつけましょう。 フォントサイズについては私が過去に書いた記事を読むといろいろわかります

装備を整える

論文を倒すために装備を整えましょう。戦いに出るために武器を持たぬ人間はいない。 同じように我々もこれから論文と戦うのだから、装備をと整えずして他に何をするのかという話になります。

環境設定

倒すも何も、その前にまずは環境設定をする必要があります。 私はLinuxWindowsが動くマシンしか持っておらず、Macではどのように設定するのかよくわかりません。 もしもTeXの環境をインストールしていない人がいる場合はTeX Liveをインストールしておくといいと思います。具体的にはTeX Live - TeX Wikiを参照してください。

ついでに使うエディタも決めてしまいましょう。 いっとき前ならばTeXWorksなりTeXShopなりの統合環境を使うのがデフォルトという感じでしたが、今はElectronベースのエディタを使ってプラグインで環境を整えるのがイケてるんじゃないでしょうか。 この記事ではElectronベースイケイケエディタとしてVisual Studio Codeを前提にします。 他のElectronベースイケイケエディタを使っている人は適宜読み替えてください。 具体的な設定はVisual Studio Code - TeX Wikiを参考にしてください。 LaTeX Workshopはイケてる拡張機能だと思います。普段Visual Studio Codeをあんまり使わないのでイケてる具合があんまり説明できないので、そこは他の人の記事を見てください。

あと、この記事では環境の前提条件をupLaTeXとします。LuaLaTeXとかだといくつか楽になるのかもしれませんが、あんまり詳しくないのでここでは説明しません。

ビルドを自動化する

ちまちまとファイルを書いてからコマンドを叩いて結果を確認したいか? そんなわけはないですね。

Visual Studio Code + LaTeX Workshopを使っていればファイル保存時に自動でビルドが走って嬉しい!!ですね。 LaTeX Workshopだと標準でlatexmkというlatexビルドのための便利ツールキットが使えるので、これを実際に動作するようにすれば、保存時にいい感じにビルドしてくれるはずです。 武器は装備しないと意味がないぜ!

upLaTeX用の一番簡単な設定はこれです。

あとは論文用ディレクトリ直下にlatexmkrcとして突っ込んでおけば、LaTeX Workshopがlatexmkを使ってコンパイルするときに自動参照してくれます。

gitを使って版を管理する

論文を書いているときにどこを書いているかわからなくなったり、あるいはいきなりファイルが失われたりする可能性があるので、事前にバックアップを十分取っておきたいですよね。 セーブスロットを用意して保存できると良い。 とりあえずDropboxみたいなオンラインストレージを使っているなら、Dropboxが管理するディレクトリの中に論文を用意して管理しましょう。

それとミスったときに後戻りできると嬉しいのでgitを使って管理しましょう。 Visual Studio Codeだとgitを直接叩く拡張機能がすでに同梱されているので、あとはgitの実行ファイルが存在していれば楽に使えます。 Visual Studio CodeでGitを利用する (1/3):特集:Visual Studio Code早分かりガイド - @ITなどを読むと具体的にどうすればいいかがわかります。

とりあえず手が一旦止まったらgitメニューを開いて、こんな感じで表示されている[+]マークをクリックしてファイルを登録して適当にメッセージを入力し[✔]をクリックしてセーブするといいです。

あとは適当なオンラインリポジトリサービスにPrivateでリポジトリを用意しておくと、もしものときにネットの向こうにファイルがあって便利です。

gitを使う時はこんな感じのファイルを作って.gitignoreという名前で論文と同じディレクトリに置いておくと、余計なファイルが表示されなくて心が落ち着きます。

怪しげな場所を潰す

文章をガリガリ書いているとなんだか文章がぐんにゃりしてくることがあります。 例えば今のこの文章もだいぶぐんにゃりしています。 こういうことになるのは防ぎたいところですが、それなりに難しいのである程度機械になんとかしてもらいましょう。

世の中には自動校正ツールと呼ばれるものがいくつかあってこれらを使うといい感じに文章の確認ができます。 代表的な自動校正ツールは

  • textlint
  • RedPen

のふたつがあります。 textlintはnodejs製でVisual Studio Code向けにプラグインも用意されていて便利でいいですね。 RedPenはJava製のアプリで別途サーバーを用意して実行するケースで強い気がします。

普段はRedPenを使うようにしています。多人数で原稿を書いてgitリポジトリと連携するときなんかはCIを使ってRedPenを回すほうが楽ちんな気がします。 nodejsと向き合っていける人は、textlintを使うのもいいでしょう。

RedPenだとXMLで設定を書くことができて次のような形でいくつか簡単なルールを設定できます。

<redpen-conf lang="ja" variant="zenkaku2">
  <validators>
    <validator name="SentenceLength">
      <property name="max_len" value="100" />
    </validator>
    <validator name="HankakuKana" />
    <validator name="JapaneseStyle" />
    <validator name="DoubleNegative" />
    <validator name="SectionLevel">
      <property name="max_num" value="3" />
    </validator>
    <validator name="KatakanaEndHyphen" />
    <validator name="GappedSection" />
    <validator name="ListLevel" />
  </validators>
</redpen-conf>

この設定だと

  • 句読点を,.にする
  • 文長を100文字に制限する
  • 半角カナを使わない
  • 文末のスタイルを統一する
  • 二重否定を禁止する
  • 節の最大深さを3までにする(chapter->section->subsectionまで)
  • カタカナ終わりの長音を抑止する
  • 空のセクションを作らない
  • 入れ子の箇条書きの深さ制限をする

といったことが実現できます。

具体的に何が設定できるかはRedPen 1.10 ドキュメントなどを見ると良いでしょう。 実際のエラーメッセージはこんな感じで表示されます。

autobuild-latex.tex:11: ValidationError[JapaneseStyle], 不正な日本語のスタイルを発見しました "あった" at line: それに加えて,各執筆者による原稿をいざ結合してひとつの冊子として組版しようとした時に,誤字・脱字があったり内容にいくらかの誤りが含まれているということになると大変です.
autobuild-latex.tex:15: ValidationError[JapaneseStyle], 不正な日本語のスタイルを発見しました "である" at line: そこで今回は,継続的インテグレーション(CI)サービスであるwerckerを用いてRedPenによる自動校正とupによる自動タイプセットに挑戦しました.
autobuild-latex.tex:77: ValidationError[JapaneseStyle], 不正な日本語のスタイルを発見しました "である" at line: 今回のタイプセットではディストリビューションのひとつであるTeXLiveに同梱されている,upを用います.
autobuild-latex.tex:81: ValidationError[JapaneseStyle], 不正な日本語のスタイルを発見しました "である" at line: ところで,DockerイメージのリポジトリであるDocker Hubを見るとどうやらTexLive2017に対応したDockerイメージは無いようです.
autobuild-latex.tex:138: ValidationError[JapaneseStyle], 不正な日本語のスタイルを発見しました "である" at line: ただし,バージョンによってはSource Han SerifおよびSource Han Sansが使えない可能性があるため,下記のコマンドによってバージョンが1.0以降であることを確認しておきます.

こうやって見るといくつかのエラーは本当にそうなってるのかわからないところがありますが、 最低限ヤバそうな部分を潰すのにこういうのは使えます。 真面目に怪しげな箇所を潰すときは指導教官に相談してください。

終わりに

本当はこれをAdCalの記事にする予定だったんですが、なんとなく記録がてら別の日に投稿することにしました。 実際このワークフローでうまくいったんですか?と聞かれるとなんとも言えないところですが、備えあれば憂いなしということで一つお願いします。 ちなみにDockerHubには私の作ったredpen-cliのDockerイメージとTeXLive + SourceHanFontsのDockerイメージが転がっているので大抵のことをやるときには便利だと思います。