LaTeX には、そのまま打っても文字として出てこない記号が 10 個 あります。# $ % & _ { } ~ ^ \ の 10 文字で、それぞれが「コメント」「数式の開始」「命令の始まり」といった特別な役目を持っているからです。このページでは、各文字が何をするのかと、文字そのものを印字する方法をまとめます。
10 個の予約文字
まず「予約文字(reserved characters)」とは、LaTeX が構文の一部として使っているために、地の文へそのまま書くと別の働きをしてしまう文字のことです。たとえば % と打つと、その行の残りがまるごとコメントとして消えます。$ と打てば、そこから数式モードが始まります。こうした文字を 文字として 紙面に出すには、少し手を加える必要があります。
それぞれの役目を整理すると次のとおりです。# はマクロ定義で引数を表し、$ は数式モードの開始・終了、% はコメントの開始(その行の残りを無視)、& は表や整列環境で列(セル)を区切ります。_ と ^ は数式中で下付き・上付き文字を導入し、{ と } は引数やグループの範囲を区切ります。~ は改行で切れない空白(連結スペース)を作り、\(バックスラッシュ)はすべての命令の先頭に立ちます。
| 文字 | 特別な役目 |
|---|---|
# | マクロ定義での引数(#1, #2 …) |
$ | 数式モードの開始・終了 |
% | コメント開始(その行の残りを無視) |
& | 表・整列環境での列(セル)区切り |
_ | 数式中の下付き文字 |
^ | 数式中の上付き文字 |
{ | 引数・グループの開始 |
} | 引数・グループの終了 |
~ | 改行で切れない空白(連結スペース) |
\ | 命令(コマンド)の先頭 |
文字そのものを印字する
10 個のうち 7 個 は簡単で、前にバックスラッシュを 1 つ付けるだけです。すなわち \#, \$, \%, \&, \_, \{, \}。たとえば \$1.23 と書けば $1.23 と印字されます。バックスラッシュは「次の 1 文字は命令ではなく、その文字自身だ」という合図になるわけです。
残る 3 個 はもう少し厄介です。~ は \textasciitilde(または \~{})、^ は \textasciicircum(または \^{})で出します。\~ や \^ を単独で書くとアクセント命令と解釈され、直後の文字の上にチルダや山形が乗ってしまうため、空の {} を添えて「乗せる相手のいないアクセント」=記号そのものにします。
最後にバックスラッシュ自身。これは \textbackslash で印字します。**\\ を使ってはいけません** — それはバックスラッシュ 2 個ではなく、改行(行送り)の命令だからです。ここはとても間違えやすい落とし穴です。
| 入力 | 出力 | 備考 |
|---|---|---|
\# | # | バックスラッシュを 1 つ前置 |
\$ | $ | 同上 |
\% | % | 同上 |
\& | & | 同上 |
\_ | _ | 同上 |
\{ | { | 同上 |
\} | } | 同上 |
\textasciitilde | ~ | \~{} も可。\~ 単独はアクセント |
\textasciicircum | ^ | \^{} も可。\^ 単独はアクセント |
\textbackslash | \ | \\ は改行命令なので不可 |
なお \textbackslash・\textasciitilde・\textasciicircum は現在の LaTeX カーネルに含まれており、追加パッケージなしで使えます(かつては textcomp パッケージが必要でした)。ただし欧文フォントによっては、本文用の字形にチルダや山形(キャレット)の独立した記号を持たないものがあり、その場合はこれらのテキスト記号命令を使うのが確実です。
実例
100% & $5 cost #1 のように、予約文字を多く含む一文を印字してみましょう。%・&・$・# はいずれもバックスラッシュ前置で逃がします。
100\% \& \$5 cost \#1
% backslash, tilde and caret need their own commands:
A path: C:\textbackslash Users \\
Math symbols out of math: \textasciitilde{} and \textasciicircum{}1 行目は 100% & $5 cost #1 と組まれます。続く部分では、Windows 風のパスにバックスラッシュ(\textbackslash)を、独立したチルダと山形に \textasciitilde{}・\textasciicircum{} を使っています(行末の \\ は出力を改行するための命令で、バックスラッシュの印字ではありません)。
たくさんの記号・URL を出すとき
予約文字が密集したコード片や記号列を 1 つずつ逃がすのは骨が折れます。そんなときは 逐語(verbatim) の仕組みが便利です。行内なら \verb|...| のように、本文に現れない 1 文字(ここでは |)で囲むと、その中身はタイプライタ体でそのまま印字され、予約文字の意味も消えます。複数行なら verbatim 環境を使います。
Use \verb|a_b^c & d%| to show specials literally.
\begin{verbatim}
foo_bar = 100% & #1 % all printed as-is
\end{verbatim}URL のように ~・#・%・_ を含みがちな文字列には、url(または hyperref)パッケージの \url{...} が向いています。中の予約文字を自動で処理し、等幅で組み、適切な位置で折り返してくれるので、手作業のエスケープが要りません。
\usepackage{hyperref}
% ...
See \url{https://example.com/path?id=1#sec_2~ok}まとめると、単発の記号は表のとおりに逃がし、コード片や記号の塊は \verb/verbatim、URL は \url{} に任せる、と覚えておけば十分です。記法そのものの考え方は「記法のルール」、本文で使える各種の記号は「テキスト記号」のページで詳しく扱います。