LaTeX의 로고 명령 \TeX의 정의는 T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX\@라는 한 줄입니다. 커누스가 plain.tex에 쓴 원형과 나란히 놓으면, LaTeX판은 끝에 \@ 하나가 더 붙어 있을 뿐입니다——그 토큰 하나 때문에 “…으로 조판했다. 다음 문장은”이라고 쓸 때의 문장 끝 공백이 1.11pt 넓어집니다. 로고 명령은 장식이 아니라 이런 자잘한 판단이 쌓인 결과물입니다. 이 페이지에서는 \TeX, \LaTeX, \LaTeXe 세 가지가 어떻게 조판되는지, \XeTeX나 \BibTeX를 찍으려면 무엇이 필요한지, 그리고 로고가 깨지는 세 곳——제목, PDF 책갈피, .bib 파일——에서 어떻게 써야 하는지를 실제로 조판해 얻은 출력과 함께 살펴봅니다.
로고는 어떻게 조판되는가 — 커닝과 들어올림의 내용
\TeX는 “T”, “내려간 E”, “X” 셋을 음수 커닝으로 끌어당긴 것입니다. 숫자까지 보면 설계 의도가 드러납니다. T와 E 사이가 −0.1667em(정확히 1/6 em으로, 수식의 얇은 공백과 같은 양), E와 X 사이가 −0.125em(1/8 em), E가 가라앉는 양이 0.5ex 입니다. 재미있는 것은, 이렇게 좁혔는데도 결과가 좁아지지 않는다는 점입니다. 10pt Computer Modern에서 너비를 재면 그냥 친 “TeX”이 18.33334pt인데 \TeX는 18.6108pt——오히려 살짝 넓습니다. E를 내린 만큼 이웃한 글자꼴이 맞물리는 방식이 달라지기 때문이며, \TeX가 “좁히는 명령”이 아니라 “모양을 만드는 명령”임을 알 수 있습니다. \LaTeX 쪽은 확실히 좁아져서, 친 “LaTeX”의 29.58337pt에 비해 25.66368pt, 13%가량 줄어듭니다.
% The three logos LaTeX itself defines (latex.ltx, lines 7648-7661).
\DeclareRobustCommand\TeX{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX\@}
\DeclareRobustCommand{\LaTeX}{L\kern-.36em%
{\sbox\z@ T%
\vbox to\ht\z@{\hbox{...\fontsize\sf@size\z@ ... A}\vss}}%
\kern-.15em\TeX}
\DeclareRobustCommand{\LaTeXe}{\mbox{\m@th
\if b\expandafter\@car\f@series\@nil\boldmath\fi
\LaTeX\kern.15em2$_{\textstyle\varepsilon}$}}\LaTeX는 같은 발상의 연장으로, \TeX 앞에 작게 올린 A를 놓아 “La”를 만든 뒤 TeX 로고에 잇습니다. 그 A는 독립된 문자가 아니라 T의 높이와 꼭 같은 \vbox에 각주 크기(\sf@size)의 A를 위쪽으로 붙여 넣은 것——곧 “T의 머리에 A의 머리를 맞춰라”라는 지시입니다. L과 A 사이의 −0.36em 이라는 깊은 커닝이 그 특유의 맞물림을 만듭니다. \LaTeXe는 그 뒤에 2와 수식 아래첨자로 놓은 \varepsilon 을 늘어놓은 것으로, $_{\textstyle\varepsilon}$를 잘 보면 ε가 수식 모드에서 온다는 것을 알 수 있습니다. 그래서 ε의 모양은 본문 서체가 아니라 수식 서체를 따릅니다. 굵은 제목 안에서 로고가 굵어지는 것도 \LaTeXe가 서체 시리즈를 살펴 \boldmath로 바꾸기 때문입니다.
기본으로 쓸 수 있는 로고는 셋뿐 — XeTeX나 BibTeX는 없습니다
순수 LaTeX가 정의하는 로고 명령은 정확히 셋, \TeX, \LaTeX, \LaTeXe 입니다. \XeTeX, \LuaTeX, \pdfTeX, \BibTeX, \ConTeXt는 어느 것도 들어 있지 않습니다. 그대로 쓰면 ! Undefined control sequence.가 돌아오므로 패키지를 불러와야 합니다. 다만 알아 둘 예외가 두 가지 있습니다. 수식 문서라면 대개 불러오는 amsmath를 읽어 들이면 \AmS 를 쓸 수 있고, \AmS-\LaTeX라고 쓰면 “AMS-LaTeX” 워드마크가 됩니다. 그리고 METAFONT와 METAPOST는 mflogo 패키지의 \MF, \MP가 표준입니다——전용 로고 글꼴로 조판되기 때문에 다른 방법으로는 올바른 모양이 나오지 않습니다.
hologo와 metalogo의 차이 — 어느 쪽을 골라야 하나
망설여진다면 hologo입니다. 결정적인 이유는 “많이 갖췄기 때문”이 아니라 PDF 책갈피에서 깨지지 않기 때문이며, 뒤의 절에서 실측합니다. hologo(TeX Live 2024 동봉판은 v1.15, 2021-11-16)는 개별 명령을 늘리는 대신 \hologo{XeTeX}처럼 로고 이름을 인수로 받는 하나의 명령으로 묶은 설계입니다. 패키지 자신의 설명줄이 “책갈피를 지원하는 로고 모음”이라고 밝히고 있는데, 바로 그 점이 핵심입니다. 약 50개의 이름을 알고 있어서 \hologo{pdfTeX}, \hologo{LuaTeX}, \hologo{BibTeX}, \hologo{ConTeXt}, \hologo{KOMAScript}, \hologo{LaTeX3}, \hologo{biber} 가 모두 동작합니다. 문장 첫머리에서 첫 글자를 대문자로 하고 싶다면 \Hologo{...}를 쓰며, \Hologo{pdfLaTeX}는 “PdfLaTeX”로 조판됩니다.
주의할 점은 모르는 이름을 넘기면 그냥 실패한다는 것입니다. 일본어권에서 익숙한 \hologo{pTeX}나 \hologo{pLaTeX}는 TeX Live 2024에 동봉된 hologo에 등록되어 있지 않아 ! Package hologo Error: Unknown logo 라는 오류가 납니다. pTeX・upTeX・pLaTeX・upLaTeX를 본문에 쓸 때는 로고 명령을 찾는 일을 그만두고 그냥 글자로 적는 편이 실제적입니다. 한편 metalogo(v0.12, 2010년)는 반대 설계로, \XeTeX, \XeLaTeX, \LuaTeX, \LuaLaTeX를 개별 명령으로 정의하고, 그 대신 \setlogokern{Te}{...}와 \setlogodrop{...}로 커닝과 내림 폭을 쌍 단위로 조정할 수 있게 해 줍니다. 사용 중인 글꼴에 맞춰 로고의 맞물림을 다시 잡아야 한다면——예컨대 XeLaTeX에서 시스템 글꼴을 쓰는데 \LaTeX의 A 위치가 마음에 들지 않는다면——이것이 유일한 도구입니다. 참고로 hologo는 \hologo와 \Hologo만 공개하므로 metalogo와 함께 불러와도 명령 이름이 충돌하지 않습니다(TeX Live 2024의 pdfLaTeX와 XeLaTeX 양쪽에서 확인). 그래도 표기를 고르게 하려면 한쪽으로 통일하는 편이 좋습니다.
\usepackage{hologo} % \hologo{...} and \Hologo{...}
% \usepackage{metalogo} % \XeTeX, \LuaTeX + \setlogokern for fine tuning
% \usepackage{mflogo} % \MF and \MP
\hologo{pdfTeX}, \hologo{XeTeX} and \hologo{LuaTeX} succeed \hologo{TeX}.
\hologo{BibTeX} builds the bibliography; \hologo{ConTeXt} is a rival format.
\Hologo{pdfLaTeX} starts a sentence with a capital.
% \hologo{pTeX} is NOT defined: "Unknown logo" error. Type pTeX instead.| 명령 | 출력 | 필요한 패키지 |
|---|---|---|
\TeX | TeX(E가 0.5ex 내려감) | 기본 LaTeX(없음) |
\LaTeX | LaTeX(작은 A가 T의 높이에 맞춰짐) | 기본 LaTeX(없음) |
\LaTeXe | LaTeX2ε(ε는 수식 아래첨자라 수식 서체를 따름) | 기본 LaTeX(없음) |
\AmS | AMS. \AmS-\LaTeX로 AMS-LaTeX가 됩니다 | amsmath / amstex |
\hologo{XeTeX} | XeTeX(반전된 E). 책갈피에서도 안전합니다 | hologo |
\hologo{BibTeX} | BibTeX. \hologo{biber}와 \hologo{BibTeX8}도 있습니다 | hologo |
\hologo{ConTeXt} | ConTeXt. \hologo{LuaTeX}, \hologo{pdfTeX}, \hologo{KOMAScript} 도 같은 방식으로 부릅니다 | hologo |
\XeTeX | XeTeX. \setlogokern으로 미세 조정할 수 있지만 책갈피에서는 깨집니다 | metalogo |
\LuaLaTeX | LuaLaTeX. \XeLaTeX와 \LuaTeX도 같은 패키지입니다 | metalogo |
\MF / \MP | METAFONT / METAPOST. 전용 로고 글꼴로 조판됩니다 | mflogo |
XeTeX 로고의 반전된 E는 무엇으로 만들어지는가
답은 엔진에 따라 다릅니다. hologo도 metalogo도 먼저 “지금 쓰는 글꼴에 U+018E(라틴 대문자 반전 E, Ǝ)가 있는가”를 묻고, 있으면 그 글자를 그대로 쓰며, 없으면 graphicx의 \reflectbox로 E를 거울상으로 만듭니다. 그래서 같은 소스라도 알맹이가 달라집니다. TeX Live 2024에서 \hologo{XeTeX}만 담긴 문서를 조판하고 생긴 PDF에서 pdftotext로 텍스트를 뽑아 보면——XeLaTeX으로 조판한 경우 XƎTEX, pdfLaTeX으로 조판한 경우 XETEX 입니다. 앞의 것은 진짜 Ǝ가 문자로 들어 있어 복사해도 Ǝ 그대로이고, 뒤의 것은 “좌우로 뒤집어 놓은 E”라서 텍스트 층에는 평범한 E만 남습니다. 지면에서는 같아 보여도 검색이나 복사의 결과가 다른 것입니다.
그렇다면 그 \reflectbox조차 없는 환경에서는 어떻게 될까요. hologo는 포기하지 않고 graphicx → pgf → pstricks → 자체 드라이버 전용 코드 순으로 대체 수단을 찾습니다. 그래도 없으면 해당 로고가 needs driver specific macros, but driver ... is not supported 라는 경고를 낸 뒤 평범한 e를 조판하고 계속 진행합니다. 즉 지면에는 “XeTeX”이라고만 나오고 문서는 완성됩니다——오류로 멈추지 않기에 오히려 알아차리기 어려운 고장입니다. 보통의 pdfLaTeX나 XeLaTeX에서는 이 경로로 떨어지지 않으니 걱정할 필요는 없지만, 특이한 드라이버를 쓰는데 로고가 유난히 밋밋해 보인다면 로그의 이 경고를 의심해 보십시오.
제목・PDF 책갈피・.bib — 로고가 깨지는 세 곳
제목은 괜찮고, 책갈피는 패키지에 달렸으며, .bib은 주의가 필요합니다——이것이 결론입니다. 먼저 제목. \TeX와 \LaTeX는 \DeclareRobustCommand로 정의되어 있어 목차나 쪽머리로 기록되어도 깨지지 않습니다(이동 인수에서 사고가 났다는 옛이야기는 이 보호가 없던 시절의 것입니다). 문제는 책갈피 쪽입니다. hyperref는 PDF 책갈피 문자열을 만들 때 모든 조판 명령을 버려야 합니다. TeX Live 2024에서 metalogo로 \section{Using \XeTeX{} today}를 조판하면 로그에 Package hyperref Warning: Token not allowed in a PDF string (Unicode): removing \reflectbox on input line 5.가 거듭 늘어서고, 완성된 책갈피는 “Using X0.5ex0.5exE0.5exTeX today”——치수 지정이 그대로 문자열에 새어 나옵니다. 같은 제목을 \hologo{XeTeX}로 쓰면 경고는 0건, 책갈피는 “Using XeTeX today” 입니다. hologo가 로고마다 PDF용 별도 표현을 갖고 있기 때문이며, 이것이 “망설여지면 hologo”의 이유입니다.
.bib은 또 다른 방식으로 깨집니다. BibTeX의 여러 스타일은 표제의 대소문자를 다시 다듬기 때문에, 중괄호로 보호되지 않은 것을 기계적으로 소문자화합니다. 로고 명령도 그 대상입니다. title = {Typesetting With \LaTeX and \TeX}라고 쓰고 plain.bst에 걸면 생성된 .bbl에는 Typesetting with \latex and \tex.가 들어가고, 다음 조판에서 ! Undefined control sequence.가 나며 멈춥니다. 대책은 간단합니다. 로고 명령을 중괄호로 감싸면 됩니다. title = {Typesetting With {\LaTeX} and {\TeX}}라고 하면 .bbl에도 그대로 남습니다. {DNA} 같은 두문자어를 지키는 것과 같은 습관입니다. 그리고 로고를 써서는 안 되는 자리도 기억해 두십시오. 파일 이름, URL, \verb 안, pdftitle 같은 PDF 메타데이터, 그리고 명령줄을 설명하는 곳——여기서는 꾸밈없는 “LaTeX”이 옳고, 로고 명령은 무의미하거나 해롭습니다.
% Wrong: plain.bst lower-cases it to \latex, then LaTeX stops with
% ! Undefined control sequence.
title = {Typesetting With \LaTeX and \TeX}
% Right: braces protect the command from BibTeX case changing
title = {Typesetting With {\LaTeX} and {\TeX}}공백을 먹는 문제 — LaTeX is가 LATEXis가 되는 이유
\LaTeX is great.라고 쓰면 출력은 LATEXis great.——로고와 다음 단어가 붙습니다.(TeX Live 2024에서 조판한 PDF에서 pdftotext로 뽑은 실제 문자열입니다.) 원인은 로고 명령 고유의 것이 아니라, 영문자만으로 철자된 명령은 이름의 끝을 표시하는 공백을 흡수한다는 TeX의 어휘 분석 규칙 자체입니다. 왜 그런지는 기본 문법 페이지가 다룹니다. 대처는 둘입니다. 명령 바로 뒤에 빈 중괄호 {} 를 두거나, 백슬래시+공백 \ (제어 공백)를 넣는 것입니다. 어느 쪽이든 출력은 LATEX is great.가 됩니다. 바로 뒤가 쉼표나 마침표라면 애초에 먹힐 공백이 없으므로 \LaTeX, \TeX.는 그대로 두어도 됩니다. xspace 패키지로 자동 보충하는 방식도 있지만 예외 판정을 놓치는 자리가 있으므로, 우선 {}나 \ 로 명시하는 것이 확실한 습관입니다.
% Bad: the space is eaten, giving "LATEXis great."
\LaTeX is great.
% Good: empty braces end the command name
\LaTeX{} is great.
% Good: a control space
\LaTeX\ is great.
% No space to eat before punctuation, so this needs nothing
\LaTeX, \TeX.
% In maths, step back into text mode first
$x = \text{\LaTeX}$마지막으로 한 가지 더, 로고 명령은 텍스트 모드의 것이라는 점입니다. \TeX는 \lower와 \hbox로 조립되어 있으므로 수식 모드($...$) 안에 그대로 두는 것은 좋지 않고, $x = \text{\LaTeX}$처럼 amsmath의 \text{}로 일단 텍스트로 돌아온 뒤 써야 합니다. \LaTeXe는 한술 더 떠 정의 자체가 \mbox로 감싸여 있고, 내부에서 수식 모드로 들어가 ε를 아래첨자로 놓습니다. 로고 명령을 “문자열”이라고 여기는 동안에는 당황스러운 동작도, 올리고 내린 상자(사용자 수준의 대응물은 \raisebox)와 커닝과 수식 아래첨자의 조합임을 알고 나면 어디서 깨질지 미리 짐작할 수 있게 됩니다.