LoginSignup
4
2

More than 5 years have passed since last update.

Grunt.jsでTeXのコンパイルを自動化する

Posted at

最初に断っておきますが,TeX歴は半年です.とりあえず使えるようになることに専念してきたので,TeXの一般的な使い方などはまだ良く分かっていまいせん.

「Emacsを使えば幸せになれるのだろうな・・・」と思いつつ,任意のエディタを使って,保存されたタイミングでコンパイルしてみようと考えたのがキッカケです.他にも良い方法があると思いますが,覚えたてのGrunt.jsを使ってみたくて書いています.

なお,OSはMacOS Xを使っています.他のOSの方は適宜読み替えてください.

前提条件とインストール

必要なソフトウェアはTeXです.私はMacTex2013をインストールした後でTeXShopを上書きインストールしました.TeXは様々な実装が有り,どれを使って良いか分からないので,TeXShopの環境設定 - 内部設定 を見て「simpdftex」というコマンドを選びました.

また,node.jsやnpmも必要なのでインストールしておいてください.

npm周りでインストールするパッケージは以下のものです.

grunt
gtunt-cli
grunt-contrib-watch
grunt-exec

順番にインストールしましょう.基本的にノーエラーでインストールできるはずです.

$ npm install grunt-cli -g  // すでにインストールしあるなら不要です
$ mkdir tex
$ cd tex
$ npm init  // 質問に適当に回答してください.
$ npm install grunt --save-dev
$ npm install grunt-contrib-watch --save-dev
$ npm install grunt-exec --save-dev

Gruntfileの内容

次にGruntfile.jsを作成します.この例では,test.texをコンパイルしてPDFを出力します.また,分割コンパイルに対応するため,watch対象を*.texとしています.

Gruntfile.js
module.exports = function(grunt) {
    'use strict';
    grunt.initConfig({
        watch: {
            tex: {
                files: ['*.tex'],
                tasks: ['exec:build']
            },
        },
        exec: {
            build: {
                cmd: 'simpdftex platex --mode dvipdfmx --maxpfb --extratexopts "-file-line-error" test.tex'
            },
        },
    });

    grunt.loadNpmTasks('grunt-exec');
    grunt.loadNpmTasks('grunt-contrib-watch');

    grunt.registerTask('default', ['exec:build', 'watch']);
};

使い方

$ grunt

を実行すると,即座にコンパイルすると共にwatch状態に入ります.test.texを任意のエディタで編集して保存すると,保存されたことをトリガとして,TeXのコンパイルが実行されます.

出力ファイルであるtest.pdfをプレビュー.appで開いていれば,コンパイル終了後にプレビュー.appに切り替えるだけで更新されたPDFが表示されます.

まとめ

「わざわざこんな面倒なことしなくても!」とか「普通,これを使うよね!」とかのお叱りがありましたらお寄せください.

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2