강조(\emph)

이미 강조된 문장 안에서 한 낱말을 다시 강조하면, 그 낱말은 더 기울어지는 것이 아니라 똑바로 일어섭니다. LaTeX의 \emph{...}를 겹쳐 쓰면 글자 모양이 한 단계마다 뒤집힙니다. 이탤릭, 그다음 정체(로만), 다시 이탤릭. 같은 일을 \textit으로 하면 아무 일도 일어나지 않습니다. 몇 겹을 쌓아도 전부 이탤릭 그대로입니다. 이 차이는 취향의 문제가 아닙니다. \emph는 “기울여라”가 아니라 “여기를 강조하라”라는 의미를 적어 두는 명령이고, 그 의미를 어떤 모습으로 보일지는 나중에 정해지기 때문입니다. 이 페이지에서는 그 전환의 구조, \em\emph 사이의 뜻밖의 차이, 이탤릭 보정 \/, 그리고 LaTeX에서 밑줄 긋기가 생각보다 까다로운 이유를 실제로 조판해 측정한 수치와 함께 따라갑니다.

\emph\textit의 차이

\emph는 문맥을 보고 전환하고, \textit은 무조건 기울입니다. 주변이 정체라면 \emph는 인수를 이탤릭으로 놓지만, 주변이 이미 이탤릭이라면 똑같은 \emph가 인수를 정체로 되돌립니다. 목적이 “본문과 구별되게 한다”이므로, 본문이 기울어 있다면 똑바로 세우는 쪽이 목적에 맞습니다. \textit에는 그런 판단이 없습니다. 이미 이탤릭인 범위 안에서 쓰면 겉모습이 전혀 달라지지 않고, 강조하려던 낱말은 주변에 그대로 묻힙니다. 강조에는 \textit이 아니라 \emph를 쓰라고 하는 가장 큰 이유가 이것입니다.

latex
% nesting the two commands, side by side
\emph{outer \emph{inner \emph{deepest}}}

\textit{outer \textit{inner \textit{deepest}}}

이 두 줄을 조판하면서 각 단계에서 NFSS가 들고 있는 셰이프 속성을 찍어 보면 차이가 분명해집니다. \emphitnitn으로 한 단계마다 뒤집히고, \textitititit으로 꿈쩍도 하지 않습니다. 게다가 \emph가 살피는 것은 “이탤릭인가”가 아니라 “지금 기울어져 있는가”입니다. \textsl{...}(슬랜트체) 안에서 \emph를 써도 내용은 n(정체)으로 돌아오고, \textbf{...} 안에서는 굵기 bx가 유지된 채 셰이프만 it이 되어 굵은 이탤릭(Computer Modern이라면 cmbxti10)이 불려 옵니다. 축이 서로 독립적이기에 강조는 굵기를 망가뜨리지 않고 그 위에 얹힙니다.

문맥\emph가 내는 자형\textit이 내는 자형
upright body text이탤릭(it)이탤릭(it)
inside \emph정체로 복귀(n) — 강조가 보임이탤릭 그대로 — 강조가 사라짐
inside \textit정체로 복귀(n)이탤릭 그대로(변화 없음)
inside \textsl정체로 복귀(n) — 기울기 전반을 봄이탤릭(it)으로 덮어씀
inside \textbf굵기 bx를 유지한 채 이탤릭굵기 bx를 유지한 채 이탤릭
italic correction자동으로 삽입됨자동으로 삽입됨(선언형 \itshape은 아님)
when to use문장 안의 강조 — 의미를 적는 모든 경우서명·학명·외국어 등 기울기 자체가 목적일 때

왜 겹쳐 쓰면 정체로 돌아오는가

답은 정의 자체에 있습니다. LaTeX의 핵심인 latex.ltx의 11172행은 단 한 줄, \DeclareTextFontCommand{\emph}{\em}입니다. 그 열 줄 위인 11162행에는 \DeclareTextFontCommand{\textbf}{\bfseries}가 있습니다. 즉 \emph는 글꼴 명령이 아니라 전환 선언 \em을 인수를 받는 형태로 감싼 것이며, \bfseries\textbf로 만든 것과 똑같은 공장에서 나온 물건입니다. 뒤집는 능력은 \emph가 아니라 \em에 있고, \em은 현재 셰이프를 먼저 살핀 뒤 갈 곳을 정합니다. 그래서 그 판단이 겹침의 각 단계에서 따로따로 일어납니다.

