위아래 장식

\widehat은 어디까지 늘어날까요? 답은 “1.44 em까지, 그 이상은 없다”입니다. LaTeX의 넓은 갓 모양 악센트는 cmex10이라는 폰트에 글자 모양이 셋뿐이며, 10 pt 기준으로 너비가 5.55557 pt, 10.00002 pt, 14.44447 pt입니다. 네 번째는 없으므로 \widehat{f(x+y+z)} 같은 긴 식에 얹으면 갓은 그대로 성장을 멈추고 가운데에 덩그러니 남습니다. 반면 \overline, \overbrace, \overrightarrow는 선을 이어 붙여 만들기 때문에 얼마든지 늘어납니다. 식 위아래에 얹을 수 있는 것들은 모두 이 “늘어나는가, 늘어나지 않는가”의 어느 한쪽에 속하며, 잘못 고르면 모양이 무너집니다. 이 페이지는 그 경계를 측정값으로 보이고, \overset\stackrel\xrightarrow의 사용 구분까지 이어 갑니다.

늘어나는가, 늘어나지 않는가 — \hat\widehat\overline의 차이

셋은 글자 모양을 어디서 가져오는가가 다릅니다. fontmath.ltx를 보면 \hatoperators(본문용 로만체)에서 온 한 글자 크기의 악센트, \widehatlargesymbols(cmex10)에서 온 가변 너비 악센트, 그리고 \overline은 문자가 아니라 입니다. 그래서 \hat{x}는 한 글자 너비로 고정되고, \widehat{xy}는 세 단계 중 들어맞는 가장 큰 것을 고르며, \overline{xyz}는 내용 너비에 딱 맞게 그어집니다. 실측하면 너비 60 pt짜리 재료에 \overline을 걸었을 때 선도 정확히 60 pt입니다. 같은 재료에 \widehat을 걸어도 갓은 14.44447 pt 그대로입니다.

분류명령동작
rules & braces\overline \underline \overbrace \underbrace선을 이어 붙이므로 제한 없이 늘어남
extensible arrows\overrightarrow \overleftarrow \overleftrightarrow몸통을 \rightarrowfill로 잇기 때문에 한계 없음
wide accents\widehat \widetilde글자 모양이 셋뿐. 14.44447 pt에서 멈춤
fixed accents\hat \tilde \bar \vec \dot \ddot한 글자 크기로 고정. 전혀 늘어나지 않음
arbitrary material\overset \underset \stackrel \xrightarrow임의의 기호를 작게 얹음. 몸통이 늘어나는 것은 \xrightarrow

식 전체에 선 긋기 — \overline\underline

\overline{…}은 인수 위에, \underline{…}은 아래에 내용 너비에 꼭 맞는 선을 긋습니다. 둘 다 표준 LaTeX이라 패키지가 필요 없습니다. 여집합이나 켤레복소수, 또는 “이 구간을 한 덩어리로 보라”는 신호로 쓰입니다. \underline의 선은 yg처럼 기준선 아래로 내려오는 글자(디센더)를 피해 놓이므로 글자를 자르지 않습니다. 또한 이들은 깔끔하게 중첩되는 몇 안 되는 장식이기도 해서, \overline{\overline{z}}는 제대로 된 이중선으로 조판됩니다. 실측하면 \overline{z}의 높이가 6.30544 pt이고 이중으로 하면 8.30533 pt——한 겹마다 약 2 pt씩 올라갑니다.

latex
\[
  \overline{a + b} = \overline{a} + \overline{b}, \qquad
  \underline{x + y}, \qquad \overline{\overline{z}} = z
\]

중괄호로 범위 나타내기 — \overbrace{…}^{…}\underbrace{…}_{…}

가로 방향 중괄호를 식의 위나 아래에 걸치고, ^_로 그 바깥에 라벨을 붙일 수 있습니다. \overbrace\underbrace는 표준 LaTeX이며, 괄호는 내용의 전체 너비까지 늘어납니다. 라벨을 붙일 수 있는 이유는 fontmath.ltx의 정의가 \mathop{…}\limits 로 끝나기 때문입니다. \mathop으로 만든 덕분에 ^_를 쓸 수 있고, \limits가 적혀 있는 덕분에 위아래 배치가 본문 안(인라인)에서도 바뀌지 않습니다. 즉 \overbrace는 합 기호와 같은 구조로 라벨을 얹습니다.

latex
\[
  \underbrace{1 + 2 + \cdots + n}_{n \text{ terms}}
  = \frac{n(n+1)}{2}
  \qquad
  \overbrace{x + x + \cdots + x}^{k}
\]

