引用符・ダッシュ

em ダッシュ — が「em」と呼ばれるのは、その幅がちょうど 1 em、つまり文字サイズそのものだからです。10pt の文書で LaTeX に測らせると em ダッシュは 9.99756pt、\quad と 1 スケールドポイントも違いません。ハイフン -、en ダッシュ --、em ダッシュ ---、そして数式のマイナス $-$ は、見た目が似ているだけの 四つの別々の文字 で、幅も出所のフォントも違います。このページでは四本の横棒を実測して並べ、どこで -- を使い、どこで --- を使い、どこで数式モードに入るべきかを決めます(引用符そのものは「引用」のページが扱います)。

- -- --- $-$ は四つの別の文字 — 実測した幅

四本とも別々の字形で、幅は 3.33252pt・4.99878pt・7.7778pt・9.99756pt です。10pt の article に T1 符号化を読み込み、\sbox0{-}\typeout{\the\wd0} の要領で一つずつ測った値です。ここで意外なのは順番でしょう。「ハイフンより en、en より em」と並ぶのは予想どおりですが、数式のマイナスは en ダッシュと em ダッシュのあいだ に入ります。マイナスは短い横棒ではなく、数式の中で =+ と釣り合うように設計された、かなり長い記号なのです。

入力名前幅(10pt, T1)PDF 上の文字
-ハイフン3.33252pt(1/3 em)U+002D
--en ダッシュ4.99878pt(1/2 em)U+2013
$-$マイナス記号(数式)7.7778ptU+2212
---em ダッシュ9.99756pt(1 em = \quadU+2014

「en」「em」という名前は、活字時代に N と M の幅 から来たと説明されることが多いのですが、いまの定義はそうではありません。同じ 10pt の書体で M を測ると 9.16443pt、N は 7.49817pt。em ダッシュ(9.99756pt)は M より広く、en ダッシュ(4.99878pt)は N より ずっと 狭いのです。em の正体は文字の幅ではなく 活字の胴(ボディ)の幅、つまり文字サイズそのもので、en はその半分。名前だけが金属活字から残りました。そして数式のマイナスは、そもそも本文用のフォントにありません。fontmath.ltx\DeclareMathSymbol{-}{\mathbin}{symbols}{"00} が示すとおり、マイナスは数式記号用フォント(Computer Modern では cmsy)の 0 番から来ます。だから本文に -3 と書いた「マイナス」は、字形からして別物なのです。

latex
% measure them yourself: put this in the preamble-less body
\sbox0{-}\typeout{hyphen  = \the\wd0}
\sbox0{--}\typeout{en dash = \the\wd0}
\sbox0{$-$}\typeout{minus   = \the\wd0}
\sbox0{---}\typeout{em dash = \the\wd0}
\sbox0{\quad}\typeout{one em  = \the\wd0}

どれを使うか — 範囲は --、挿入句は ---、複合語は -

範囲と対関係には en ダッシュ --、文を割り込む挿入句には em ダッシュ ---、語をつなぐときはハイフン - 一つ が原則です。pages 5--101939--1945the Einstein--Podolsky--Rosen paradox はどれも「A から B まで」「A と B の対」を表すので en ダッシュ。一方 well-knownstate-of-the-art のような複合語はハイフンで、ここを -- に直してはいけません。原稿を一括置換で「- を全部 -- に」とやると複合語まで巻き添えになるので、置換は必ず 数字-数字 のように文脈を絞って行います。

em ダッシュの空けかたは 言語で正反対 になります。アメリカ英語(Chicago 流)は前後に空白を入れず a break---an aside---fits here と詰めて組みます。イギリスの多くの出版社、そしてドイツ語(Gedankenstrich)とフランス語(tiret)は、逆に en ダッシュを空白付きで 使い、ein Einschub -- so wie hier -- のように組みます。つまり --- を詰めるか -- を空けるかは好みではなく、その言語の組版習慣です。文書の言語をひとつ決めたら、原稿全体でどちらか一方に統一してください。両方が混ざった原稿は、読者に「英語の本を訳しかけた」印象を与えます。数式のマイナスだけは言語に関係なく $-$、つまり数式モードで出します。

latex
See pages 5--10 and the 1939--1945 volumes.
A break---an aside---fits here in US English.
Ein Einschub -- so wie hier -- steht mit Spatien.
The value is $-3$, and $a - b$ uses the same minus.

\textendash\textemdash — 命令形が要る場面

出力はまったく同じです。 \textendash は 4.99878pt、\textemdash は 9.99756pt で、----- の実測値と 1 スケールドポイントも違いません。ではなぜ命令があるのかというと、-- ---フォントの合字(リガチャ) として実装されているからです。T1 では \textendash は符号位置 21、\textemdash は 22 に実在する文字(t1enc.def)で、命令は「合字を通さずにその文字を直接呼ぶ」経路になります。合字が効かない環境や、マクロの引数として横棒を渡すときは、命令形のほうが確実です。

その「合字が悪さをする」実例が \texttt です。T1 符号化のタイプライタ体(TeX Live 2024 の既定は cm-super の sftt1000)には -- の合字があり、\texttt{5--10}5–10 と en ダッシュになってしまいます。さらに \texttt{a---b}a–-b、つまり en ダッシュ+ハイフンという中途半端な結果になります(タイプライタ体には em ダッシュの合字がないため)。OT1 の cmtt10 では合字が無いのでそのまま出ますが、符号化を替えただけで出力が変わるコードは危険です。ファイル名・コマンドライン・オプション名を組むときは \texttt ではなく \verb を使う か、\texttt{5-{}-10} のように空グループで合字を断ち切ってください。verbatim 環境と \verb は T1 でも 5--10 をそのまま出します。

latex
% T1: this silently becomes an en dash
\texttt{ls --color}          % prints: ls –color
% either break the ligature ...
\texttt{ls -{}-color}
% ... or use verbatim, which never applies ligatures
\verb|ls --color|

ダッシュの後ろで行が折れる — \exhyphenpenalty と折らせない方法

TeX は 明示的なハイフンやダッシュの直後で行を折ってよい と考えます。そのときの罰点が \exhyphenpenalty で、既定値は 50(\the\exhyphenpenalty で確認できます)。単語内のハイフネーションに課される \hyphenpenalty も 50 なので、5--10 の途中や well-known の途中で改行されることが普通に起こります。10 だけが次の行の頭に落ちた範囲表記は、読者に一瞬「何の 10 か」を考えさせます。折らせたくない箇所は \mbox{5--10} で箱に入れるのが最も簡単で、amsmath を読み込んでいれば \nobreakdash- のように書いて、その 1 本のダッシュだけ改行禁止にもできます。

latex
\usepackage{amsmath}   % provides \nobreakdash
% ...
See pages \mbox{5--10} for the proof.
The X\nobreakdash-ray results are attached.

\slash\- — 折ってよい場所を自分で教える

\slash/同じ字形 を出したうえで、その直後を改行可能にする命令です。latex.ltx の定義はたった一行、\def\slash{/\penalty\exhyphenpenalty} で、正体はスラッシュにダッシュと同じ罰点を付けただけ。実測しても a\slash ba/b はどちらも 15.55176pt で、幅は一切変わりません。input\slash output のような長い対語が行末で溢れるとき、生の / では TeX が折る場所を見つけられずに Overfull \hbox の警告が出ます。\slash はその一箇所だけに折り目を入れる道具です。

もう一つの手当てが 任意ハイフン(discretionary hyphen) \- です。これは「ここで折るならハイフンを入れてよい」という印で、折れなければ何も出ません。TeX が辞書で分割できない固有名詞や合成語に一箇所だけ入れると、Overfull \hbox が一発で解消することがよくあります。ただし副作用が一つ。man\-uscript を実測すると 48.96027pt、素の manuscript は 48.68256pt で、0.27771pt だけ広がります。\- を置いた位置の カーニングが打ち消される ためです。だから語のあちこちに \- をばらまくのではなく、必要な一語に一箇所だけ入れるのが定石です。ハイフネーション辞書の登録(\hyphenation)や、そもそもの改行調整については「改行の調整」のページを参照してください。

latex
The input\slash output layer is documented separately.
This manu\-script uses a discretionary hyphen once.

PDF で四本を見分ける — pdftotext で確かめる

目で見比べるより、PDF からテキストを抜き出して符号位置で確認する ほうが確実です。pdftotext file.pdf - で本文を標準出力に出すと、四本はそれぞれ -(U+002D)、(U+2013)、(U+2014)、(U+2212)という 別々の Unicode 文字 として現れます。実際、- -- --- $-$ を並べた 1 行を pdftotext に通すと - – — − の 4 文字が返ってきます。あとはこの出力を grep にかければ、範囲がハイフンのままの箇所や、本文にマイナス記号が紛れ込んだ箇所を機械的に洗い出せます。ソースを目で追うより速く、レビューにも回せます。

terminal
# ranges still set with a plain hyphen
pdftotext paper.pdf - | grep -nE "[0-9]-[0-9]"

# a minus sign that leaked into running text
pdftotext paper.pdf - | grep -n "−"
  • 範囲を洗う。 ソースの 数字-数字(年代・ページ・図番号)を探し、真に範囲なら -- に直します。well-known のような複合語は触りません。
  • 負号を洗う。 本文の -3-0.5 は数値なら $-3$ $-0.5$ にします。PDF 側では U+002D のまま残っていないかを見ます。
  • \texttt の中を見る。 T1 では \texttt{--} が en ダッシュに化けます。コマンドラインやファイル名は \verb に置き換えます。
  • 空けかたを統一する。 詰めた --- か、空けた -- か。文書の言語に合わせてどちらか一方に決め、混在を残しません。

なお、このページの姉妹にあたる 引用符 ——曲がった引用符 “ ” を出すバッククォート二つの作法、" を打つとおかしくなる理由、csquotes\enquote、言語ごとの „ “ や « » ——は、「引用」のページがまとめて扱います。原稿の貼り付け掃除は、たいてい引用符とダッシュを同時に見ることになるので、二つのページを並べて使うのが実務的です。