ryuna’s diary

ryunaが適当にまとめまーす

パッケージの入れ方が分かんなくてもSublime Text単体でコンパイルを済ませたい!

今回はSublime TextでTeXコンパイルをしたいけど, パッケージインストールに挫折した人とか,既にw32texがPCに入ってる人のための内容のつもりです.

なんでこうなった

テキストエディタsublime Textを使ってるけどlatex?のパッケージ入れ方わかんないし,コマンドプロンプトw32texplatexを呼んでればいいやと思ってここ数年texをさわさわしてたけど, つい最近sublime textにbuild systemてゆう便利な機能があってその内容も自分で書けるって知ったのが発端です.

結論

Sublimeでコンパイル - code snippets

このようにしとけばわざわざコマンドプロンプトを開く必要もなくSublime Textのみで完結させることが可能になる.

しかし,texなどの環境はどのpcに入っているわけでもないので出かけ先でtexを使用したい場合はCloud LaTeXやUSBにTeX環境を構築しておくことになる.

その場合,環境変数は指定しないとだし,パスも毎回変えるのは面倒. そこで,usbに構築してあるドライブレターが変わってもフレキシブルに対応できるように中身を書き換えちゃおう.

準備段階

本稿では以下のソフトウェアが必要です.

  • w32texなどのtexが使えるようになるtool
  • sublime Text
  • SumatraPDF等の上書き可のPDFviewer(上書き可能でなくても大丈夫)

adobeだとコンパイルの度に閉じる面倒があるので,SumatraPDFを使うことにする.

本稿の3ステップ

  1. sumlime-buildファイルを作成
  2. PDFviewerを起動するためのbatファイルを作成
  3. ctrl+Bでtexコンパイルすると指定viewerでPDFが開く

詳しいやり方

説明が面倒なので,どのPCにもw32tex等が入ってることにする.

だから今回はPDF表示の部分だけバッチファイルで補う

ここで,

バッチファイル(Batch File)とは、MS-DOSOS/2Windowsでのコマンドプロンプト(シェル)に行わせたい命令列をテキストファイルに記述したもの。

らしい.すなわちwindows向けかもしれない.

buildsystemの作成

コンパイルした後PDFを開きたいけどPDFviewerがUSBに入ってるとき,USBを刺した時にドライブレターが決まるので,この部分はbatファイルで補うことにする.(ワンチャンbuildsystemの変数だけで行けそうな気もする.

{
  "cmd": [
    "platex","$file","-interaction=nonstopmode","&",
    "dvipdfm","$file_base_name","&",
    "${packages}\\User\\platex.bat","$file_base_name.pdf"
    ],
   "shell":true
}

5行目でbatファイルに対して,dvipdfmxで作成されたPDFファイル名を渡してる.

また5行目からもわかるようにbatファイルは sublime-buildファイルの保存先と同じ場所である,package/User/に保存することにする.名前は適当.

なお,この文章中で,selectorの設定を行うと*.texに対してはbuild sytemが自動でplatexに設定されるようにできたりするらしい.ぜひ導入するべき.

platex.batの作成

PDFを起動するだけ

@echo off
set PATH=%~d0\usr\SumatraPDF;%PATH%
start SumatraPDF.exe %1
exit /b 0

batファイルの書き方はよくわかんないので不要な文などが多くあるらしい.(動くからいい的な

実行方法

sublimeTextでTeXを開く,toolのbuildsystemをplatexに指定して,ctrl + B

何もエラーがなければ,SumatraPDFが起動し,生成されたPDFファイルが表示される.

まとめ

sublime Textのbuild sytem機能を用いてLaTeXコンパイル,PDF化,PDFの表示ができるようになりました.今までのmakefileより圧倒的成長✌ やってること的にはEmEditorコンパイル機能と変わらない気がするけど()

build systemはコマンドプロンプトを省略できるのは細かいけど応用が利きそうです.