이 설계는 웹 HTML에서 <em>(강조)과 <i>(이탤릭)이 역할을 나누는 것과 완전히 같은 발상이며, LaTeX2e 쪽은 1994년부터 이렇게 구현해 왔습니다. <em>은 “강조됨”이라는 의미를 맡고 실제 모습은 CSS가 정합니다. LaTeX에서도 마찬가지로 본문에는 \emph의미만 적고, 그 모습은 클래스 파일이나 프리앰블이 정합니다. 실무상의 이득은 분명합니다. 나중에 “강조를 이탤릭이 아니라 볼드로 하고 싶다”로 방침을 바꿔도, 정의가 있는 한 곳만 고치면 문서 전체가 따라오고 원고 본문은 손대지 않습니다. 반대로 \textit{...}를 본문에 흩뿌려 두면 방침이 바뀔 때마다 해당 부분을 전부 찾아 다시 써야 합니다. 게다가 \textit은 서명에도 쓰는 명령이라, 찾아 바꾸기로 두 경우를 구분하는 것조차 불가능합니다.

강조 단계를 설계하기(\DeclareEmphSequence)

이탤릭과 정체의 교대는 기본값일 뿐이며, 프리앰블에서 통째로 바꿀 수 있습니다. 그 명령이 \DeclareEmphSequence이고, LaTeX News 31(2020년)에서 도입되었습니다. 인수는 쉼표로 구분한 글꼴 선언의 목록이며, 앞에서부터 차례로 1단계·2단계 강조에 대응합니다. 그전까지 LaTeX은 이탤릭과 정체를 오가는 것밖에 못 했지만, 이 구조 덕분에 1단계는 이탤릭, 2단계는 스몰캐피털, 3단계는 이탤릭 스몰캐피털처럼 계층을 직접 정할 수 있게 되었습니다.

latex
% in the preamble: italic, then small caps, then italic small caps
\DeclareEmphSequence{\itshape,%
  \upshape\scshape,\itshape}
  • 목록보다 깊게 겹쳐지면\emreset(기본값 \ulcshape\upshape, 곧 보통의 정체)이 쓰이고, 그다음 단계부터 목록이 처음으로 되돌아갑니다. 위의 두 항목짜리 목록으로 5단계까지 조판하면 실측값이 itscnitsc가 되어, 3단계에서 초기화되고 4단계부터 순환이 재개됩니다.
  • “똑똑한” 확인이 들어갑니다 — 지정한 선언이 현재 글꼴을 실제로 바꾸는지 LaTeX이 확인하고, 바뀌지 않는다면 그 단계를 건너뛰고 다음으로 갑니다. 이미 손으로 그 글꼴로 바꿔 두었으리라 가정하기 때문입니다.
  • 확인을 건너뛰려면 \emforce — 색만 바꾸는 선언처럼 “글꼴 속성은 그대로인데 겉모습은 분명히 달라지는” 항목에서는 이 확인이 오작동합니다. 해당 항목에 \emforce를 넣으면 속성이 그대로여도 강제로 적용됩니다.

\em\emph 중 무엇을 쓸 것인가

원고에서는 \emph{...}를 쓰십시오. \em은 같은 전환을 하지만 이탤릭 보정을 넣지 않습니다. \em은 인수를 받지 않는 선언으로, {\em 여기만}처럼 중괄호로 범위를 끊어 씁니다. 뒤집는 판단 자체는 \emph와 똑같습니다. 아니, 앞서 본 대로 \emph의 내용물이 곧 \em입니다. 차이는 포장지 쪽에 있습니다. \DeclareTextFontCommand가 만드는 인수형만이 기울어진 글자와 다음 글자 사이의 이음매에 보정을 끼워 넣습니다. 실측하면 \textit{f}h의 너비가 10.74167pt인데 {\itshape f}h는 8.62222pt이고, \emph{f}h는 10.74167pt인데 {\em f}h는 8.62222pt입니다. 차이인 2.11945pt가 통째로 사라집니다. 선언형을 쓴다면 기울어진 범위 끝에 \/를 직접 붙여야 합니다.

이탤릭 보정 \/의 정체

