LaTeX

내위키
Dennis (토론 | 기여)님의 2020년 2월 23일 (일) 07:08 판 (→‎자동화)

출판물에는 [math]\displaystyle{ \LaTeX }[/math]라고 써야 정확하다. 라텍, 또는 레이텍이라고 읽는 것이 보통. 음성기호로는 /ˈlɑːtɛk/ 또는 /ˈleɪtɛk/.

TeX을 기반으로 컴퓨터과학자 레슬리 램포트(Leslie Lamport)가 만든 조판 프로그램이자 문서 마크업 언어. TeX이 워낙에 극악의 난이도를 자랑하디 보니 좀 쉽게 쓸 수 있도록 만든 것이다. 그 덕택에 난이도는 극악에서 차악으로. TeX을 만든 도널드 커누스 교수도 "알고리즘 분석의 아버지"라는 별명을 가질 정도로 컴퓨터과학계에서는 전설은 아니고 레전드급이지만 레슬리 램포트도 '분산 컴퓨팅'의 아버지라는 말을 들을 정도로 출중한 컴퓨터과학자다. 커누스는 1974년, 램포트는 2013년에 컴퓨터과학계의 최고 영예로 손꼽히는 앨런튜링상을 받았다. 그런 천재들이 만들었으니 괴랄하게 어렵지. 지금은 레슬리 램포트는 손을 떼고 팀 체제로 개발을 진행하고 있다. 최신 버전은 LaTeX2ε.[1] LaTeX과 비교해서 커누스 교수가 만든 원래의 TeX은 플레인텍(Plain TeX)이라고 종종 부른다. 장기 프로젝트로 진행되고 있는 LaTeX3도 있지만 LaTeX2ε을 완전히 대체하기보다는 병행될 것으로 보인다. 일단 문법 자체가 거의 안드로메다급이라서.

TeX을 쓰는 사람들 가운데 대다수는 LaTeX을 쓰고 있다. 가끔 라텍보다 플레인텍이 더 쉽다고 말하는 사람들이 있는데 이런 사람하고는 상종도 하지 말자. 외계인일 가능성이 크다. 이후 ConTeXt와 같이 나름대로 LaTeX과는 다른 개념 또는 LaTeX보다 좀 더 진보된 기능을 제시하기 위한 TeX 기반 문서 마크업 언어들이 여럿 나왔지만 워낙에 사용자가 광범위하고 많은 패키지 및 스타일 파일이 나와 있는 데다가 TeX을 요구하는 거의 모든 학회들도 스타일 파일을 LaTeX으로 제공하고 있는지라 LaTeX의 아성을 깨고 있지는 못하다. 앞으로도 깨질 일은 없을 듯. 그러나 LaTeX3 팀이 만들고 있는 그 괴랄한 명령어 체제를 생각한다면 윈도우 비스타윈도우 8 꼴이 날 지도.

많은 이공계 학회, 특히 수학 관련 학회는 TeX, 그 가운데 대개 LaTeX으로 쓴 논문만 받는다. 특히 미국수학회(AMS)가 여러 가지 수학 관련 기호를 보강한 AMS-TeX은 수학계에서는 표준이나 마찬가지다. 최근에는 MS워드로 만든 것도 받긴 하지만 LaTeX을 더 선호하는 이공계 학회가 많은데, MS워드로 받다 보면 저자들마다 해 놓은 게 제각각이라서 하나의 저널에 맞추기도 힘들고, 특히 수식이 많이 섞여 있으면 정렬이나 번호 매기기, 색인을 비롯한 여러 가지 부분에서 애로사항이 꽃핀다. LaTeX은 규칙이 어느 정도 딱 정해져 있으므로 외계인급 천재가 클래스 파일만 하나 제대로 만들어 놓으면 손이 덜 간다. 여러 대학교들도 자기 학교의 논문 형식에 맞춘 LaTeX 클래스 또는 패키지를 제공하는 곳이 많다. 대학교수들 중에도 직접 LaTeX을 써서 교재나 저서를 써는 저자들이 꽤 있고, 해외에서도 이공계 교과서로 쓰이는 유명 출판사들의 책들 중에 LaTeX으로 편집된 것들이 적지 않다.

