マクロツイーター

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

日本で TeX できる人の数→(?)

TeX 言語に関して日頃思っている最大の疑問。それは……

「日本に TeX 言語が使える人はどれ位いるのか?」

これである。まるで想像がつかない。*1

もちろん、ここで「TeX 言語が使える」の定義が問題になるが、ここでは「プログラマ発見器」として有名な「FizzBuzz」のレベルで考えたい。ただし「FizzBuzz」は有名過ぎる(だから「答え」がググれてしまう)ので代わりに「NabeAzz」を採用することにする。*2少なくとも、(数分はともかく)一晩かけてもナベアツが実装できなければ、その人は「そのプログラミング言語を使える」集合には属さないと考えて問題ないだろう。

TeX でナベアツ」問題

以下の動作を行うマクロ \NabeAzz を作れ。

\NabeAzz{<整数n>} は 1 から n までの整数の 10 進表記を順に空白区切りで出力する。ただし、整数が「3 の倍数である」または「(その 10 進表記に)数字 3 を含む」場合は、フォントを「Computer Modern Funny Italic」の 12pt(または LaTeX の場合は \large)に変えて出力する。その他の条件は以下の通り。

  • 引数の <整数n> は正であり、かつ数字列で与えられると仮定してよい。想定外の引数を与えた場合の動作は何も規定しない。
  • 「Computer Modern Funny Italic」の TeX でのフォント名(TFM 名)は「cmfi10」である。LaTeX では「エンコーディング OT1、ファミリ cmfr、シリーズ m、シェープ it」に割り当てられている。

例えば、\NabeAzz{40} からは以下の出力が得られる。(もちろん、改行位置は文書レイアウトに依存する。)

付帯条件:

  • フォーマットは plain TeX または LaTeX2e とする。*3
  • 使用フォーマットのユーザ命令、内部定義マクロ、TeX プリミティブの全てを自由に使える。
  • さらに外部パッケージを使用しても構わない。
  • シェル実行機能(\write18)は使用禁止。(←書き忘れてた ;-) )
  • 拡張エンジンの機能も使用可能である。ただし、「LuaTeX で Lua インタプリタを呼び出す」ことだけはダメ。;-)
  • 制限時間は実働で 24 時間とする。
  • あらゆる形態の参考文献を参照して構わない。ただし、「この問題の答えそのもの」および「TeX での FizzBuzz の実装そのもの」は除外する。

さて、あなたは TeX を使えますか……?

[追記 2011-09-23] LaTeX で「CM Funny Italic」の 12pt を指定する際に、単純に OT1/cmfr/m/it/12 を要求しても NFSS の CM フォントの既定設定の特性でフォントサイズ指定が反映されない、という事実を失念しておりました。この件は問題の本質ではないので、ここでは悩まずにさっさと type1cm パッケージを読み込んで解決してしまってください。

*1:TeX である。LaTeX ではない。念のため。

*2:世界のナベアツは日本でしか知られていないので、それだけ「正解」が出回っていないことが期待できる。といっても多少マイナーなもの(Scala、Groovy、Brainfuck、…)も含めて大抵の言語にはあるようだが。

*3:残念ながら、ConTeXt は全く知らないので…。