최근 바뀜
통계
임의의 문서로
도움말
문서
토론
원본 보기
역사 보기
로그인
LaTeX3 문서 원본 보기
내위키
←
LaTeX3
이동:
둘러보기
,
검색
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다:
사용자
.
문서의 원본을 보거나 복사할 수 있습니다.
전자 문서 조판 시스템인 [[LaTeX]]의 세 번째 버전. 1990년대부터 시작된 프로젝트라 착수한 지는 무척 오래 됐는데 2017년 상반기 기준으로 아직도 완전히 완성된 상태는 아니다. 하지만 실제 작업에 사용할 수 있을 만큼은 충분히 개발되어 있다. 현재까지 드러난 LaTeX3의 특징은, 여러 가지 [[매크로]]를 만들 때 좀 더 폭넓은 확장성을 지원하고 현대 프로그래밍의 기법을 어느 정도 활용할 수 있도록 지원하는 것이다. 매개변수를 유연하게 지원한다든가, 모듈 개념 지원, 몇 가지 자료형의 지원, 라이브러리 개념 지원과 같은 기능은 [[TeX]]이 가진 프로그래밍 언어의 성격을 강조한 것. <del>[[TeX]]으로 프로그래밍 하고 싶르면 그냥 [[LuaTeX]] 쓰면 되잖아.</del> [[TeX]] 또는 [[LaTeX]] 명령은 근본적으로는 [[매크로]]이며 [[함수]]와 [[변수]]의 구분이 뚜렷하지 않은데, LaTeX3은 적어도 개념으로라도 [[함수]]와 [[변수]]를 구분한다. 다만 [[LaTeX]] 기반으로 [[매크로]]라는 본질 자체가 변하지는 않는다. 지금까지의 [[LaTeX]] 문법에 익숙한 사람들에게는 뭔가 더 복잡해진 LaTeX3의 문법은 괴랄하고 헷갈리기 그지 없으나, [[LaTeX]] 경험이 별로 없는 사람들은 현대 프로그래밍 기법이나 관례가 녹아 있는 LaTeX3 쪽이 더 편할 수도 있다. 다만 LaTeX3은 일반 사용자보다는 패키지나 클례스를 만드는 사람들을 지향하는 성향이 강하다. 패키지나 클래스를 그냥 갖다 쓰는 사람들은 굳이 LaTeX3에 대해서 몰라도 된다. ==배경== LaTeX3를 보면 기존 [[LaTeX]] 사용자들에게는 엄청 괴랄한 모습으로 보여서 기존 [[LaTeX]]에 익숙한 사람들에게도 상당히 진입장벽이 높아 보인다. 대관절 왜 이렇게 낯선 규칙(혹은 관례)을 가지고 있는 것일까. 가장 큰 이유라면 [[LaTeX]]의 강점이라 할 수 있는 '패키지'의 문제다. '패키지'는 [[LaTeX]]의 능력을 어마어마하게 확장한 주요한 강점이고, 수천 가지의 패키지들이 나와 있다. 문제는 '너무 많다'는 것. 수십 년 동안 전 세계 수많은 개발자들이 오만 가지 패키지를 개발하고, 비슷한 기능을 제공하는 여러 가지 패키지들 사이에서 원하는 대로 선택할 수도 있는 것까지는 좋은데, 너무 많다 보니 명령어들이 겹치거나 충돌을 일으키는 일들이 점점 늘고 있다. 문서 컴파일 과정에서 자꾸 오류가 일어나는데 아무리 봐도 내가 잘못한 것은 없을 때가 있다, 며칠 동안 돌아버리다가 나중에 알고 보니 패키지 충돌이었다, 이런 사례들이 속출하는 것이다. 그렇기 때문에 LaTeX3에서는 다음과 같은 방향을 지향하고 있다. * 기존에는 패키지로 제공되던 기능 중에 많이 쓰이는 것은 내부로 수용하자. * 관례를 정해서 모듈 개념을 만들고 각 패키지가 모듈의 개념으로 매크로를 정하도록 해서 명령어가 겹치는 문제를 피하도록 하자. 하지만 여전히, [[TeX]]이나 [[LaTeX]] 자체는 본격적인 프로그래밍 언어로 쓰기에는 힘든 구석이 많고, LaTeX3 역시 핸디캡을 안고 있다. 제대로 프로그래밍을 통한 자동화가 필요하다면 [[LuaTeX]]을 쓰거나 [[파이썬]]을 비롯한 다른 프로그래밍 언어에 붙여 쓰는 게 더 나을 수도 있다. ==특징== LaTeX2ε까지는 @ 문자를 특수한 의미를 가진 기호로 사용했다. 일반 사용자들이 접근할 수 없는 (굳이 접근하자면 {{LaTeX|\makeatletter}} 명령으로 접근은 할 수 있는데 접근하지 쉽지 않게 해 놓은) [[매크로]]의 이름을 정의할 때 @ 기호를 썼다. LaTeX3에서는 더 이상 @ 기호를 활용하지 않는다. 대신 밑줄(_)과 쌍점(:)을 쓴다. 함수는 다음과 같은 형식으로 이름이 정의된다. <source lang="tex"> \[모듈]_[이름]:[매개변수 리스트] </source> LaTeX3의 함수는 예를 들어 이런 모습이 된다. <source lang="tex"> \seq_map_inline:Nn #1 #2 { ... } </source> seq는 모듈, map_inline은 함수 이름, Nn은 매개변수 리스트가 된다. 그 뒤로는 매개변수가 몇 개 필요한지가 표시되는데, {{LaTeX|\command[2]}}와 같은 방식으로 매개변수의 수를 지정하는 기존 [[LaTeX]]과는 달리 LaTeX3은 #1 #2와 같은 식으로 써 줘야 한다. 조금 번거롭긴 하지만 함수 이름 뒤에 붙는 매개변수 리스트와 대조해서 어떤 매개변수가 어떤 유형인지 파악하기 쉽다는 장점은 있다. 한편 변수는 다음과 같이 정의한다. <source lang="tex"> \[범위]_[이름]_[데이터 유형] </source> 여기서 범위는 다음과 같다. # l : 지역 변수(local). # g : 전역 변수(global). # c : 상수 (const). LaTeX3의 변수는 예를 들어 이런 모습이 된다. <source lang="tex"> \l_message_tl </source> 하지만 위와 같은 이름 규칙을 따르지 않으면 오류가 난다든가 하는 것은 아니다. 또한 이름에 데이터 유형이나 범위를 정의해 놓고 다르게 쓸 수도 있다. 예를 들어, 변수를 {{LaTeX|\c_index_int}}(정수형 상수)와 같이 해 놓고서 여기에 문자열을 대입하거나 값을 바꿔도 오류가 일어나지 않는다. LaTeX3에서 제공하는 함수와 변수들이 저 규칙을 따르고 있으며, LaTeX3를 쓰는 사람들에게도 저 규칙을 따를 것을 권고하고 있는 것이다. LaTeX2ε에서 @ 기호는{{LaTeX|\makeatletter}}와 {{LaTeX|\makeatother}} 사이에서만 써야 하는 것처럼, LaTeX에서 밑줄과 쌍점을 쓰려면 {{LaTeX|\ExplSyntaxOn}}과 {{LaTeX|\ExplSyntaxOff}} 사이에서 써야 한다. 따라서 위와 같은 형식으로 정의되는 명령어는 문서의 본문에서 쓸 수 없다. 본문에서 쓸 명령어는 기존 [[LaTeX]]과 LaTeX3의 징검다리 구실을 하는 xparse 패키지를 이용해서 {{LaTeX|\NewDoucmentCommand}}나 {{LaTeX|\NewDocumentEnvironment}} 같은 명령으로 정의해야 한다. LaTeX3으로 패키지, 즉 .sty 파일을 만들 때에는 다음과 같은 명령어를 넣는다. <source lang="tex"> \ProvidesExplPackage {example} % 패키지의 이름 {2015/11/07} % 패키지 공개 날짜 {0.1} % 패키지 버전 {Some things I wrote} % 패키지 설명 </source> 이게 나오면 이 패키지 파일 안에서는 {{LaTeX|\ExplSyntaxOn}} 및 {{LaTeX|\ExplSyntaxOff}} 명령이 없어도 전역으로 LaTeX3 매크로를 인식한다. ==어떻게 쓸 수 있지?== 아직까지 LaTeX3는 LaTeX2e 기반 위에서 돌아간다. 굳이 호환성을 버릴 생각도 안 하고 있다. LaTeX3를 쓰고 싶다면 다음의 두 가지 패키지를 사용한다. * expl3.sty : 완전한 LaTeX3 스타일로 매크로를 만들 수 있다. 단, LaTeX3 스타일로 만든 매크로는 {{LaTeX|\ExplSyntaxOn}}와 {{LaTeX|\ExplSyntaxOff}} 사이에서만 쓸 수 있으므로 사용자가 문서에서 직접 쓰려면 이 두 명령어 사이에만 써야 한다. * xparse.sty : LaTeX3 스타일 매크로와 [[LaTeX]] 문서 사이의 가교 구실을 한다. LaTeX3 매크로를 이 패키지에서 제공하는 명령들로 덮어씌워서 문서에서 사용할 수 있는 명령으로 만든다. LaTeX3 매크로를 안 쓰고 기존 [[LaTeX]] 스타일 매크로를 만들 때에도 여러가지 편리하고 유연한 기능이 많이 제공되므로 이 패키지만 쓰는 사람들도 많다. 예를 들어, 기존 LaTeX 방식으로 매크로를 만들 때에는 매개변수의 수가 고정되지만 (안 되는 건 아닌데 엄청 어렵다) xparse 방식으로 만들면 옵션 매개변수를 만들기가 훨씬 쉽다. 별표(*)를 붙이거나 안 붙이는 부울 옵션을 붙이는 것도 아주 쉽다. LaTeX3을 사용한 아주 간단한 예는 다음과 같다. <source lang="latex"> \documentclass{article} \usepackage{expl3} \usepackage{xparse} \ExplSyntaxOn %여기서부터는 LaTeX3 모드다. % LaTeX3 스타일 매크로 \cs_new:Npn \hello_world:n #1 { Hello~world,~I~am~#1! } % 문서 안에서 쓰기 위한 매크로 \NewDocumentCommand \HelloWorld { m } { \hello_world:n{#1} } \ExplSyntaxOff % LaTeX3 모드 끝. \begin{document} \HelloWorld{Newiki} \end{document} </source> 참고로, LaTeX3 모드 안에서는 빈칸은 모조리 무시된다. 빈칸을 넣고 싶으면 ~(틸데) 기호를 써야 한다. 기존 LaTeX이라면 틸데는 줄바꿈을 하지 않는 빈칸으로 해석되는데 LaTeX3 모드에서는 그냥 빈칸이다. LaTeX3 모드에서 줄바꿈 안 하는 빈칸을 넣고 싶으면 {{LaTeX|\nobreakspace}} 같은 명령을 써야 한다. ==논란== 과연 LaTeX3이 지향하는 방향이 옳은가 하는 문제는 [[TeX]] 사용자들 사이에서도 말이 많다. 기존 [[LaTeX]]이 가지고 있던 한계를 상당 부분 극복하고, 매크로라는 한계 안에서 현대 프로그래밍 언어의 개념을 받아들여서 더욱 다양한 자동화 및 구조화된 처리가 가능해졌다는 점에서 좋게 보는 사람들도 있는 반면, 너무 과욕을 부리고 있다는 비판도 만만치 않다. [[TeX]]이나 [[LaTeX]]이나 본격 프로그래밍 언어라기보다는 매크로 조판 언어인데, 지나치게 프로그래밍 언어의 흉내를 내려다 보니까 프로그래밍 언어의 기능을 하기에는 모자라는 점이 많고, 쓸데없이 무겁고 쓰기만 어려워졌다는 것이 비판의 주된 근거다. <del>요약하자면 '그냥 [[LuaTeX]] 써.'</del> LaTeX3 프로젝트가 시작한 지가 20년이 넘었는데 아직도 정식판을 출시하지 못하는 것도, 결국은 LaTeX3가 구현하려 했던 핵심 사항들을 해결하지 못했기 때문이며 앞으로도 해결하기 어려울 것이라는 비관론자들도 많다. <del>포에버 다음달 텍.</del> 현재 분위기로 보면 이미 충분히 안정화된 LaTeX2e는 그것대로, LaTeX3은 그것대로 갈 공산이 크다. [[Category:TeX]]
이 문서에서 사용한 틀:
틀:LaTeX
(
원본 보기
)
LaTeX3
문서로 돌아갑니다.
도구
여기를 가리키는 문서
가리키는 글의 최근 바뀜
특수 문서 목록
문서 정보