요약
이 강의에서는 수식 모드에 들어가고 거기서 적절히 빠져나오는 법을 배운다. 수식 모드에서는 텍스트와 비교해 무엇이 달라지는지 설명한다. 글자는 변수로서 이탤릭으로 조판되고, 소스의 공백은 세지 않으며, 엔진이 각 기호의 간격을 그 종류에 따라 계산하고, 빈 줄은 금지되며, 두 모드 가운데 한쪽에만 있는 기호가 있다. 변수를 \textit로 쓰지 않는 이유와, LuaLaTeX에서 자기 모드 밖에 쓴 수식 기호가 어떻게 되는지도 보인다. 이어서 $…$와 \(…\)로 쓰는 본문 수식, 그 높이의 제한, 수식 안에서의 줄바꿈, 물결표와 문장 부호를 다루고, \[…\]와 equation, equation* 환경으로 쓰는 별행 수식을 문장 부호를 붙이는 문장의 일부로서 다루며, $$…$$를 쓰지 않고 그 앞에 빈 줄을 두지 않는 이유를 설명한다. 또한 \label, \eqref, \numberwithin, \tag를 이용한 번호 매기기, \text와 \mathrm를 이용한 수식 속 텍스트와 명시적 공백, 수식 모드에서의 소수점과 쉼표, 수와 단위를 위한 siunitx 패키지를 살펴본다. 끝으로 로그 파일에 나타나는 전형적인 오류와 피하는 것이 좋은 일을 정리한다.
학습 목표
- 수식 모드에서 텍스트와 비교해 무엇이 달라지는지 설명하고, 잘못된 모드에 쓴 변수, 단어, 기호의 결과를 예측한다.
- 본문 수식과 별행 수식 가운데 알맞은 것을 고르고, 각각을 문장 부호를 갖춘 문장의 일부로서, 부적절한 빈 줄 없이 쓴다.
- 별행 수식에
equation으로 번호를 붙이고,\eqref로 참조하며,\numberwithin과\tag가 만드는 번호를 예측한다. - 한국의 이공계 문서 관행에 따라 소수와 단위가 붙은 양을 쓰고, 수식 모드가 소수점과 쉼표를 어떻게 다루는지 안다.
- 로그 파일에서 “
Missing $ inserted”, “Bad math environment delimiter”, “Missing character” 오류를 진단하고 소스에서 그 원인을 찾는다.
두 가지 조판 모드
지금까지 엔진은 텍스트를 조판했다. 공백으로 구분된 단어가 줄과 문단으로 배분된다. 수식은 다른 규칙을 따르므로, LaTeX는 수식을 별도의 수식 모드에서 조판하며, 구분자로 이 모드에 들어가고 나온다. 들어갈 때 달라지는 것이 많으므로, 구분자를 보기 전에 그것을 먼저 나열해 두는 것이 좋다. 이 강의의 조언은 거의 모두 거기서 나오기 때문이다.
- 글자는 고유의 이탤릭, 곧 변수의 이탤릭으로 조판된다. 그 너비와 간격은 단어가 아니라 기호로 읽히도록 설계되어 있으며, 이 글꼴에는 라틴 문자만 있고 한글은 없다.
- 소스의 공백은 세지 않는다.
$x=a-b$와$x = a - b$는 정확히 같은 결과를 낸다. 간격은 엔진이 각 기호의 종류에 따라 계산한다. 일반 기호(글자, 숫자), 이항 연산자(+,-), 관계 기호(=,<), 문장 부호(쉼표), 여는 기호와 닫는 기호(괄호)이다. - 빈 줄은 허용되지 않는다. 빈 줄은 문단을 끝내는데, 문단이 끝날 때 수식이 열린 채로 남을 수는 없다.
- 두 모드 가운데 한쪽에만 있는 기호가 있다. 위첨자와 아래첨자를 만드는
^와_,\alpha같은 그리스 문자는 수식의 기호이고, 한글과 é 같은 악센트가 붙은 라틴 문자는 텍스트의 글자이다.
둘째 줄과 셋째 줄은 소스가 다른데도 똑같다. $x=a-b$의 빼기 기호는 양쪽에 피연산자가 있으므로 이항 연산자이고, 중간 크기의 간격을 받는다. $y=-b$의 등호 뒤에서는 왼쪽에 피연산자가 없으므로 단항 기호로 취급되어 b에 붙는다. 텍스트로 조판한 첫째 줄은 아무것도 구별하지 않는다. 하이픈은 하이픈일 뿐이고, 등호 양쪽에 간격이 없다.
변수를 textit로 쓰지 않는 이유
이로부터 텍스트의 이탤릭과 수식 모드의 이탤릭이 같은 것이 아님이 따라 나온다. \textit{x}는 텍스트 이탤릭의 글자로서, 엔진이 기호에 주는 간격이 없다. 그리고 수식 모드에 쓴 단어는 단어가 아니라 곱해진 변수들의 나열이며, 그 글자가 수식 글꼴에 아예 없으면 사라져 버린다.
첫째 줄의 간격은 저자가 입력한 공백뿐이고, 기호는 본문 글꼴의 것이다. 글자도 텍스트 이탤릭이어서 수식의 글자와 모양이 다르다. 수식 안에서는 반대로 엔진이 등호와 부등호 양쪽에 관계 기호의 간격을 넣는다. 셋째 줄에서는 한글 단어가 완전히 사라지고 등호와 빼기 기호만 남는다. kotex를 쓴 문서에서 수식 모드의 한글은 한글이 없는 라틴 글꼴로 조판되기 때문이며, 이를 알려 주는 것은 글자마다 한 줄씩 나오는 로그 파일의 “Missing character”뿐이다. 라틴 문자로 된 단어라면 사라지지는 않지만, 간격이 고르지 않은 변수들의 곱으로 읽힌다. amsmath 패키지의 \text 명령은 이 강의 뒷부분에서 다룬다.
자기 모드 밖의 수식 기호
pdfLaTeX에서는 본문에 \alpha를 쓰면 “Missing $ inserted” 오류가 난다. 이 강좌의 엔진인 LuaLaTeX에서는 그렇지 않다. 그리스 문자는 오류 없이 조판되지만, 결과를 예측할 수 없다. 문서에서 아직 수식이 하나도 조판되지 않았다면 글자는 사라지고, 이미 수식이 조판되었다면 수식 글꼴에서 가져온 글자가 다음 낱말에 붙어서 나타난다. 명령 뒤의 공백이 없어지기 때문이다.
첫째 문장은 눈에 보이는 경고 없이 글자를 잃고, 셋째 문장은 우연히 글자를 지키지만 “각은”에 붙어 버린다. 유일한 흔적은 로그 파일에 있으며, 그것도 첫째 문장에 대해서만 있다.
Missing character: There is no ^^K (U+000B) in font nullfont!소스에서 \alpha 뒤의 공백은 명령 이름을 끝내고 그대로 버려진다. 이 공백은 생략할 수 없다. LuaLaTeX에서는 한글도 영문자와 마찬가지로 글자로 취급되므로, \alpha각은은 정의되지 않은 명령 이름으로 읽힌다. 따라서 LuaLaTeX에서는 자기 모드 밖에 쓴 수식 기호가 보고되지 않는다. 언제나 구분자 사이에 써야 하며, 문서를 완성했다고 보기 전에 로그에서 “Missing character”를 찾아보는 것이 좋다.
콘텐츠를 불러오는 중…