처음에는 마치 프로그래밍 하듯이 명령어를 열심히 입력해야 하는 LaTeX이 엄청나게 어렵고 성가신 것처럼 보이지만 익숙해지면 정말로 편리하다. 수식이나 도표, 정리, 공리를 비롯해서 논문에 들어가는 갖가지 요소들의 포맷을 자동으로 잡아주고 번호도 매겨주며 다른 곳에서 참조할 때에도 편리하다. 오히려 워드프로세서는 이런 부분이 엄청나게 귀찮거나 이상하게 되어 애를 먹는다. 더구나 넘버링을 자동으로 매기는 부분이 워드프로세서는 상당히 까다롭다 보니 그냥 수동으로 매기는 사람도 많은데, 중간에 내용이 추가 또는 삭제될 경우 번호가 줄줄이 당겨지거나 뒤로 밀리고 또한 다른 곳에서 수식이나 정리를 참조한 부분까지 싸그리 찾아서 고쳐야 하는데 LaTeX을 충실하게 사용하면 그냥 컴파일만 두 번 돌리면[2] 알아서 자동으로 딱딱 수정된다. 또한 찾아보기, 참고문헌 목록을 만드는 것도 LaTeX을 잘 활용하면 워드프로세서와는 비교할 수 없이 간단하고 정확한 결과를 얻는다.

아래아한글이나 MS워드의 기능이 강화되면서 수식 편집 기능도 발전해 왔기때문에 특히 수식에 강점이 있었던 TeX 또는 LaTeX의 강점도 조금은 퇴색되었다. 요즘은 웬만한 워드프로세서도 수식 편집 기능을 제공하고 있고, GUI 기반 인터페이스와 TeX에서 따온 명령 기반 인터페이스를 동시에 제공하고 있기도 하지만 처음에는 진입 장벽이 낮아서 편하다고 생각하다가도 본격적으로 수식을 많이 쓰는 문서를 작성할 때에는 상당한 불편함을 느끼게 된다. 그때문에 수학계에서는 여전히 논문을 작성할 때 TeX의 위력이 압도적이고, 앤드류 와일즈 교수가 쓴 페르마의 마지막 정리 증명 논문, 그레고리 페렐만이 쓴 푸엥카레 추측 증명 논문을 비롯해서 20세기 후반과 21세기 초에 걸쳐서 수학계를 뒤흔든 논문들은 100%라고 해도 좋을 만큼 LaTeX, 정확히는 AMS-LaTeX으로 작성되었다. 일단 미국수학회부터가 AMS-TeX이나 AMS-LaTeX이 아니면 안 받기 때문에... 미국만이 아니라 전 세계 수학회는 거의 그렇다. 우리나라의 대한수학회 역시도 논문 투고를 하려면 TeX이나 LaTeX을 쓰는 게 원칙이라고 규정에 명시하고 있다.

특징

구조적 문서