이탤릭 보정은 그 글자가 오른쪽으로 얼마나 삐져나오는지를 나타내는 수치이며, 글꼴 메트릭 파일에 글자마다 하나씩 적혀 있습니다. 기울어진 글자는 겉모양이 오른쪽 위로 튀어나오지만, 조판상의 너비(f라면 3.06665pt)는 거기까지 담지 않습니다. 그래서 바로 옆에 정체 글자가 오면 튀어나온 부분과 부딪힙니다. TeX의 글꼴 메트릭(TFM)에는 이 돌출량이 처음부터 CHARIC으로 들어 있습니다. cmti10fCHARIC R 0.211945, 디자인 크기 10pt에서 2.11945pt이며, 앞 절에서 \textit{f}h{\itshape f}h의 차이로 측정된 값과 소수점 아래까지 일치합니다. \/는 “앞 글자의 CHARIC을 공백으로 삽입하라”는 명령일 뿐입니다. 참고로 정체인 cmr10에서도 fCHARIC은 0.077779로 0이 아닙니다. 그 갈고리만큼 튀어나와 있기 때문입니다.

\emph\textit이 보정을 자동으로 넣는다고 해서 언제나 넣는 것은 아닙니다. 바로 뒤 글자가 쉼표나 마침표라면 보정은 생략됩니다. latex.ltx 11250행의 \def \nocorrlist {,.}가 그 목록으로, 문장 부호는 자리가 낮아 기울어진 글자 아래로 알맞게 파고들기 때문에 공백을 더하면 오히려 떨어져 보입니다. 실측도 일치합니다. \textit{f}.{\itshape f}.는 둘 다 정확히 5.84444pt였습니다. 반대로 보정을 막고 싶을 때는 인수 안에 \nocorr를 둡니다. \textit{\nocorr text}는 앞쪽, \textit{text\nocorr}는 뒤쪽 보정이 억제됩니다. \nocorrlist 자체도 \renewcommand로 바꿀 수 있지만, 기본값인 쉼표와 마침표로 곤란해질 일은 거의 없습니다.

latex
% argument form: the correction is added for you
He was \emph{very} clever.

% declaration form: add \/ at the end of the slanted run
He was {\em very\/} clever.

% before a comma or period nothing is added anyway
He was \emph{very}, and cheerful too.

% to suppress it explicitly
\textit{slanted\nocorr}text

\underline이 줄을 넘지 못하는 이유

