マクロツイーター

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

スヤァTeX を作ってみた

2012/12/01 〜 2012/12/25

TeX & LaTeX Advent Calendar

誠に遺憾ながら、14 日目の担当が登録されなかったので、再び私(ZR)が担当します。

*  *  *

確かに、\relax より ( ˘ω˘ )スヤァ… の方が直感的なので、これが使えれば (La)TeX の使い勝手が向上することは間違いないでしょう。しかし残念なことに ( ˘ω˘ )スヤァ… は普通の制御綴の表記を成していないので、単純に

\let( ˘ω˘ )スヤァ…\relax

とすることはできません。((これを実現しようとすると、カテゴリコードの設定について「先頭文字を 0 にして残りの文字を 11 にする」必要があるが、「( ˘ω˘ )スヤァ…」は ASCII 文字や空白文字を含むので、普通の LaTeX が動く状況でそのような設定を行うことは無理である。))

というわけで、( ˘ω˘ )スヤァ… が使えるように LaTeX を拡張した新フォーマット「スヤァTeXを開発しました!

インストール方法

アーカイブに含まれる README ファイルを参照して下さい。新しいフォーマットの導入なので、初心者にはハードルが高いことは確かですが、( ˘ω˘ )スヤァ… を是非とも使いたいという人にとっては手を煩わすだけの価値がきっとあるはずです!

作業が済んだら、スヤァTeX が正常にインストールされたかを次の文書を用いて確認しましょう。

[test-suyahtex0.tex]
% 文字コードUTF-8
\documentclass[a4paper]{article}
\nonstopmode % \showで止まらなくする
% ( ˘ω˘ )スヤァ… を含むマクロを定義して中身を表示させる
\def\test{Hello, \TeX( ˘ω˘ )スヤァ…}
\show\test
\begin{document}
( ˘ω˘ )スヤァ…
\end{document}

suyahtex test-suyahtex0.tex」を実行すると、この文書が スヤァTeX で処理されます。画面出力の中に次のような記述があり、かつエラーなく終了すればインストールは成功しています。

> \test=macro:
->Hello, \TeX \relax .
l.4 \show\test

スヤァTeX では文書中の「( ˘ω˘ )スヤァ…」が全て「\relax」と解釈されるので、\test マクロの定義本体にも \relax が含まれることになります。

使用例

スヤァTeX では \relax の代わりに ( ˘ω˘ )スヤァ… が使えるので、例えば修正ユリウス通日を求める TeX コードを次のように書くことができます。

[julian-suyah.sty]
% 文字コードUTF-8
\newcount\xx@cnta
\newcount\xx@cntb
%%<*> \julian{年/月/日}
% 指定の日付に対する修正ユリウス通日の値をマクロ
% \thejulian に返す.
\newcommand*\julian[1]{%
  \edef\xx@tmpa{#1}%
  \expandafter\xx@julian@a\xx@tmpa///( ˘ω˘ )スヤァ…
}
\def\xx@julian@a#1/#2/#3/#4( ˘ω˘ )スヤァ…{%
  \xx@cnta=#1( ˘ω˘ )スヤァ…
  \xx@cntb=#2( ˘ω˘ )スヤァ…
  \ifnum\xx@cnta<\@ne \xx@cnta=\@ne \fi
  \ifnum\xx@cntb<\@ne \xx@cntb=\@ne \fi
  \ifnum\xx@cntb<3( ˘ω˘ )スヤァ…
    \advance\xx@cntb12( ˘ω˘ )スヤァ…
    \advance\xx@cnta-1( ˘ω˘ )スヤァ…
  \fi
  \mathchardef\xx@year\xx@cnta
  \chardef\xx@month\xx@cntb
  \multiply\xx@cnta1461( ˘ω˘ )スヤァ…
  \divide\xx@cnta4( ˘ω˘ )スヤァ…
  \xx@cntb\xx@year
  \divide\xx@cntb100( ˘ω˘ )スヤァ…
  \advance\xx@cnta-\xx@cntb
  \divide\xx@cntb4( ˘ω˘ )スヤァ…
  \advance\xx@cnta\xx@cntb
  \xx@cntb\xx@month
  \advance\xx@cntb-2( ˘ω˘ )スヤァ…
  \multiply\xx@cntb520( ˘ω˘ )スヤァ…
  \divide\xx@cntb17( ˘ω˘ )スヤァ…
  \advance\xx@cnta\xx@cntb
  \advance\xx@cnta#3( ˘ω˘ )スヤァ…
  \advance\xx@cnta-678912( ˘ω˘ )スヤァ…
  \edef\thejulian{\the\xx@cnta}%
}

このコードが正しく動くか確認してみましょう。

[test-suyahtex1.tex]
\documentclass[a4paper]{article}
\usepackage{julian-suyah}
\begin{document}
\julian{2012/12/25}
MJD number for 2012/12/25 = \thejulian.
\end{document}

というわけで、これからは ( ˘ω˘ )スヤァ…したい人も安心して TeX プログラミングができますね!

Happy スヤァTeXing!