em 대시 — 를 “em”이라 부르는 이유는 그 폭이 정확히 1 em, 곧 글자 크기 자체이기 때문입니다. 10pt 문서에서 LaTeX에게 재게 하면 em 대시는 9.99756pt로, \quad와 스케일드 포인트 하나도 다르지 않습니다. 하이픈 -, 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.7778pt | U+2212 |
--- | em 대시 | 9.99756pt(1 em = \quad) | U+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이라고 쓴 “마이너스”는 글리프부터가 다른 문자입니다.
% 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--10, 1939--1945, the Einstein--Podolsky--Rosen paradox는 모두 “A에서 B까지” 또는 “A와 B의 짝”을 뜻하므로 en 대시입니다. 반면 well-known, state-of-the-art 같은 복합어는 하이픈을 지켜야 하며 --로 “고쳐서는” 안 됩니다. 원고의 -를 일괄로 --로 바꾸면 복합어가 모두 망가지므로, 치환은 숫자-숫자처럼 반드시 문맥을 좁혀서 합니다.
em 대시의 띄우기 방식은 언어마다 정반대입니다. 미국 영어(Chicago 방식)는 앞뒤에 공백을 전혀 두지 않고 a break---an aside---fits here처럼 붙여 조판합니다. 반면 영국의 여러 출판사, 그리고 독일어(Gedankenstrich)와 프랑스어(tiret)는 공백을 넣은 en 대시를 써서 ein Einschub -- so wie hier --처럼 조판합니다. 곧 “---를 붙일지, --를 띄울지”는 취향이 아니라 그 언어의 조판 관습입니다. 문서의 언어를 정했으면 원고 전체에서 하나로 통일하세요. 둘이 섞인 원고는 번역하다 만 원고처럼 보입니다. 수식의 마이너스만은 언어와 무관한 예외로, 언제나 수식 모드의 $-$입니다.
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로, --와 ---의 실측값과 스케일드 포인트 하나도 다르지 않습니다. 그렇다면 명령은 왜 있을까요. -- ---가 폰트의 합자(ligature) 로 구현되어 있기 때문입니다. 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을 그대로 출력합니다.
% 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-처럼 써서 그 대시 하나만 개행을 막을 수도 있습니다.
\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 b와 a/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으로 분철을 등록하는 법과 개행 조정 전반은 「개행 조정」 페이지를 참고하세요.
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)라는 서로 다른 유니코드 문자로 나타납니다. 실제로 - -- --- $-$를 늘어놓은 한 줄을 pdftotext에 통과시키면 - – — − 네 글자가 돌아옵니다. 그다음 이 출력에 grep을 걸면 아직 하이픈으로 남아 있는 범위 표기와 본문에 섞여 든 마이너스 기호를 기계적으로 찾아낼 수 있습니다. 소스를 눈으로 훑는 것보다 빠르고, 검토자에게 넘기기도 좋습니다.
# 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, 언어별 „ “와 « » — 는 「인용」 페이지가 한꺼번에 다룹니다. 붙여 넣은 원고를 정리할 때는 대개 따옴표와 대시를 함께 보게 되므로, 두 페이지를 나란히 놓고 쓰는 편이 실용적입니다.