マクロツイーター

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

とある LaTeX と初心者の物語

[とある宣伝]
2014/12/01 〜 2014/12/25

TeX & LaTeX Advent Calendar

〜このパッケージがスゴイ!〜
TeX & LaTeX アドベントカレンダー 2014
*  *  *

「さーて、『美文書』も読み終わったし、TeX Live のインストールも済んだ。これからガンガン LaTeX するぞ!」

「よし! Hello TeX の PDF がちゃんとできたー!! もうチョット LaTeX 試したいけどどうしよう?」
「そうだ、今ちょうど「TeX & LaTeX アドベントカレンダー」てのがやってたはず。その中に練習問題があるとどっかで聞いたな。練習問題をやってみよう!」
↓(「TikZ で“インラインな”図を描く」(18 日目)の練習問題を見る)
「おい、なんだこの問題? 記事の中では baseline パラメタの解説しかロクにしていないのに、TikZ の知らない機能が当然のようにバンバン出てくる。これ書いた奴、頭おかしいんじゃないか?」
「しょうがない、TikZ のマニュアル読むか……面倒くさいな」
↓(1時間半ほど経過)
「ふう、やっと読み終わった……。意外と時間かかったな。で、えーと問題は……、なんだ、こんなの自明すぎてやる気が起こらんぞ。次行こっ」
↓(「XyMTeX 美構造式作成入門」(20 日目)の練習問題を見る)
「うーむ…、やっと (1) と (2) が終わった…。LaTeX チョット難しいな…。あとは (3) のケクレンか。これが終わったら晩メシ食いに行こう」

「ヤバい。ホントに解らない……。XyMTeX のマニュアル、一通り目を通したけど今一つ理解できない。俺の化学力、低すぎ……?」
「取りあえず練習問題は保留しようか。とはいえ、LaTeX 文書にケクレンの構造式が入れられないうちは、ゆっくりメシを食う気分にもなれん。どうしよう……」
「そうだ! アドベントカレンダーどこかの記事で、俺みたいな化学がサッパリ解らん奴でも使える chemナントカ ってのが紹介されてたな」
↓(chemナントカ と関連ソフトをインストール)
\smilesobabel[width=3cm]{c1ccc2ccccc2c1}{}

「よし! ナフタレン出た! これであとはケクレンの SMILES 表記を ChemSpider で調べて \smilesobabel に突っ込めば大勝利だ! LaTeX 楽勝!」

Kekulene | C48H24 | ChemSpider
SMILES:
c1cc2cc3ccc4cc5ccc6cc7ccc8cc9ccc%10cc%11ccc%12cc1c1c2cc3c4cc5c6cc7c8cc9c%10cc%11c%12c1

「いやチョット待て。これって“%”入ってるけど通るんかな?」
「またマニュアル読むか……」

you have to change category codes of these characters temporarily ...
(chemobabel マニュアル、“Basic Usage”)

「うわああぁぁあぁぁぁ!! カテゴリコード!? 何でなんでナンデ??」
「クソッ、やっぱり TeX 言語を知らないと LaTeX のパッケージも満足に使いこなせない、ということだったのか! こんなんじゃ全く以て TeXLaTeX も使い物にならん!! TeX オワコン!! TeX グッバイ!!!」

(めでたしめでたし)
*  *  *

もちろん、「自分でカテゴリコードを何とかしましょう」というのはアレな冗談だと解釈すべきで、もし真面目に〈%〉等の特殊文字を含む式に対応させたいのであれば、パッケージ側の実装で適切に対応すべきである。よく行われる方法は、\smilesobabel の引数を読む時に自動的に一時的なカテゴリコード変更が適用されるようにする、という方法である。しかしこの実装方法を行うには、「TeX の字句解析」(トークン化はいつ行われるのか)に対する正しい理解が必須であり、TeX プログラミングの初心者にはハードルが高いように思う。((字句解析・構文解析\expandafter な話とか)が絡むと、それまでの「LaTeX のマクロ」のような方法論が通用しなくなり、「真面目に TeX の文法を学び始める」ことが要求される。そういう点で、心理的な困難が伴うのだと思う。))といっても、今のケースだと、「ユーザに違和感を感じさせない」(かつ実装が容易な)他のインタフェースを思いつくのも難しいように思える。

そういうわけで、ここで打てる手は……実はある!!