マクロツイーター

はてダから移行した記事の表示が崩れてますが、そのうちに直せればいいのに(えっ)

チョット arara してみた件

arara とは

簡単に言うと、arara とは「LaTeX 用ビルドツール」の一種であり、つまり、latexmk と同類のツールである。

arara の一番の特徴は「やりたいことを明示する」という点である。latexmk がコンパイルの手順を暗黙的に決めている点が多いのに対し、arara では手順を書いたファイルを事前に用意する必要がある。(ただし、pdflatex や biber などの有名なツールに対する手順ファイルはソフトウェア配布に含まれている。)

また、arara では文書ファイルにどの手順を適用すべきかも明示する必要がある。このために、文書ファイルの先頭にコメントの形で指示を記述する。例えば、下記のコメント行をファイルの先頭に書くと、そのファイルには pdflatex 用の手順が適用されることになる。

% arara: pdflatex

さっそく arara で文書をコンパイルしてみた

準備

TeX Live 2018 には arara が含まれているので、これを利用することにする。

arara は Java で実装されているので、Java 処理系(JRE)のインストールが必要である。

今回は、カスタムの設定を利用するので、そのための前設定を行う。以下、ホームディレクトリ(Windows では %UserProfile%)を ~ で表す。

  • カスタム設定用のディレクト~/.arara/rules を作成する。
  • カスタム設定を有効にするために、以下の内容の設定ファイル(YAML 形式)を ~/araraconfig.yaml に配置する。((“@{userhome}”がホームディレクトリを表す。YAML 形式の文法的制約のため、@{...} を含む値を記述する場合には、特に意味の無いタグ <arara> を前置する必要があるらしい。))

    [araraconfig.yaml]
    !config
    paths:
    - <arara> @{userhome}/.arara/rules
    filetypes:
    - extension: saty
      pattern: "^\\s*%\\s+"
    
カスタムの規則を作成する

先ほど説明したような“コンパイルの手順”のことを、arara では「規則」(rule)と呼ぶ。規則は YAML 形式のファイルを用いて定義される。

ここでは以下のような規則を作成した。

[satysfi.yaml]
!config
identifier: satysfi
name: SATySFi
command: <arara> satysfi @{fullpath} "@{file}"
arguments:
- identifier: fullpath
  flag: <arara> @{isTrue(parameters.fullpath,"--full-path")}

このファイルを ~/.arara/rules/satysfi.yaml に配置した。

文書に“指令”を追加する

arara で文書をコンパイルする場合、文書の先頭に所望の動作をコメントの形で書き込む。このコメント行のことを「指令」(directive)という。最も単純な形では指令は以下のようになる。

% arara: <規則名>

ここでは次のような文書ファイルを用意した。

[araratest.saty]
% arara: satysfi
@require: stdja

StdJa.document (|
  title = {とにかくararaしてみる};
  author = {某ZR};
  show-title = true;
  show-toc = false;
|) '<
  +pn {※ただし\TeX;以外}
>
文書を arara する

それでは、arara を起動して先ほどの文書 araratest.saty をコンパイルしてみよう。以下のコマンドを実行する。

arara araratest

実行結果は……

  __ _ _ __ __ _ _ __ __ _
 / _` | '__/ _` | '__/ _` |
| (_| | | | (_| | | | (_| |
 \__,_|_|  \__,_|_|  \__,_|

Running SATySFi... SUCCESS

……どうやら無事に arara できたようである。


ZR「いやだって、arara で TeX 文書をコンパイルしてもネタにならないじゃん」
*「そもそも SATySFi を出せば何でもネタになるという発想がアレ」
ZR「………………」