Hatena::ブログ(Diary)

マクロツイーター このページをアンテナに追加 RSSフィード Twitter

2011-11-11

1 から始める TeX 〜1TeXの紹介〜

iamjatex パッケージに関しては、その主たる目的は十分に達成されているといえると考えている。しかし作者の発表を見ると、本質ではないものの、主張する特質で、不足があると思われるものが存在する。

わずかな文字数で組版ができる!
壊れているキーがあっても大丈夫! 「わたしのやてふ環境」(山本 宗宏)

少数の種類の文字で入力できる*1というが、この点に関しては大いに改善の余地があることを指摘したい。

発表資料の iamjatex 環境の中の記述を見ると、既におよそ十種もの文字が使われている。この数は確かに多くはないが、例えば Brainfuck 言語が 8 種類の文字からなることを考えると、決して非常に少ないとはいえないと感じる。

これに対しては、「絵を描くことに対してより禁欲的な態度をとり、全て 1 と X で記述する」ことで 2 種まで節減できるという反論があり得よう。この事自体は正しいが、しかしそれは「iamjatex の中の文字種」の話であることを見過ごすべきでない。すなわち、iamjatex 環境を表すための「\begin{document}」の文字、あるいは LaTeX 文書で必然的に存在する「\documentclass」の記述のために更なる文字種の使用が強いられる。これは「わずかな文字種」を目的とした場合には致命的であると言わざるを得ない。

これを根本的に解決する方法として次のものを提案する。

  • LaTeX 言語について、全ての記述を文字〈1〉だけで行う代替的な記法を用いる

例えば「\relax」の場合、その文字列の各文字の ASCII 符号値は順に 92, 114, 101, 108, 97, 120 である。この各々の整数値を所謂「1 進数表記」で表し、改行で区切ることにする。

11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111

無論、実際には「\documentclass」から始まる LaTeX 文書全体が変換対象となるので、膨大な個数の〈1〉が現れることになる。ともかく、この変換により、任意の命令を含む LaTeX 文書を〈1〉だけで記述できる。

しかし、1 つ問題がある。変換された文書自体(ファイル名を sample.tex とする)は LaTeX の形式に従うものでないので、latex コマンドで処理させることができないのである。これに対しては、独自のフォーマットを用意することで対応する。すなわち、後で紹介する iniTeX 用の初期化ファイル 1tex.ini からフォーマット 1tex.fmt を生成する。これを用いる TeX のコマンドを 1tex として用意する。すると、ファイル sample.tex を以下のように組版できる。この組版結果は「元々の」LaTeX 文書と同一になるように 1tex.ini が設計されている。

1tex sample.tex

この提案方法の欠点を 1 つ挙げると、独自のフォーマットの採用により LaTeX の初歩的な使用者にとっての使用に多少の困難が伴うことである。しかし、iamjatex を用いた解決法が 20 種超の文字を必要とすることと比較すると、95 %以上の効率化に成功している。従って、先に述べた困難を差し引いても、この方法が「わずかな文字種」を志向する者にとって非常に魅力のあるものであることは確かであろう。

なお、この新しいフォーマットによる処理系を「1TeX」(“one-TeX”と読む)と名づけた。ロゴは以下のようにする。*2

f:id:zrbabbler:20111112100158p:image

※ 1TeX は以下の場所で公開している。

(重要な追記) 1TeX ではソースの終端判定を空行(〈1〉のない行)で行っている(空行以降は読まれず、また、空行が見つからずにファイルの終端に達しても処理が終わらない*3)。ソースファイル中に必ず空行が必要となる。


(前の記事の続き)

ZR「というネタを考えてみた」
*「普通の TeX ユーザにフォーマット作成ができる訳がないじゃん」
ZR「…………。」

*1:「わずかな文字数」という表現については、誤解を避けるため、「わずかな文字種」というべき(文字数は寧ろ膨大である)であろうが、それは全く瑣末なことである。

*2:会話および文字上での描写の便宜を考慮して、ベル等の鳴り物を伴わない単純なものとした。

*3:技術的な制限による。

abenoriabenori 2011/11/12 01:33 > iamjatex を用いた解決法が 20 種超の文字を必要とすることと比較すると、95 %以上の効率化に成功している。
tかeかxが壊れていたら文書が書けない気がする…….あ,Enterも必要かな.

munepimunepi 2011/11/12 02:04 すばらしいです、1tex!
# ちなみに、わたしは「普通の TeX ユーザ」です!

ちょっと草植えときますね型言語 Grass
http://www.blue.sky.or.jp/grass/
系ですよね。

実は、
プログラミング言語「ほむほむ」
http://d.hatena.ne.jp/yuroyoro/20110601/1306908421
の TeX 版も面白いと思っていましたが、
さすがに texconf でやると、ドン引きされると思い、やめました。
「ほむほむ」を知っている前提が必要なので (^^;;

zrbabblerzrbabbler 2011/11/12 23:49 >abenoriさん
「壊れても大丈夫」自体は余り追究しない方向で ;-)

>munepiさん
># ちなみに、わたしは「普通の TeX ユーザ」です!
あれ、確か「普通の TeXnician」だったはずだが。おかしいな。

>ちょっと草植えときますね型言語 Grass
>系ですよね。
いえいえ、「表向きはネタだが実は奥が深いもの」と「表向きはネタだが実はやっぱりネタなもの」の間には越えられない壁が存在するので。
むしろ、雨後の竹の子的にひしめく「Grass や Brainfuck の表記変換系」に近いものだとみるのが適当でしょう。

>プログラミング言語「ほむほむ」
>の TeX 版も面白いと思っていましたが、
「ほむほむ」そのものを TeX で実装したらブログネタとしては面白いかも。
# と、また無茶なネタを振ってみる。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証