구조적인 글쓰기를 할 때에는 최강이다. LaTeX이 제공하는 명령어들이 구조적인 글쓰기를 유도하기 때문에, LaTeX을 애용하다 보면 자연스럽게 구조가 잘 짜여진 글을 쓰고 싶어진다. 그렇게 쓰고는 싶은데 능력이 안 되면 어쩔 수 없고. 보통 많이 쓰이는 워드프로세서전자조판프로그램을 WYSIWYG(What You See Is What You Get, 지금 보고 있는 것이 당신의 결과물이다)이라고 하는데, TeX, 특히 LaTeX이 등장하면서 WYSIWYM(What You See Is What You Mean, 지금 보고 있는 것이 당신이 뜻하는 것이다)이란 말이 나왔다. 좀 과장 붙여서 말하면 구조적이지 않은 문서를 만들기가 더 번거롭고 짜증난다. 우리가 스타일 파일 예쁘게 잘 만들어 놨으니까 쓸데 없는 짓 하지 말고 쓰라는 대로 써, 하는 게 LaTeX의 철학이라고 해도 과언은 아니다. 워드프로세서를 쓸 때에도 물론 넘버링 리스트나 블릿 리스트 기능 같은 것들이 있어서 잘 쓰면 구조적인 글쓰기를 할 수 있지만 이걸 잘 활용하는 사람들은 드물고 일일이 번호를 붙이고 글머리 기호를 붙이고 하면서 제멋대로 하는 사람들이 태반이다. 반면 LaTeX은 제공하는 기능을 사용하는 게 훨씬 편리하기 때문에 어차피 불편하기 때문에 그나마 이걸 쓰는 게 편리하다. 높은 확률로 사용하게 되며 그에 따라 일관성 있는 문서를 작성하게 된다. 그래서인지 수학이나 이공계와는 별 상관 없는 인문계 전공자들 중에서도 LaTeX을 활용하는 사람들을 가뭄에 콩나듯 볼 수 있다.

특히 이공계 계열 국제 학술 저널에서 논문을 LaTeX으로 제출하도록 요구하는 곳들이 많은데, 클래스 또는 패키지 파일을 배포하고 포맷에 맞춰서 논문을 작성하도록 한다. 이렇게 하면 논문을 모아서 편집하고 출판할 때 편집자의 수고가 많이 줄어든다. 일반 워드프로세서도 서식파일을 제공하는 방식으로 저자에게 일관성을 요구할 수 있지만 저자가 평소 하던 습관대로 하기 쉬워지고 서식파일도 딱히 거기에 제약을 걸기 어렵기 때문에 일관성 있는 결과물이 잘 안 나온다. LaTeX은 요구하는 포맷을 안 따라가는게 오히려 귀찮기 때문에 일관성 있는 결과물이 나올 가능성이 높아진다.

패키지

LaTeX을 강력하게 만들어 주는 기능이 바로 패키지다. 수천 수만 가지의 패키지로 온갖 확장기능을 쓸 수 있다. 기존 워드프로세서전자출판 프로그램으로는 초 고난이도의 작업이 필요한 것을 패키지로 허탈하게 간단하게 만들 수도 있다. MusicTeX으로는 품질이 뛰어난 악보를 조판할 수도 있고, TikZ로는 여러 가지 수학 그래프를 그릴 수 있다.[3] Beamer로는 프레젠테이션 슬라이드를 만들 수 있다.[4] 문제는 하도 패키지가 많다 보니 내가 원하는 기능을 제공하는 패키지가 무엇인지를 찾는 것도 일이라는 점이다. 똑같은 기능을 제공하는 패키지가 여러 가지인 경우도 있으므로 어떤 패키지를 쓰는 게 더 나을지도 따져봐야 한다. 열심히 검색해서 내가 필요한 패키지를 찾아야 한다.

사실 아주 기본적으로 텍스트만 죽 나열하거나, 문서 클래스가 지원하는 정도의 기능만을 딱 쓸 게 아니라면 결국 몇 가지 패키지를 불러다 쓸 수밖에 없다. 한글 사용자라면 kotex 패키지를 쓰거나 oblivoir 문서 클래스를 쓰지 않으면 아예 한글 출력아 안 되므로 이들 패키지 사용은 필수다. 각 패키지의 사용법과 제공하는 명령어들을 알고 싶다면 명령행 쉘에서 'texdoc 패키지 이름'을 입력하면 해당 패키지의 설명서를 띄워볼 수 있다.

자동화

