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{} に任せる、と覚えておけば十分です。記法そのものの考え方は「記法のルール」、本文で使える各種の記号は「テキスト記号」のページで詳しく扱います。
失敗しやすい入力を先に分ける
レポートや技術文書では、本文よりもファイル名、URL、型名、表のセルに含まれる _・%・& が原因で止まることがよくあります。原稿を始める時点で、「自然文として読むもの」「コードとしてそのまま見せるもの」「リンクとして処理するもの」を分けておくと、特殊文字の逃がし方も自然に決まります。
| 場面 | 使う道具 | 判断 |
|---|---|---|
price | \$・\% など単発のエスケープ | 本文の中で普通の文として読ませる |
code | \verb または verbatim | ソースコード、端末出力、短いパスをそのまま見せる |
url | \url{...}(通常は hyperref と併用) | 長い URL を折り返し可能なリンクとして組む |
とくに表では、& がセル区切りになるため、会社名や論文題名に含まれるアンパサンドを逃がし忘れると列数がずれます。表データを外部から貼るときは、まず & と % を検索し、本文記号なのか LaTeX の構文なのかを 1 つずつ決めてからコンパイルすると、原因不明の表崩れを避けられます。
外部データを貼る前の処理
実際の原稿では、特殊文字は自分で入力するより、CSV、Web ページ、メール、PDF から貼り込んだ文字列として混入することが多いです。貼った後にエラーを追うより、貼る前に用途別の受け皿を決めておくほうが速く確実です。本文として読む値は必要な文字だけ逃がし、コードやログは verbatim 系へ、URL は \url{...} へ分けます。
% 表へ貼る前に、データ中の & と % を確認する
% before pasting into a table, inspect & and % in the data
\begin{tabular}{ll}
Smith \& Wesson & company name \\
95\% & reported rate \\
\end{tabular}
% URL は手で _ や # を逃がさず \url に任せる
\url{https://example.com/report?id=95#table_1}「表が 1 列ずれる」「行の後半が消える」「Missing $ inserted が突然出る」という症状は、たいてい &・%・_ のどれかが原因です。まず貼り込んだ範囲だけを検索し、文字として必要なら \&・\%・\_、構文として使うならそのまま、URL なら \url、コードなら逐語表示、という順に分類します。