LuaTeX

내위키
Dennis (토론 | 기여)님의 2021년 5월 17일 (월) 23:15 판

제대로 쓰려면 [math]\displaystyle{ \mathrm{Lua}\TeX }[/math]이라고 써야 한다.

Lua 스크립트 언어를 집어넣을 수 있는 TeX 엔진. TeX이 프로그래밍 언어의 성격이 있지만 매크로 언어라는 한계가 있는데, LaTeX3는 이를 최대한 TeX스럽게 확장시키려고 한다면 LuaTeX은 아예 다른 프로그래밍 언어를 붙여서 확장시키는 방법을 택했다. 자바라든가 파이썬을 붙인 것도 있지만 큰 인기는 얻지 못하고 있는데, LuaTeX은 TeX Live의 기본 패키지로 포함되어 있을 정도로 가장 많이 쓰이고 있다. 특히 pdfTeX 개발팀이 LuaTeX을 pdfTeX의 후계로 공식 결정하면서 주목 받고 있다. pdfTeX 개발팀이 만들고 있으므로 출력 결과물은 물론 PDF가 기본이다.

Lua 스크립트 활용 방법은 간단하다. \directlua 명령으로 Lua 스크립트를 안에다 넣는다. 스크립트에서는 이런 저런 처리를 한 다음 출력하고 싶은 것을 tex.print() 명령으로 출력하면 된다. LuaTeX의 예제는 여기에서 살펴보자.

XeTeX처럼 시스템에 설치된 글꼴을 자유롭게 쓸 수 있다. 다만 XeTeX은 시스템의 글꼴 처리 엔진을 활용하는 반면, LuaTeX은 독자적인 엔진을 사용하기 때문에 처음 사용할 때, 또는 글꼴을 설치하거나 없앴을 때에는 글꼴 데이터베이스를 한번 업데이트해 줘야 하며[1], 오래 된 트루타입 글꼴와는 잘 안 맞는 문제도 있다. 똑같은 문서를 XeTeX과 LuaTeX으로 컴파일해 보면 조판 결과가 미세하게 차이가 나기도 하며 특히 알파벳 쪽은 더더욱 디테일에 차이가 난다.

뭐니뭐니 해도 Lua 스크립트의 기능을 모두 활용할 수 있다는 게 큰 강점이다. 인터넷에 접속해서 데이터를 받아 오거나, 데이터베이스와 연동하는 것과 같은 작업은 그냥 TeX으로 하기에는 불가능하거나 외부 프로그램의 도움을 받아야 하므로 엄청 까다롭지만 Lua는 훨씬 쉽다. 또한 프로그래밍에서 자주 사용하는 흐름 제어, 문자열 처리와 같은 기능들은 TeX으로 구현하는 것보다 Lua 스크립트로 처리하는 게 훨씬 빠르다. 즉, 컴파일 시간이 대축 단축된다는 이야기. TeX은 원래 그런 기능을 염두에 둔 건 아니라서 일단 1970년대에는 인터넷이 없었잖아. 구현하려면 엄청난 매크로 처리가 필요하기 때문이다. Lua 스크립트가 배우기 쉬운 언어이므로 장벽도 낮은 편이다.

하지만 TeX 안에 Lua 스크립트를 집어넣는 게 엄청 이질적으로 보이기 때문에 순수주의자들은 '나의 TeX은 그러지 않아!'을 외치기도 한다. Lua 스크립트 안에서는 백슬래시를 이스케이프 처리해야 하므로 TeX 명령어를 모조리 이중 백슬래시 처리해야 한다는 것도 헷갈릴 수 있다. (예를 들어 {tex.print('Hello World! \\bigskip\\bigskip') 그러나 프로그래밍 언어의 기법을 왕창 갖다 넣은 LaTeX3이 조금 억지스럽게 보일 수 있다는 면에서 본다면, 본래의 조판 매크로 기능은 TeX을 쓰고 프로그래밍이 필요한 부분은 Lua 스크립트를 쓰는 식으로 분담하는 게 더 우아할 수도 있다. 좀 더 깔끔하게 하려면 Lua 스크립트 부분은 별도 파일로 빼거나 패키지로 만들 수도 있다. LaTeX3도 l3lua 모듈을 통해 LuaTeX을 지원한다.

Lua 스크립트를 TeX 파일 안에 넣을 수도 있고, 스크립트는 다른 파일에 저장한 다음 TeX에서 불러다 쓸 수도 있다.

각주

  1. XeTeX도 새로운 글꼴이 들어갔거나 글꼴을 지웠다면 fc-cache로 한번 리프레시해 줘야 한다.