LaTeX의 정말 좋은 기능 중에 하나가 귀찮고 까다로운 부분들을 자동화할 수 있다는 것이다. 워드프로세서나 다른 전자출판 프로그램도 이런 기능이 없는 건 아니지만 써보면 LaTeX이 훨씬 편리하다. 어디까지나 좀 쓸 줄 아는 사람들의 얘기로다. 여기에 속하는 게 목차 만들기, 찾아보기 만들기, 참고문헌 목록 만들기, 상호 참조와 같은 기능들이다. 워드프로세서는 복잡하게 메뉴를 왔다갔다 해야 하고 굉장히 귀찮지만 LaTeX은 그냥 명렁어만 하나 붙여주면 된다. 유연성 면에서도 LaTeX이 뛰어나다. 이것도 어디까지나 좀... 정도가 아니라 잘 쓸 줄 아는 사람들의 얘기로다. 또한 워드프로세서는 화면에 보이는 모양을 중시하다 보니 상호참조나 찾아보기 태그는 숨겨져 있는 게 보통이라 뭐가 어디 붙어 있는지 찾기가 참 어려운 반면, LaTeX은 이런 게 소스에 다 노출되어 있으니 편리한 점도 있다. TeXStudio 같은 전용 편집기를 쓰면 마치 인터넷 링크 클릭하듯이 상호참조 위치로 갈 수도 있어서 편리함이 쏠쏠하다.

또한 BibTeX을 사용하면 참고문헌을 편리하게 관리할 수 있으며 논문에서 인용이 필요할 때 정확한 참고문헌 인용 포맷에 따라서 출처 표기를 해주므로 대단히 편하다. 특히 국제 학술지 같은 경우에는 출처 표기 형식을 아주 엄격하게 요구하며 형식이 조금만 안 맞아도 게재를 거부당할 수 있어서 BibTeX이 아주 편리하다. 여기에다가 세계적으로 유명한 학술 도서관들은 보유하고 있는 책이나 논문의 서지정보를 BibTeX 형식으로도 제공하기 때문에 편의성이 한층 끝내준다. MS 워드를 비롯한 여러 워드프로세서에서도 BibTeX 파일정보를 읽어들일 수 있는 애드온이 있을 정도로 거의 서지정보의 표준에 가깝다.

단, 이런 자동화를 위해서는 보통 같은 파일을 두 번 이상 컴파일 해야 한다. 한 번 컴파일할 때 정보를 긁어서 별도의 파일에 저장하고, 그 다음에 컴파일할 때 그 파일로부터 정보를 읽어와서 결과물에 반영하기 때문이다. 한 번만 컴파일을 하면 참조 페이지가 틀리거나 상호 참조가 이상하게 나오는데, 한 번 더 컴파일하면 바로 잡힌다. 이런 정보들이 갱신될 때에도 두 번 컴파일 해야 한다. ConTeXt는 알아서 필요한 만큼 재컴파일을 자동으로 해 주므로 덜 번거롭지만 문제는 인기가 별로 없다는 것...

문서의 구조

LaTeX 문서는 최소한 다음과 같은 구조를 가지고 있어야 한다.

\documentclass{article} % 문서의 클래스를 설정하는 부분, article 말고도 report, book, memoir, beamer, 그밖에도 여러 클래스들이 있다.

% 여기에 각종 패키지와 옵션, 설정이 들어간다. 이곳을 서두(preamble)라고 한다.

\begin{document}

% 여기에 본문이 들어간다.

\end{document}

클래스

LaTeX은 문서 클래스를 결정하는 \documentclass[options]{class} 명령이 가장 앞에 나와야 한다. class 매개변수에 따라서 문서의 기본 모양이나 구조가 결정된다. 물론 나중에 명령어나 패키지로 바꿀 수는 있지만 일단 기본 골격을 잡고 시작하는 것이다. 기본으로 다음과 같은 네 가지 클래스가 제공된다.

  • article : 짧은 글이나 보고서를 쓸 때 적합한 클래스. 제목 아래에 바로 본문이 시작된다.
  • report : 좀 더 틀이 잡히고 길이가 긴 보고서에 적합한 클래스. 제목 다음에 페이지를 바꿔서 본문이 시작된다.
  • letter: 편지를 위한 클래스.
  • book : 책을 만들 때 쓰는 클래스. 기본 레아아웃이 양면 마주보기이고 머리글이나 바닥글을 비롯한 그밖의 레이아웃 요소도 여기에서 맞춰서 설정된다.