\underline은 본문용 명령이 아니라, 수식의 밑줄을 문장 속에서 쓸 수 있게 해 준 것에 지나지 않습니다. 그래서 내용물이 통째로 상자 하나가 되어 도중에 줄을 바꿀 수 없습니다. 정의는 latex.ltx 13309행부터이며, 텍스트 모드에서는 $\@@underline{\hbox{#1}}\m@th$로 전개됩니다. \hbox는 나눌 수 없는 상자이므로 TeX의 줄바꿈 기구가 그 안쪽에 손을 대지 못합니다. 실제로 너비 150pt짜리 문단에 \underline{alpha beta gamma delta epsilon zeta eta theta iota kappa lambda mu}를 넣어 조판하면 Overfull \hbox (170.25879pt too wide)가 나오고, 밑줄 친 어구가 오른쪽 여백으로 170pt나 삐져나옵니다. 한두 낱말이라면 괜찮지만, 문장에 걸치는 순간 무너집니다. 하이픈 분철도 그 안에서는 멈춥니다.

밑줄은 애초에 활자 조판의 도구가 아니라 타자기를 위해 고안된 대용품입니다. 기울인 활자도 굵은 활자도 없는 기계에서 “여기를 강조했다”를 전할 유일한 수단이, 롤러를 한 줄 되감아 밑줄을 치는 것이었습니다. 진짜 활자로 조판하는 인쇄소에는 그런 필요가 없으니 책은 밑줄을 쓰지 않고, LaTeX 표준 클래스도 그에 따라 밑줄을 강조 수단으로 마련해 두지 않았습니다. 원고에서 밑줄을 긋고 싶어지면 먼저 “정말 선이 필요한가, 아니면 강조인가”를 확인하십시오. 강조라면 \emph, 서명이라면 \textit, 문서의 층위라면 \section 계열 — 거의 모든 경우에 더 알맞은 도구가 이미 있습니다. 정말로 선이 필요한 것은 선 자체가 규정된 경우입니다. 심사자의 지시, 법률 문서의 서식, 어학 교재의 빈칸 같은 것들입니다.

줄을 넘는 밑줄 — ulemsoul

줄을 넘는 밑줄이 필요하면 ulem이나 soul을 읽어 들입니다. 둘 다 TeX Live 2024에 함께 들어 있어 따로 설치할 필요가 없습니다. 앞서 \underline이 170.26pt나 넘쳤던 그 150pt 폭 문단에서, ulem\uline{...}soul\ul{...}도 넘침은 0.30pt뿐이었습니다. 즉 보통 문장처럼 줄바꿈이 됩니다. ulem은 Donald Arseneau가 1989년부터 이어 온 패키지로, \uline 외에 \uuline(이중 밑줄), \uwave(물결선), \sout(취소선), \xout(빗금 지우기)을 갖추고 있습니다. soul은 Melchior Franz가 1998년에 공개했고 지금은 Oberdiek Package Support Group이 관리하며, \ul 외에 선이 아닌 강조 방식 — \so(자간 벌리기), \st(취소선), \hl(형광펜) — 까지 다룰 수 있는 것이 특징입니다.

여기에 유명한 함정이 있습니다. ulem을 읽어 들이기만 해도 문서의 강조가 전부 밑줄로 바뀝니다. ulem.sty의 머리말에는 LaTeX에서 이 패키지가 강조 텍스트의 이탤릭을 밑줄로 대체한다고 분명히 적혀 있고, 313행의 \def\ULforem{\useunder{\uline}{\em}{\emph}}\em\emph를 통째로 가로챕니다. 실측하면, ulem을 그냥 읽어 들인 상태의 \emph{word}는 상자 깊이가 2.9pt가 되고(밑줄이 베이스라인 아래에 붙은 만큼입니다), \normalem을 선언한 직후의 같은 \emph{word}는 깊이가 0.0pt로 돌아옵니다. 즉 \usepackage{ulem}이라고 쓰는 순간 원고 속의 \emph가 하나도 남김없이 밑줄이 됩니다. 평범한 강조를 유지한 채 밑줄 기능만 쓰고 싶다면 \usepackage[normalem]{ulem}이라고 쓰십시오. 투고 직전 PDF를 보고 창백해지는 사고의 단골이므로, ulem을 추가했다면 반드시 전체를 다시 살펴봅니다.

latex
% keep \emph italic; take only the rule-drawing commands
\usepackage[normalem]{ulem}   % \uline \uuline \uwave \sout \xout
% \usepackage{soul}           % \ul \so \st \hl

\uline{this underline breaks across lines just like ordinary text}

\sout{deleted} \quad \uwave{doubtful}

강조는 어느 정도까지 써도 되는가

어림잡아, 한 문단에 강조가 두 군데 이상 있다면 그것은 글꼴이 아니라 문장을 고치라는 신호입니다. 강조가 통하는 것은 주변이 강조되어 있지 않기 때문입니다. 한 면에 흩어질수록 어느 것이나 같은 무게로 보이기 시작해, 결국 아무 데도 두드러지지 않게 됩니다. 강조는 쓰는 도중보다 퇴고 단계에서 힘을 발휘합니다. 초고에서는 중요한 낱말에 \emph를 붙여 두어도 괜찮지만, 제출 전에 다시 읽으면서 정의어·대비·주의·결론을 문장 구조 자체로 나눌 수 없는지 생각해 보십시오. 구조가 그 일을 해내는 글에서는 강조가 “정말로 읽히고 싶은 한 곳”에만 남습니다. 참고로 한국어 본문에서는 이탤릭이 글자꼴로서 어색해지기 쉬워, 굵은 글씨나 드러냄표 쪽이 독자의 기대에 맞는 경우가 있습니다. 분야와 클래스의 관례에 맞춰 정하십시오.

  • 전문 용어의 첫 등장에 씁니다. 막 정의한 용어를 \emph로 표시해 두면, 나중에 색인이나 용어집으로 기계적으로 걷어 올릴 수 있습니다.
  • 겉모습이 목적이면 분리합니다. 서명·학명·외국어의 이탤릭은 \textit의 몫입니다. 강조와 뒤섞으면 나중에 강조의 모습을 바꿀 때 함께 휩쓸립니다.
  • \textbf으로 일괄 치환하지 않습니다. 겉모습만 바꾸고 싶다면 프리앰블에서 \DeclareEmphSequence로 고칩니다. 본문의 의미를 지우는 치환은 되돌릴 수 없습니다.
  • 방침은 문서 단위로 정합니다. 장마다 강조의 모습이 달라지면 독자는 중요도 자체를 잘못 읽습니다.
  • 제출 전에 \textit{를 검색합니다. 강조의 대용으로 쓰인 것이 섞여 있지 않은지, \emph가 제목이나 캡션에서 번식하지 않았는지 확인합니다.