라벨에 단어를 쓸 때는 수식 모드 안이므로 \text{…}(amsmath)로 감쌉니다. 그리고 그 \limits에는 대가가 있습니다. 실측하면 $\underbrace{a+b}_{n}$깊이는 14.19992 pt입니다. 맨 $a+b$가 0.83333 pt이고, 10 pt 문서의 줄 간격 \baselineskip이 12 pt이므로 본문 안에 두면 한 줄 간격보다 더 깊이 내려가 앞뒤 줄 간격이 벌어집니다. 그래서 중괄호는 별행 수식에서 쓰는 것이 정석입니다. 굳이 본문에 넣어야 한다면 \underbrace{a+b}\nolimits_{n}이라고 쓰면 라벨이 오른쪽으로 옮겨 가고 깊이도 8.53328 pt로 돌아옵니다. 참고로 합 기호 아래에 조건을 두 줄로 겹치는 \substack은 이웃한 주제로, 대형 연산자 페이지가 다룹니다.

\widehat\widetilde은 어디서 성장을 멈추는가

한계는 14.44447 pt, 10 pt 문서에서 약 1.44 em입니다. fontmath.ltx의 선언 \DeclareMathAccent{\widehat}{\mathord}{largesymbols}{"62}가 가리키는 것은 cmex10의 "62번 글자 모양이고, 거기서 "63, "64로 더 큰 판이 이어집니다. \fontcharwd로 재면 세 너비는 5.55557 pt, 10.00002 pt, 14.44447 pt입니다. TeX은 내용 너비를 넘지 않는 가장 큰 글자 모양을 고르므로, 재료가 14.44447 pt보다 좁으면 작은 갓이 선택되고, 그보다 넓으면 아무리 길어져도 가장 큰 것을 유지한 채 가운데에 놓입니다. \widetilde의 세 글자 모양도 너비가 같습니다. 그래서 \widehat{x}, \widehat{xy}는 자연스럽지만, \widehat{f(x+y+z)}가 되면 갓이 식의 일부에만 닿습니다.

latex
\[
  \widehat{x + y} \neq \hat{x} + \hat{y}, \qquad
  \widetilde{ab}, \qquad
  \overline{f(x+y+z)}   % use a rule once the hat runs out
\]

식 위에 화살표 긋기 — \overrightarrow\vec의 함정

유향선분 AB를 쓰려면 \overrightarrow{AB}이지 \vec{AB}가 아닙니다. \vecfontmath.ltx에서 \DeclareMathAccent{\vec}{\mathord}{letters}{"7E}로 선언된 한 글자 크기의 고정 악센트라서, \vec{AB}라고 쓰면 작은 화살표가 사실상 B 위에만 얹힙니다. 반면 \overrightarrow은 화살표 자체를 조립하는 구조로, 몸통이 \rightarrowfill——\cleaders로 빼기 기호를 깔고 화살촉을 붙이는 방식——이므로 너비에 상한이 없습니다. 왼쪽은 \overleftarrow, 양방향은 \overleftrightarrow입니다. 아래쪽에 두는 \underrightarrow \underleftarrow \underleftrightarrowamsmath가 필요합니다.

latex
\usepackage{amsmath}   % needed for \underrightarrow and friends
\[
  \vec{a} \quad \text{vs.} \quad \overrightarrow{AB},
  \qquad \overleftrightarrow{PQ}, \qquad \underrightarrow{x}
\]

한 글자에 붙이는 고정 악센트 — \dot \bar \hat\imath

고정 악센트는 한 글자를 꾸미기 위한 도구입니다. 시간 미분의 \dot, 이계 미분의 \ddot, 평균이나 켤레의 \bar, 추정량의 \hat, 근사의 \tilde——이공계 글에 끊임없이 나오는 표시들이 여기 모여 있습니다. 모두 표준 LaTeX이며, 여러 글자에 붙여도 늘어나지 않고 한 기호 크기 그대로 가운데에 놓입니다. 고전적인 작법이 하나 있는데, ij에 표시를 붙이면 원래의 점과 부딪히므로 점이 없는 \imath \jmath를 바탕으로 씁니다. \hat{\imath}라고 쓰면 갓만 깔끔하게 얹힙니다.

명령얹히는 것늘어나는가?
\hat갓 모양(서컴플렉스)고정. 넓은 판은 \widehat
\tilde물결표(틸데)고정. 넓은 판은 \widetilde
\bar짧은 가로선(마크론)고정. 식 전체에는 \overline
\vec작은 오른쪽 화살표고정. 넓은 화살표는 \overrightarrow
\dot \ddot점 하나, 점 둘고정. \dddot \ddddot은 amsmath 필요
\acute \grave양음 악센트와 억음 악센트고정
\check \breve하체크(ˇ)와 브레베(˘)고정
\mathring작은 고리(˚)고정
\imath \jmath점 없는 i와 j악센트의 바탕. \hat{\imath}처럼 씁니다

여기서 한 가지 주의할 점이 있습니다. 악센트는 이중으로 겹쳐도 곱게 얹히지 않습니다. \hat{\vec{x}}처럼 겹치면 위쪽 표시가 뜨거나 너무 높거나 중심에서 어긋나기 쉽습니다. 편하게 중첩되는 것은 앞서 본 \overline\underline 정도입니다. 점만 늘리고 싶다면 \ddot이나 amsmath의 \dddot \ddddot을 쓰고, 정말 다른 종류의 표시를 겹쳐야 한다면 다음 절의 \overset으로 명시적으로 조립하거나 전용 패키지에 맡기십시오. 위치를 미세 조정하고 싶을 때는 fontmath.ltx에 마련된 \skew도 쓸 수 있습니다.

latex
\[
  \dot{x}, \quad \ddot{x}, \quad \bar{x}, \quad \hat{p},
  \quad \tilde{a}, \quad \check{s}, \quad \hat{\imath}, \quad \vec{\jmath}
\]

\overset\stackrel의 차이 — 재 보면 1.11109 pt 어긋납니다

차이는 바탕의 종류를 물려받는가입니다. \stackrellatex.ltx\mathrel{\mathop{#2}\limits^{#1}}로 정의되어 있어, 무엇을 얹든 결과는 언제나 관계 기호가 됩니다. amsmath의 \overset\binrel@이라는 장치로 바탕의 종류를 조사해 이항 연산자면 이항 연산자로, 관계 기호면 관계 기호로 다시 조판합니다. 실측하면 a\overset{f}{+}b는 21.79968 pt로 a\mathbin{+}b와 정확히 일치하고, a\stackrel{f}{+}b는 22.91077 pt로 a\mathrel{+}b와 일치합니다. 1.11109 pt의 차이는 중간 공백 4 mu와 굵은 공백 5 mu의 차가 양쪽에 작용한 몫입니다. 바탕이 =처럼 애초에 관계 기호라면 둘은 같아지므로 망설여지면 \overset이 안전합니다.

latex
\usepackage{amsmath}   % \overset, \underset, \overunderset
\[
  A \overset{f}{\longrightarrow} B, \qquad
  X \underset{n \to \infty}{\longrightarrow} x, \qquad
  a \overset{\text{def}}{=} b, \qquad
  \overunderset{a}{b}{X}
\]

\overset{위}{바탕}은 임의의 기호나 식을 바탕 위에 작게, \underset{아래}{바탕}은 아래에 작게 얹습니다. 둘째 인수가 바탕이고 첫째 인수가 더하는 것이며, 더하는 쪽은 scriptstyle(첨자와 같은 크기)로 조판되므로 따로 손대지 않아도 작아집니다. 위아래 모두에 두고 싶으면 중첩해도 되지만, amsmath에는 \overunderset{위}{아래}{바탕}이 마련되어 있어 이쪽이 읽기 좋습니다. 고정 악센트와 다른 점은 얹을 것을 자유롭게 고를 수 있다는 것입니다. 또한 ^_가 기호의 오른쪽 위・오른쪽 아래에 붙는 데 비해, \overset\underset바로 위・바로 아래에 놓입니다.

글자를 얹고 늘어나는 화살표 — \xrightarrow\xleftarrow

화살표에 이름을 붙이고 싶다면 \stackrel이 아니라 amsmath의 \xrightarrow{…}를 씁니다. 이유는 너비에 있습니다. 긴 라벨을 얹은 A\xrightarrow{\text{very long label}}B는 79.12704 pt로, 몸통 자체가 라벨 너비까지 늘어납니다. 같은 라벨을 \stackrel\longrightarrow 위에 얹으면 전체는 72.7536 pt지만, 그 아래 화살표는 고정 길이인 37.25343 pt 그대로라 글자만 화살표 양끝으로 삐져나옵니다. 또한 \xrightarrow은 대괄호로 된 선택 인수를 받아, \xrightarrow[n \to \infty]{f}라고 쓰면 위에는 사상의 이름, 아래에는 조건을 동시에 놓을 수 있습니다. 반대 방향은 \xleftarrow입니다.

latex
\usepackage{amsmath}
% mathtools adds \xLeftarrow, \xhookrightarrow, \xmapsto and more
\[
  A \xrightarrow{\;f\;} B \xleftarrow{\;g\;} C,
  \qquad a_n \xrightarrow[n \to \infty]{} L
\]
  • 한 글자만 꾸미기 → 고정 악센트(\hat, \bar, \dot, \vec)
  • 식 전체를 덮기\overline, \overrightarrow. \widehat은 14.44447 pt에서 멈춥니다
  • 중괄호로 범위 표시\overbrace{…}^{…}, \underbrace{…}_{…}. 별행 수식에서 쓰십시오
  • 본문 안의 \underbrace → 깊이 14.19992 pt가 줄 간격을 벌립니다. \nolimits로 라벨을 옆으로 옮기세요
  • 임의의 기호를 위아래에 → amsmath의 \overset, \underset, \overunderset
  • 화살표에 이름 붙이기\xrightarrow{…}. \stackrel은 몸통이 늘어나지 않습니다
  • ij에 악센트 붙이기 → 점 없는 \imath, \jmath를 바탕으로