그밖에도 좀 더 편리한 기능을 제공하는 확장된 클래스도 있다.

  • memoir : 기본 클래스보다 훨씬 많은 조절 기능과 확장 기능을 제공하는 클래스. 어지간한 문서는 이 클래스 하나면 만능에 가깝다. 그러니 당연히 매뉴얼이 두꺼워질 수밖에.
  • oblivoir : memoir를 기반으로 좀 더 쓰기 쉽게 만들고, 한글에 관련된 편리한 기능들을 추가시킨 클래스.

options 매개변수는 말 그대로 여러 가지 옵션을 설정할 수 있는 곳이다. 종이 크기, 글자의 기본 크기, 양면/단면 레이아웃과 같은 여러 가지 기본 레이아웃을 조절할 수 있다. 여러 개의 옵션을 쓸 때에는 쉼표(,)로 구분한다.

서두

서두(preamble)는 문서 전역에 영향을 미치는 각종 설정을 한다. 패키지를 읽어들이고, 문서에 적용되는 자세한 레이아웃을 설정하고, 기본 글꼴을 바꾸기도 하고, 새로운 명령어 또는 환경을 만들거나 기존의 명령어/환경을 고칠 수도 있다. 이러한 명령 또는 설정 가운데에는 본문 안에서 해도 되는 것들이 많지만 본문에 섞기보다는 서두에 모아서 정리하는 것이 훨씬 관리하기 쉽다. 여기에 많이 오는 명령 몇 가지만 정리해 보자.

  • \usepackage[옵션]{패키지 이름} : 기능 확장에 필요한 패키지를 읽어들인다.
  • \newcommand[매개변수의 수]{명령의 정의} : 나만의 명령를 새롭게 정의할 수 있다. 잘 활용하면 되풀이되는 작업을 간단하게 명령 하나로 해결할 수 있다.
  • \renewcommand[매개변수의 수]{명령의 정의} : 이미 존재하는 명령을 다시 정의한다
  • \newenvironment[매개변수의 수]{환경의 정의} : 나만의 환경을 새롭게 정의할 수 있다. \renewenvironment 명령도 있다.
  • \title{제목}, \author{저자}, \date{날짜} : 문서의 제목, 저자, 날짜를 정의한다. 본문에서 \maketitle 명령을 쓰면 그 자리에 제목이 들어간다. 날짜를 정의하지 않으면 오늘 날짜가 자동으로 들어간다. 본문 안에서 정의해도 된다. \maketitle 전에만 나오면 된다.

그밖에 레이아웃을 정하기 위한 각종 명령이나 문서 전체에 걸쳐서 써먹을 스타일 정의, 이를테면 머리글, 바닥글 스타일 같은 것들도 여기서 정의한다.

본문

실제 내용이 들어가는 곳이다. \begin{document} ... \end{document} 사이에 있는 내용만 실제 출력 결과에 나타난다.

각주

  1. ε는 그리스 글자 '입실론'을 뜻하는데, 키보드로 치기 어려우므로 보통 e로 대신해서 많이 쓴다. 실제 로마 글자 e가 입실론에서 유래된 것이다.
  2. 처음 컴파일 하면 인덱스만 만들고 두 번째 컴파일 해야 참조 부분에 올바른 번호나 제목, 페이지가 삽입된다. ConTeXt는 알아서 여러 번 컴파일해 준다.
  3. 사실 TikZ가 제공하는 기능은 그 정도를 훨씬 뛰어넘는다. 심지어 클래스와 인터페이스를 동원한 객체지향 프로그래밍까지 가능하다. 버전 3.0.0을 기준으로 이 패키지의 매뉴얼이 무려 1,165 페이지다. 더 이상 설명이 필요한지?
  4. 출력 파일 형식은 파워포인트키노트가 아니라 PDF 파일로 나온다. 아크로뱃에서 슬라이드 쇼 기능을 제공하는데, 심지어는 파워포인트와 비슷한 전환 및 애니메이션 효과도 어느 정도 지원한다.