マクロツイーター

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

「設定」と「プログラム開発」との違い

例えば、「enumerate 環境のマーカーを i)、ii)、…の形式にしたい」という場合、これは標準の LaTeX の機能で実現できるので、次のような「設定」をプレアンブルに書けばよい。

\renewcommand{\theenumi}{\roman{enumi}}
\renewcommand{\labelenumi}{\theenumi)}

これに対して、「マーカーを イ、ロ、ハ、…の形式にしたい」という要求は、標準の (p)LaTeX の機能では実現できないので、例えば次のように「TeX 言語のプログラム」を用意する必要が出てくる。((正確には、前の 2 つの \def が「プログラム」で、後ろの \renewcommand がそのプログラムで拡張した機能を用いる「設定」とみるのが最も自然だろう。だから、実際の LaTeX 文書で使う場合は、後ろの「設定」をプレアンブルに残して、「プログラム」をパッケージに追い出す形になる。))

\def\katairoha#1{%
  \expandafter\xx@katairoha\csname c@#1\endcsname
}
\def\xx@katairoha#1{%
  \ifcase#1\or
    イ\or ロ\or ハ\or ニ\or ホ\or ヘ\or ト\or
    チ\or リ\or ヌ\or ル\or ヲ%…必要に応じて追加
  \else\@ctrerr
  \fi
}
\renewcommand{\theenumi}{\katairoha{enumi}}
\renewcommand{\labelenumi}{\theenumi 、}

私が疑問に感じているのは、下のような TeX マクロ(TeX 言語のプログラム)を「おまじない」としてコピペするのに慣れている人の中に、上のような「設定」と下のような「プログラム」を何となく同列のものと見做している人がいるのではないかということ。*1すなわち、「〜する方法を教えてください」と掲示板・フォーラムで尋ねている人の中に、下のような「プログラム」が回答として返ってくることを想定範囲に入れている人がいるのではないかということである。「プログラムである」ということの意義を把握しているならば、このような態度の問題点は明白である。要するに、「私の要求に適うソフトウェアをタダで作ってください!」と言っているのに等しいことになっていて、これが傲慢極まりないことは誰の目にも明らかである。(念のため補足しておくと、私は、「TeX マクロを『おまじない』としてコピペする」こと自体には(著作権が絡まない限りは)何の問題も感じない。((その TeX マクロが LaTeX パッケージとして整形されていたならば、そのコードを見ることもなく、単なる \usepackage で済んだであろう。)))。

恐らくは、大多数の質問者はそうではなく、単に「設定」を尋ねているだけであろうと信じたい。だけど、何故か「〜する方法を教えてください」という言い方には上述の疑念を感じることがある。多分、その理由は「『〜する方法』の存在が(表層上は)前提とされている」ことなんだと思う。

周知の通り、LaTeX というシステムは、標準機能は限定されているが、TeX 言語により記述されたパッケージを用いることで、TeX エンジンの持つ限りの能力を持たせるまでに拡張できる。しかし、裏を返せば、「使用者に TeX 言語を操る能力がなければ、その者にとっては LaTeX は既存のパッケージで実現されるだけの能力しかない」ということである。*2その「限定」の中では、「〜する」ことは不可能かも知れず、そうすると、「『〜する方法』が存在するという前提」は、結果的に「必要なら TeX 言語のプログラムを開発する」ことが含まれてしまう。従って、「〜する方法を教えてください」は「TeX のプログラムをください」(または「TeX 言語を教えてください」)を可能性として含んでしまい、そのことが「疑念」の根源になっているのではないか。

ではどう質問すればよいかというと、答えは簡単で、「〜する方法」の存在を前提にしていないのであるから、「〜する方法はありますか?」と尋ねればよい。疑問文の回答が YES であるという前提がない以上「疑念」は生じない。すなわち、「設定」で済むのであればそれを教えればよいし、そうでなければ、「標準の機能では無理です。〜を実現する既存のパッケージを CTAN で探すか、あるいは TeX 言語を習得してください」という回答を「質問者の想定範囲」として返すことができるであろう。

「TeX Q & A」を眺めながら、こう考えた。

*1:この例の場合、LaTeX をちゃんと知らないと、上の方の「設定」も「おまじない」にしか見えないので、なおさら同列に思われやすいかも知れない。

*2:この状況は、「とあるテキストエディタは C 言語で/ECMAScript で/Lispプラグイン/アドオン/マクロを開発することで自由に拡張できる」というのと全く同様である。C 言語を知らなければ、そのエディタで「何でもできる」ことにはならない。