疑問符 ? と感嘆符 ! は、ただ打てば出る素直な文字です。けれど言語によって作法が違います。英語では文末で他の文と同じく広めのアキが付き、フランス語では記号の前に細いアキを入れ、スペイン語では文頭に逆さの ¿ ¡ を添え、日本語では全角の ? ! を使います。このページでは、入力の仕方と、LaTeX が自動で面倒を見てくれるスペーシングを、言語ごとに整理します。
欧文の ? と !
英語をはじめとする欧文では、? と ! はキーボードからそのまま入力します。エスケープは不要で、特別な命令もいりません。前にアキを入れず単語に直付けし、後ろに半角スペースを置くのがふつうです。
TeX は内部で、文字ごとに スペースファクタ(space factor) という値を持っています。ピリオド .、疑問符 ?、感嘆符 ! のスペースファクタはいずれも 3000 で、続く空白を「文末のアキ」として扱う合図になります。既定(\nonfrenchspacing)では、この文末のアキは語間より広めに組まれ、伸縮も語間の 3 倍ほど大きく許されます。つまり ? や ! で文を終えると、自動的にピリオドと同じ少し広いアキが入るわけです。
ここに落とし穴が一つあります。TeX は 大文字の直後にある約物は文末ではない と判断します(Ph.D. のような略語を想定しているため)。Who is FBI? のように大文字直後で文を終える稀なケースでは、? の前に \@ を置いて「ここは文末だ」と教えます。逆に、文末のアキを一切やめて語間と同じ幅にそろえたいときは、プリアンブルで \frenchspacing を宣言します。詳しくは「自動挿入されるスペース」のページで扱います。
Really? Yes! It works.
% After a capital, mark the true sentence end:
He joined the FBI\@. Then he left.フランス語は事情が違います。! ? : ; の 前 に細いアキ(thin space)を入れるのが正書法で、Vraiment ? のように書きます。これを手で入れる必要はありません。babel の [french] オプション(babel-french)を読み込むと、これらの記号の前に正しい(改行しない)アキが自動で挿入されます。
スペイン語の逆さ記号 ¿ ¡
スペイン語では、疑問文・感嘆文の 文頭 に逆さの開き記号を置きます。疑問文は ¿…?、感嘆文は ¡…! と、開きと閉じで挟む形です。閉じ側の ? ! はふつうに打てばよく、問題は開き側の ¿ と ¡ をどう入力するかです。
伝統的な方法は リガチャ(合字)入力 です。標準の欧文フォントエンコーディングでは、感嘆符に続けてバッククォートを打つと ¡ に、疑問符に続けてバッククォートを打つと ¿ に化けます。つまり 開き感嘆符は ! のあとに ` `、開き疑問符は ? のあとに ` です。出力には `` は現れず、逆さ記号一つになります。
もう一つは 明示的な命令 です。¡ は \textexclamdown、¿ は \textquestiondown で出せます。意味が一目で分かり、リガチャを無効にする設定下でも確実に動くので、こちらを好む人も多くいます。さらに babel の [spanish] を読み込むと、スペイン語向けのハイフネーションや見出し語が整い、? ! まわりの扱いも言語に合わせて調整されます。
% Ligature input (mark + backtick):
?`Como estas?
!`Hola!
% Explicit commands (identical output):
\textquestiondown Como estas?
\textexclamdown Hola!注意点として、pdfLaTeX ではこのリガチャがフォントエンコーディングの機能として働きますが、Unicode を直接扱う XeLaTeX / LuaLaTeX ではリガチャに頼らず、逆さ記号 ¿ ¡ をソースにそのまま書く(または \textquestiondown / \textexclamdown を使う)のが確実です。
日本語の ? と !
日本語の文章では、半角の ? ! ではなく 全角の ? ! を使います。これらはソースにそのまま書けば、日本語対応のエンジン(upLaTeX や LuaLaTeX + luatexja)がそのまま組みます。エスケープは不要です。
日本語組版では、文中に来る ? ! の 後ろに全角アキ(全角分の空き) を入れるのが標準的な作法です。W3C の「日本語組版処理の要件(JLREQ)」も、文末に用いる疑問符・感嘆符の字幅は全角とし、その後ろを全角アキとすると定めています(ただし直後に閉じ括弧類が来る場合はベタ組)。重要なのは、この全角アキを 自分で全角スペースとして打つ必要は基本的にない ことです。組版エンジンが約物のアキとして自動で入れてくれます。逆に手で全角スペースを足すと二重に空いてしまいます。
また、日本語では ? ! で文を終えても、句点 。のように改まった文末記号として常用されるわけではありません。会話文や軽い文体で多用される一方、硬い文章では 。が文末を担います。行末に ? ! が来てその後ろの全角アキが余るときは、行末のアキを詰める処理が望ましいとされます(多くのクラス・パッケージが面倒を見ます)。
入力早見表
入力 → 出力 → 注意点をまとめます。リガチャ列のバッククォートは、開き記号を出すための入力であって、出力には現れません。
| 入力 | 出力 | 注意点 | |
|---|---|---|---|
? | ? | ? | 欧文の疑問符。文末で広めのアキ(SF=3000) |
! | ! | ! | 欧文の感嘆符。文末で広めのアキ(SF=3000) |
?-backtick | ? のあとに ` | ¿ | リガチャ。開き疑問符(スペイン語) |
!-backtick | ! のあとに ` | ¡ | リガチャ。開き感嘆符(スペイン語) |
textquestiondown | \textquestiondown | ¿ | 明示命令。リガチャ無効でも動く |
textexclamdown | \textexclamdown | ¡ | 明示命令。リガチャ無効でも動く |
fullwidth-question | ?(全角) | ? | 日本語。後ろの全角アキは自動 |
fullwidth-exclam | !(全角) | ! | 日本語。後ろの全角アキは自動 |
使用例
言語をまたいで実際に書いた例です。スペイン語は開きと閉じで挟み、フランス語は babel-french が記号前の細いアキを入れ、日本語は全角記号をそのまま置くだけで後ろのアキが付きます。
% --- Spanish ---
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[spanish]{babel}
\begin{document}
?`Como estas? !`Que bien!
\textquestiondown Listo\textexclamdown
\end{document}開きの ¿ ¡ をリガチャ(? ! のあとにバッククォート)で出した行と、明示命令で出した行は、まったく同じ出力になります。次は日本語の例で、? ! の直後に全角スペースを打っていない点に注目してください。
\documentclass{ltjsarticle}
\begin{document}
本当ですか? はい、できました! 次に進みましょう。
\end{document}コンパイルすると、「本当ですか?」の後ろに全角アキが入り、「できました!」の後ろにも同じく全角アキが入った、読みやすい日本語の段落になります。手で空白を足していないのに、適切な間隔が確保されるのが日本語組版の利点です。