これはひどい……。
$ が £ になるのは「OT1 エンコーディングの罠」のせいである。これは一般の LaTeX ユーザも留意すべき内容であるので、少し詳しく解説しておく。
OT1 エンコーディングはやっぱりアレ
LaTeX の既定設定である OT1 エンコーディングのアレ性については、 既に次の記事でその一端が示されている。
- LaTeX の「アレなデフォルト」 傾向と対策/その5:OT1エンコーディングがアレ(Qiita:zr_tex8r)
しかし、OT1 エンコーディングにはもっとアレな点を有している。それは「シェープによって微妙に文字の配置が異なる」ということである。*1
例えば、LaTeX の既定のフォントシェープである cmr10(OT1/cmr/m/n 相当)のエンコーディングは次の通りである。
ところが、イタリックのシェープ(\itshape
)である cmti10(OT1/cmr/m/it 相当)のエンコーディングは先のものと 1 ヶ所だけ異なる。"24 が〈$〉ではなく〈£〉に変わっている。
等幅のフォントファミリ(\ttfamily
)の cmtt10(OT1/cmtt/m/it 相当)は次の通り。同じ OT1 でもかなり異なり、こちらは "21〜"7E の範囲が ASCII と一致している。*2
そしてそのイタリックシェープである cmitt10(OT1/cmtt/m/it 相当)の配置は、cmtt10 の〈$〉を〈£〉に変えたものになっている。
LaTeX での対処とその限界
ただし、この変則性について、LaTeX 側である程度の対処は行われている。従って、“普通に”LaTeX でこれらの記号を入力する――すなわち、〈$〉を \$
、〈£〉を \pounds
((厳密にいうと、〈$〉と〈£〉の LICR(標準の文字命令)は \textdollar
と \textsterling
であり、\$
と \pounds
は「テキストでも数式でも使える」という便宜性を持たせた一般命令である。))で入力する――分には、この「OT1 の変則性」は表面化しない。
\documentclass{article} \begin{document} % 直立体(OT1/cmr/m/n) Which is more valuable, \$1 or \pounds1?\par % イタリック体(OT1/cmr/m/it) \itshape Which is more valuable, \$1 or \pounds1?\par \end{document}
しかし、「LaTeX の命令」を間に挟まずに文字が出力される場合はこの対処も効かない。特に verbatim 系の機能が注意を要する。例えば、「イタリックや太字の指定の中にある verbatim については、verbatim のフォントにもイタリックや太字の指定を効かせたい」と望んだとする。これは次のような TeX コードで実現できる、はずである。((ただし LaTeX の \ttfamily
の既定設定である「CM Typewriter」フォントファミリには太字がないので、実際に太字にするには \ttfamily
の割当を変える必要がある。なお、後で紹介する lmodern を使用した場合は \ttfamily
は「LM Typewriter」でありこれは太字のシリーズを持っている。))
% ファミリだけ \ttfamily に変えて, シリーズ・シェープは変えない \def\verbatim@font{\ttfamily}
ところが、この設定を使ってイタリックで \verb
を実際に使うと、〈$〉が〈£〉に化けてしまう。verbatim 状態では「$
の入力で〈$〉がある(はずの)"24 の文字を出力する」という動作になるので、「OT1 の変則性」の影響を直に受けてしまうのである。
\documentclass[a5paper]{article} \usepackage{verbshape}% さっきのやつ \begin{document} Sometimes braces can be omitted: \verb|$a_{2}$| and \verb|$a_2$| both result in ``$a_2$''. {\itshape But beware: \verb|$a_10$| would result in ``$a_10$''.}\par \end{document}
OT1 逝ってよし
それでは、この「OT1 の変則性」に対して根本的に対処するにはどうすればよいか。答えは簡単である。
OT1 を使うな。
要するに、OT1 を使う限りどうにもアレなので、エンコーディングを別のものに変えるしかないのである。例の Qiita の記事には次の対策が書かれている。
- フォントエンコーディングを T1 に変更する。
- フォントの設定が既定のまま(CM フォント使用)
である場合は、「Latin Modern フォント」に変更する。
\usepackage[T1]{fontenc}% T1エンコーディングに変更 \usepackage{lmodern}% Latin Modern フォントに変更
これだけで、欧文フォントに関する、「何故かうまくいかない」現象から解放される。
\documentclass[a5paper]{article} \usepackage[T1]{fontenc}%←とにかくコレと \usepackage{lmodern} %←コレを書く \usepackage{verbshape}% さっきのやつ \begin{document} Sometimes braces can be omitted: \verb|$a_{2}$| and \verb|$a_2$| both result in ``$a_2$''. {\itshape But beware: \verb|$a_10$| would result in ``$a_10$''.}\par \end{document}
おまけ: 最新の TikZ の $ は $ である件
ところで、話の元ネタである TikZ のマニュアルについては、TeX Live 最新版の PGF/TikZ では直っている。