LaTeXソースコードの字句について

特殊文字

次の10文字は、LaTeXのソース中で特別な意味を持ちます。これらは特殊文字と呼ばれます。

# $ % & ~ _ ^ \ { }

空白

LaTeXのソースに空白文字を書いても、字句解析の段階で無視される場合があります。

複数の連続した空白文字は、圧縮されます(2文字目以降が無視されます)。

行頭の空白文字は無視されます。

「バックスラッシュ + アルファベット数文字」の形のコマンド名の直後の空白は無視されます。

改行

改行は空白文字として扱われます。

ただし、pTeXの場合は、和文文字の直後の改行は無視されます。

空行(連続した改行)は、 \par コマンド(改段落)として扱われます。空白文字のみからなる行も、空行として扱われます。

コメント

行の先頭もしくは途中に % を書くと、その後ろの部分はコメントとなり、動作に影響を与えません。ただし、直前にバックスラッシュがある場合は除きます(\% はコマンド名となります)。また、\verb コマンドや verbatim 環境のように、「特殊文字を無効化する」場合は除きます。

コメント行の末尾の改行もコメントの一部として無視されるので、改行が空白文字として扱われるのを防ぎたい場合に % を置くことができます。

複数行にまたがるコメントを書きたい場合は、 comment 環境を使うと良いでしょう。

コマンド名

コマンド名には、以下の3通りがあります。

  • バックスラッシュ (\) + アルファベット。例:\section
  • バックスラッシュ (\) + 記号等1文字。例:\!
  • 半角チルダ ~ (これは、特殊文字の一種なのでした)

半角チルダは、通常は「改行しない空白」の意味です。やろうと思えば、半角チルダを \renewcommand によって上書きすることができます。

半角チルダ ~ はコマンド名ですが、一方で、半角ハイフンを並べたもの(--, ---)はコマンド名ではありません。これらがダッシュとして処理されるのは、展開・実行の段階ではなくて、もっと後の、リガチャーの段階です。

いくつかのコマンド、例えば \section は、コマンド名の直後にアスタリスク * を置くことによってコマンドの意味が変わる場合があります(例: \section と \section*)。しかし、この場合の * はコマンド名の一部ではなく、あくまで「\section コマンドの直後に * を置いたもの」です。\section と \section* とで意味が変わるのは、 \section コマンドが * の有無を判断しているからに過ぎません。なので、自分でコマンドを定義する際に

\newcommand{\foo}{}
\newcommand{\foo*}{}

とすることはできません。(というか、 * の有無で挙動を変えるコマンドは \newcommand では作れません。どうしても * の有無で挙動を変えるコマンドを作りたい場合は、 LaTeX の沼に足を踏み入れることを覚悟で、 \@ifstar について調べてください)