先日、kerkis パッケージの中身を調べていたら、次のように、OT1 エンコーディングの定義を改変するコードを見つけた。
\DeclareTextSymbol{\textperthousand}{OT1}{137} \DeclareTextSymbol{\textsterling}{OT1}{163} \DeclareTextSymbol{\L}{OT1}{6} \DeclareTextSymbol{\i}{OT1}{17} \DeclareTextSymbol{\j}{OT1}{18} \DeclareTextSymbol{\l}{OT1}{7} \DeclareTextSymbol{\textexclamdown}{OT1}{161} \DeclareTextSymbol{\textgreater}{OT1}{`\>} \DeclareTextSymbol{\textless}{OT1}{`\<} \DeclareTextSymbol{\textquestiondown}{OT1}{191}
さらに、txfonts パッケージの中身を調べていたら、そこでも同様のコードが見つかった。
\re@DeclareTextSymbol{\L}{OT1}{138} \re@DeclareTextSymbol{\l}{OT1}{170} \re@DeclareTextSymbol{\textdollar}{OT1}{36} \re@DeclareTextSymbol{\textsterling}{OT1}{163} \re@DeclareMathSymbol{\mathsterling}{\mathord}{operators}{163} %\def\mathsterling{\mathit{\mathchar"70A3}} \DeclareTextComposite{\r}{OT1}{A}{197} \DeclareTextComposite{\r}{OT1}{a}{229} \re@DeclareTextSymbol{\textcent}{OT1}{162} \re@DeclareMathSymbol{\mathcent}{\mathord}{operators}{162}
LaTeX の機能を拡張する目的で、その内部コードを改変することは広く行われている(そしてそれによる悪影響である「パッケージの衝突」も多くの人が経験しているだろう)。しかしそれでも、この類のエンコーディングの定義の改変については、私は強い違和感を感じている。「XXX フォントを使うためのパッケージ xxx」がこのように OT1 への改変を行う動機は、XXX フォントで用いられる「OT1 エンコーディング」が真の OT1 とは異なる部分があり、それに適応させるためだと考えられる。しかし、テキストフォントの場合、xxx パッケージを読み込んだ場合でも、「本来の OT1 エンコーディング」のフォントが用いられる可能性は存在している。従って、OT1 の定義に非互換な改変を加えた場合、「本来の OT1 のフォント」の処理に本質的な矛盾を抱えてしまうことになるのである。
例えば、上記の txfonts の定義の場合、ファミリを txfonts 以外のもの(例えば cmr)に切り替えたときに明らかな悪影響が出る。
\documentclass[a4paper]{article} \usepackage{txfonts} \begin{document} \newcommand\SampleText{{\L}ukasiewicz \r{a}ngstrom\quad \$1 = \pounds0.6\quad \textit{\$1 = \pounds0.6}} OT1/txr: {\usefont{OT1}{txr}{m}{n} \SampleText}\par OT1/cmr: {\usefont{OT1}{cmr}{m}{n} \SampleText}\par \end{document}