모두를위한 L A TEX 부제 : 근본없는매뉴얼 dokenzy@gmail.com 0.6 판 2014 년 3 월 27 일 요약 이문서의목적은대략적인 L A TEX 문서작성방법을소개하고, 좋은 L A TEX 설명서를소개하는것이다. 이문서를읽고 L A TEX 을제대로배우고싶은 분들은이문서마지막에있는 8 장추천문서를읽기를바란다. cbna 이저작물은크리에이티브커먼즈저작자표시 4.0 국제라이선스 1 에따라이용할수있습니다. 1 http://creativecommons.org/licenses/by/4.0/ 1
바뀐점 0.6 2014년 3월 25일. 특수문자설명추가, 참고문헌추가, 자잘한부분수정 0.5 2014년 2월 18일. TeX Live 업데이트내용추가, 자잘한부분수정 0.4 2014년 2월 4일. 찾아보기추가, defaultfontfeatures 내용추가, 카운터이름변경, 추천문서추가, 자잘한것몇개수정 0.3 2013년 12월 20일. 맞춤법수정, MWE 내용추가, 자잘한것몇개수정. 조언해주신이주호님께감사드립니다. 0.2 2013년 12월 20일. 워드프로세서, 멍청하고비효율적인도구 한글판링크추가, 자잘한것몇개수정 0.1 2013년 12월 13일. 최초공개 2
차례 차례 3 들어가며 i 왜 LATEX 인가?................................ i 한국텍학회와한글텍사용자그룹....................... iii XƎLATEX 은무엇인가?............................ iii 제 1 장 첫걸음 1 1.1 운영체제별설치............................. 1 1.2 Mac OS X에서폰트경로설정하기................... 2 1.3 테스트.................................. 4 1.4 알고보면사연이많은예제코드..................... 6 1.4.1 클래스 (documentclass)...................... 6 1.4.2 명령 (command).......................... 8 1.4.3 환경 (environment)........................ 8 1.4.4 프리앰블 (Preamble)........................ 8 1.4.5 패키지 (package).......................... 9 1.4.6 공백문자와문단.......................... 9 1.4.7 특수문자.............................. 10 1.4.8 따옴표............................... 12 1.5 texdoc.................................. 12 3
제 2 장 기본명령과환경 14 2.1 문서제목, 저자, 날짜........................... 14 2.2 짜임새있는문서만들기......................... 15 2.3 목록.................................... 15 2.4 차례.................................... 17 2.5 찾아보기 ( 색인 ).............................. 18 2.6 상호참조와자동조사........................... 19 2.7 글꼴변경하기.............................. 21 2.7.1 글꼴................................ 21 2.7.2 글자크기.............................. 22 2.8 각주 (footnote).............................. 23 제 3 장 필수패키지 24 3.1 graphicx................................. 24 3.2 xcolor................................... 26 3.3 mdframed................................. 28 3.4 hyperref.................................. 30 3.5 tabu.................................... 32 제 4 장 폰트 34 제 5 장 Minimal Working Example 37 5.1 왜 MWE를만들어야하는가?...................... 38 5.2 경고 (WARNING) 다루기........................ 41 제 6 장 한국어문서조판하기 43 6.1 ko.tex................................... 43 6.2 oblivoir 클래스.............................. 45 제 7 장 좀더 LATEX 스럽게 47 7.1 사용자정의명령............................. 47 7.1.1 가장간단한명령......................... 47 4
7.1.2 옵션이있는명령......................... 48 7.1.3 옵션에기본값을주는명령.................... 49 7.1.4 renewcommand.......................... 49 7.2 사용자정의환경............................. 50 7.3 파일나누기................................ 50 제 8 장 추천문서 52 8.1 LATEX 초보자를위한필수매뉴얼.................... 52 8.2 LATEX 을더알고싶은사람을위한글.................. 53 8.3 그외참고할만한글........................... 53 찾아보기 55 5
들어가며 왜 L A TEX 인가? 이문서는나자신이 LATEX 2 을하며느꼈던점들을바탕으로만든 LATEX 초보용문서이다. 나는 LATEX 뿐만아니라조판및인쇄전반에대한실무경험이전혀없을뿐더러, 이론적지식도영화 그라비티 에나오는사람수만큼밖에안된다. 맞춤법도그다지자신없다. 다만, 마크업과일반텍스트 (plain text) 를동경하는사람으로서최소한의노력으로최대한멋진문서를만들고싶은욕심이있다. 나처럼마크업과일반텍스트를이용해서문서를만드는사람이많을것이다. Markdown이나 restructuredtext 같은것들이개발자들에게많이쓰이는이유이기도하다. Markdown이나 rest가생산적으로문서를만들어주긴하지만멋진문서를만들어주지는않는다. 이를충족시킬수있는도구가 LATEX 이다. 매크로언어인 LATEX 과조판프로그램인 TEX 을이용하면생산적이면서도품위있는문서를만들수있다. 워드프로세서와무엇이어떻게다른지궁금한사람들을위해 The Beauty of LATEX 이라는글을소개한다. 해석하지않아도된다. 단지눈으로비교해보는것만으로도충분하다. 게다가워드프로세서는물론, 인디자인같은전문조판프로그램조차상상도할수없는일을할수있다. 2011년한국텍학회학술대회에서조진환교수님께서발표하신함초롬 - 글꼴을이용한자소분리를보라 2 레이텍또는라텍이라읽는다. i
( 그림 1). 이발표는 2013년 10월에열린 TUG 2013에서도발표되어큰관심을받았다. CSS 없이 HTML 코드에스타일을구겨넣었던 1990년대를기억하는가? 그런데워드프로세서는왜아직도그꼴을벗어나지못하는것인가? 워드프로세서는할수없다. 앞으로도그렇다. 김강수님이번역하신워드프로세서, 멍청하고비효율적인도구라는글을읽어보자. 나또한완전히동의한다. 이제워드프로세서의늪에서벗어나보자. 그림 1 함초롬을이용한자소분리 ( 조진환 ) ii
한국텍학회와한글텍사용자그룹 내가이문서를만들수있게된것은한국텍학회 (KTS) 3 와한글TEX 사용자그룹 (KTUG) 4 에서활동하시는몇몇분들의헌신적인노력덕분이다. 이분들은 ko.tex 5 을개발하셨을뿐만아니라관련문서들을직접쓰거나번역하시고정기적인워크숍등을통해무료로교육까지하신다. 그뿐만아니라 TnX텍같은유용한유틸리티프로그램도개발하셨다. 내가 LATEX 을배울수있었던것은모두이분들의공헌덕분이다. 이분들은 TEX 뿐만아니라타이포그래피, 레이아웃, 배치 (batch) 처리, 폰트등조판과인쇄분야전반에해박한지식과풍부한경험이있다. 위에서보인 함초롬을이용한자소분리 ( 조진환 ) ( 그림 1) 에쓰인폰트는 한글과컴퓨터 사에서개발한함초롬폰트에한국텍학회가 GSUB/GPOS 정보를추가하여재배포하는폰트다. 6 2013년 11월 9일, 한국어조판을위한 ko.tex 이 TeXLive 2013에드디어정식으로포함되었다. 이것은당신이만든 Python 라이브러리가 Python 표준라이브러리에등록된것과비슷하다. 물론 TeXLive에포함되기전에도 ko.tex 으로한국어문서를조판할수있었지만, 이젠 TeXLive에포함됨으로써별도의설치과정을거치지않아도된다. XƎL A TEX 은무엇인가? 이절에서언급하는단어들을처음접하는사람들은혼란스러울수있다. 아니면이미등장한 LATEX, ko.tex, TEX 이란용어때문에아까부터혼란스러운사람이있을수도있다. 조금이라도혼란스럽다면과감히이절을넘어가자. 시작하기도전에용어때문에스트레스받지말자. 자동차운전을처음배우는사람이자동차엔진부터배울필요는없다. 이문서는운전을시연하는수준일뿐이다. LATEX 이라는차를어떻게운전하는지지켜본다는마음으로가볍게읽자. 3 The Korean TeX Society 4 http://ktug.org 5 케이오텍 또는 코리언텍 이라고읽는다. 6 이폰트에대한자세한정보는함초롬체 LVT 를참고하라. iii
LATEX 은매크로언어이다. LATEX 을한다는말은이매크로언어로만든텍파일 (*.tex) 을처리해서최종적으로원하는문서 ( 예를들면, PDF파일 ) 를만든다는것이다. 이텍파일을처리하기위해서는텍엔진이라는프로그램이필요하다. 현재 TeXLive에는 5개의텍엔진이있는데이문서에서는 XƎTEX 이라는엔진을이용한방법만다룬다. XƎTEX 은시스템에설치된대부분의 truetype이나 opentype 폰트등을직접사용할수있기때문이다. 7 ko.tex 은 TEX 으로한글을조판하기위한시스템이다. XƎTEX-ko는 XƎTEX 엔진을위한 ko.tex 패키지이다. ko.tex2.0 설명서에따르면현재한글문헌을가장안정적으로조판할수있는것은 XƎTEX-ko라고한다. 그래서이문서에서는 XƎLATEX 만을다룬다. 8 XƎLATEX 이란 XƎTEX 이라는텍엔진 으로 LATEX 매크로언어로작성한텍파일 을처리하는프로그램이라고할수있겠다. 7 XƎTEX 에서사용하지못하는트루타입이나오픈타입폰트는대부분폰트자체에문제가 있다. 8 내가그나마조금할줄아는것도이것뿐이다. iv
제 1 장 첫걸음 1.1 운영체제별설치 LATEX 을사용하기위해서는 TeXLive 2013을설치해야한다. 1 TeXLive는사실상의표준텍시스템으로서 Mac OS X, 윈도우즈, 리눅스운영체제에서사용할수있다. 텍시스템은많은유틸리티와방대한라이브러리, 스타일, 폰트등으로구성된큰시스템이다. MacTeX의경우설치파일만 2.3GB에달한다. 전문가는원하는부분만설치해서사용하는것도가능하지만, 이문서에서는텍시스템전체를설치하는것만다룬다. Mac MacTeX 2013 2 을설치한다. 이배포판은 Mac 10.5(Leopard) 이상에서사용할수있다. 인스톨러의안내대로설치하면끝난다. Windows 윈도우즈사용자는 KTS와 KTUG에서제작한 ko.texlive 2013 3 을이용하면쉽게설치할수있다. 인스톨러의안내대로설치하면끝난다. 1 http://www.tug.org/texlive/ 2 http://tug.org/mactex/ 3 ko.tex Live 2013 1
설치중일부파일에대해백신프로그램이바이러스로오진하여설치가중단될수있다. 이럴때는잠시백신을중지하고설치하자. Linux 리눅스에서는인터넷을통해설치하는방법을추천한다. 설치페이지에서 install-tl-unx.tar.gz파일을다운로드한후 install-tl 설치스크립트를이용해서설치한다. perl-tk가설치되어있다면설치스크립트를실행할때 --gui 옵션을추가하여 GUI로설치를진행할수있다. 일부배포판의경우개인사용자들이패키징을해놓은것들이있다. 이런패키지를이용하는방법도있다. TeXLive 업데이트 MacTeX이나 ko.texlive 2013으로설치한후에는업데이트를해주어야한다. 또한 TeXLive를사용하다가도한달에한번정도는업데이트를해주는것이좋다. TeX Live를최신버전으로업데이트하기위해서는명령행에서다음명령을실행한다. Code 1 $ tlmgr update --self --all 위명령을실행했는데퍼미션오류가발생한다면 root권한으로위명령을실행해야한다. Mac OS X나데비안계열의경우 sudo와함께사용하면된다. 다른리눅스에서도 root권한으로실행하면된다. 업데이트를오랫동안안하면그림 1.1처럼수백개를한번에업데이트하게되는수가있다. 1.2 Mac OS X 에서폰트경로설정하기 Mac OS 에서는 XƎTEX 을위한설정을한번해주어야한다. 4 4 윈도우즈는 fc-cache 명령을실행해야한다. ko.tex Live 2013 는설치과정마지막에자동으로해준다. 하지만설치후에추가된폰트를사용하기위해서는이명령을직접실행해주어야한다. 2
그림 1.1 tlmgr update /usr/local/texlive/2013/texmf.cnf 파일을텍스트에디터로열어서다음내용을추가하자. Code 2 OSFONTDIR = {~/Library/Fonts;/Library/Fonts;/System/Library/Fonts} 이설정을하면시스템라이브러리나사용자라이브러리폴더에있는폰트들을 XƎTEX 이사용할수있다. 자세한내용은 KTUG wiki를참고하자. 그리고블로그 도은이네집 에서소개한맥오에스폰트라이브러리등록글에소개된내용도적용하자. TeXLive를설치하면많은폰트들이함께설치되는데, 이경로는위에서설정한경로와다르다. XƎTEX 이이폰트들을사용하기위한방법이다. 1. 서체관리자 (Font Book) 을실행한다. 3
2. 파일 - 새로운보관함 (New Library) 메뉴를선택하고 TL OpenTypes 라고 이름을지어주자. 3. 방금만든 TL OpenTypes 를오른쪽클릭하여 서체추가... 를선택하자. 4. 파일선택창이열리면 G 키를눌러경로창을띄운후다음주소를 입력하자. Code 3 /usr/local/texlive/2013/texmf-dist/fonts/opentype/public 굉장히많은폰트들이각폴더에들어있다. 전부다해도되고원하는폰트 ( 폴더 ) 만선택해도된다. 같은방식으로 truetype 폰트들도추가할수있다. 5 사용하기위한설정을모두마쳤다 6. 이제 Mac 에서 XƎTEX 을 1.3 테스트 이제 LATEX 을사용하기위한준비를모두마쳤다. 아무텍스트편집기라도 사용할수있지만여기서는 TeXLive 를설치할때함께설치되는 TeXworks 를 사용하기로한다. TeXworks 를실행하고아래코드를입력하자. 5 /usr/local/texlive/2013/texmf-dist/fonts/truetype/public 6 윈도우즈에서는폰트를시스템에설치할때마다 fc-cache 명령을실행하면된다. 4
Code 4 \documentclass[oneside, a4paper]{article} \usepackage{kotex} \setmainhangulfont{hcr Batang LVT} % 함초롬바탕 LVT를다운로드 & 설치하자 % 다운로드주소 : http://bit.ly/1hnxefl \begin{document} \section[ 시작 ]{\LaTeX 시작하기 } \begin{center} 안녕, \LaTeX! \end{center} 한번배워서오래써먹자. \end{document} 입력을마치면 foo.tex이라는이름으로저장하자. 이제텍엔진을그림 1.2와같이선택하고컴파일버튼을누르거나 [ 조판 ] 메뉴에서 조판 을누르자. 또는단축키를이용할수도있다. 그림 1.2 TeXworks의컴파일버튼과텍엔진 1) TeXLive 2013 이제대로설치되고, 2) 소스코드에오류가없고, 3) 텍엔진을 올바르게선택했다면컴파일이끝난후, 화면오른쪽에그림 1.3 처럼 foo.pdf 파일이보일것이다. 5
그림 1.3 foo.pdf 나는 Skim 7 이라는 PDF리더를주로사용하지만, PDF파일의정보를볼때는 Adobe 사의 Acrobat Reader 를사용하기도한다. Acrobat Reader 로 foo.pdf 파일의속성을보면그림 1.4처럼나온다. XƎTEX 으로만들었다는것을알수있다. 1.4 알고보면사연이많은예제코드 TEX 은강력한조판시스템이다. 강력한만큼배울게많다. 앞의예제코드는매우간단한코드이지만그속에는많은사연이들어있다. 본격적으로시작하기전에예제코드를꼼꼼히살펴보겠다. 1.4.1 클래스 (documentclass) 예제코드의 \documentclass[oneside]{article} 부분이다. 클래스는문서의성격을결정하는가장중요한부분으로 tex문서를작성할때반드시가장먼저한번만쓰인다. 템플릿처럼문서전체의모양을결정할뿐만아니라, 많은기능과옵션을제공한다. 예컨대예제코드의 \section{ 시작하기 } 명령은 article 7 http://skim-app.sourceforge.net/ 6
그림 1.4 Adobe Reader 로본문서속성 클래스가제공하기때문에사용할수있다. 하지만 \chapter{ 시작하기 } 명령을사용하면오류가발생한다. article 클래스에는없는명령이기때문이다. 또다른표준클래스인 report 클래스는 \chapter{} 명령을제공하기때문에사용할수있다. oneside 옵션은 article 클래스가제공하는옵션이다. 이외에 a4paper, 11pt, landscape 등의옵션들이있다. 어떤옵션을쓸수있는지는전적으로클래스에달려있다. 만약클래스에서제공하지않는기능들을사용하고싶다면, 관련패키지를사용하거나직접정의 (7.1장사용자정의명령 ) 해야한다. 7
1.4.2 명령 (command) 명령은대체로다음과같은형식을갖는다. Code 5 \section[ 시작 ]{\LaTeX 시작하기 } 대괄호 ([]) 는옵션이고, 중괄호 ({}) 는명령의이름이다. 명령에따라옵션이있을수도있고없을수도있다. 또옵션이나인자가 2개이상인명령도있다. 만약텍문서를컴파일하는중에! Undefined control sequence. 오류가발생한다면, 명령에오타가있거나정의되지않은명령 ( 클래스나사용하는패키지에없는명령 ) 을쓴것이다. 이럴때는해당명령을제공하는클래스나패키지매뉴얼을읽어봐야한다. 매뉴얼에대한설명은 1.5절 texdoc을참조하기바란다. 1.4.3 환경 (environment) 환경은 \begin{center} \end{center} 와같은형식을갖는다. 옵션의위치는환경에따라조금씩다를수있다. \begin{document} \end{document} 도환경이다. document 환경은 LATEX 문서라면반드시하나만존재해야하는중요한환경이다. 마치 HTML의 <body> 태그와같다. 환경역시정확한사용방법은매뉴얼을보는것이다. 1.4.4 프리앰블 (Preamble) 프리앰블 8 은 \documentclass{} 와 \begin{document} 사이에있는부분을말 한다. 예제코드에서 8 전처리부라고부를수도있지만, 나는프리앰블이익숙하다. 8
Code 6 \usepackage{kotex} \setmainhangulfont{hcr Batang LVT} 가위치한곳이바로프리앰블이다. HTML 의 <head> 태그와비슷한기능을 하지만프리앰블이라고명시하는명령은따로없다. 패키지를불러오거나 (\usepackage{}), 명령이나환경을정의할때에는프리앰블에해야한다. 1.4.5 패키지 (package) 패키지를사용하면클래스가제공하지않는많은기능들을이용할수있다. 대표적으로한국어를조판하기위해서는 ko.tex 패키지를사용해야한다. 패키지를사용하는방법은프리앰블에서 \usepackage[ 옵션 ]{ 패키지이름 } 과같은방식으로사용한다. 간혹패키지끼리충돌을일으키거나읽어들이는순서 (\usepackage{} 명령을선언한순서 ) 에따라문제가생길수있다. 이런경우에는알아서잘 (5장 Minimal Working Example) 해결하라. 1.4.6 공백문자와문단공백문자란스페이스, 탭등을가리킨다. TEX 은이런공백문자들을연속으로입력해도하나의스페이스로처리한다. HTML과같다. 한번의줄바꿈 (linebreak) 역시하나의스페이스로처리한다. LATEX 으로문서를작성할때주의해야할점은문장과문단을엄격히구분한다는것이다. 워드프로세서에서는문장, 줄바꿈, 문단등이아무개념없이사용되어도문제를느끼지못하지만 LATEX 에서는다르다. 문단을나누기위해서는문장끝에빈줄을삽입하면된다. 또는 \par라는명령을사용해도된다. 9
Code 7 이것은첫번째문단의첫번째문장입니다. 두번째문장입니다. 두 번째문단의첫번째문장입니다. 공백을많이쓴다고 공백이그만큼생기지않습니다. 나쁜습관입니다. 결과이것은첫번째문단의첫번째문장입니다. 두번째문장입니다. 두번째문단의첫번째문장입니다. 공백을많이쓴다고공백이그만큼생기지않습니다. 나쁜습관입니다. 1.4.7 특수문자 LATEX 에서는몇가지문자들을특별한용도로사용한다. 따라서문서내에 그냥입력하게되면오류가발생하거나의도하지않은결과가나올것이다. Code 8 # $ % ^ _ & \ ~ { } 위특수문자들을입력하기위해서는사용하고싶은특수문자앞에백슬래시 (\) 를더해주면된다. 다만 \ 의경우 \\ 는줄바꿈명령이므로, \textbackslash 명령을사용한다. % 는주석 (comment) 을나타내는특수문자이다. 따라서 LATEX 이컴파일할때무시해버린다. HTML의 <!-- -->, Python의 # 와같다. 10
# 은사용자정의명령이나환경을정의할때사용되는기호이다. 7.1.2절옵션이있는명령을참고한다. $ 은수식을조판할때쓰인다. $ 와 $ 사이에수식을넣으면 LATEX 이수식을예쁘게조판해준다. Code 9 $x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}$ 결과 x = b± b 2 4ac 2a 하지만수식을입력할때는 $ 기호대신 \[, \] 를사용하는것을권한다. Code 10 \[x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}\] ^, _ 은각각수식에서윗첨자, 아래첨자를뜻한다. 이외수식과관련한내용은 lshort-kr문서의 제 3장. 수식조판하기 를참조하기바란다. & 는표 (Table) 에서다음열로넘어갈때쓰인다. \\ 는문단을나눌때도쓰이지만, 표에서는새로운행을추가할때도쓰인다. ~( 틸데 ) 는줄바꿈이안되는, 폭이고정된공백을만들어준다. 만약 을표시하고싶은거라면 $sim$ 를입력한다. { 와 } 는굳이설명하지않겠다. \begin{document} 만봐도어디에쓰이는지알수있을것이다. 11
1.4.8 따옴표작은따옴표나큰따옴표를입력해야하는경우가많다. 이때여는따옴표와닫는따옴표의모양이조금다르다. LATEX 에서는다음과같이입력하면이들따옴표를이쁜따옴표 9 로만들어준다. Code 11 `작은따옴표 ', ``큰따옴표 '' 결과 작은따옴표, 큰따옴표 이것이가능하려면 fontspec이제공하는다음명령을프리앰블에선언해야한다. 10 Code 12 \defaultfontfeatures{ligatures=tex} 여는따옴표 (grave accent, `) 는키보드에서숫자 1 왼쪽에있는키 ( 틸데 (~) 와 같은자리 ) 이고, 닫는따옴표 (vertical quote, ') 는키보드에서엔터키왼쪽에 있는키 (" 와같은자리 ) 이다. 11 1.5 texdoc texdoc 명령을이용하면설명서를쉽게열수있다. 대부분의클래스나패키지 의설명서는 <texdoc 패키지이름 > 과같은방식으로읽을수있다. 예를들어 ko.tex 에대한설명서를읽기위해서는터미널또는명령프롬프트에서 texdoc 9 curly quotation mark 10 자세한내용은 KTUG QnA 게시판에두텁님이쓰신답글을읽어보자. 11 이배열은 QWERTY 자판을기준으로한설명이다. 12
kotex 명령을실행하면된다. 그러면시스템의기본 PDF 뷰어가실행되면서 kotexdoc.pdf 파일이열린다. 13
제 2 장 기본명령과환경 2.1 문서제목, 저자, 날짜 문서를시작할때문서의제목과저자이름을밝히는것은기본이다. 날짜도입력하면좋겠다. 프리앰블에다음을입력한다. Code 13 \title{ 근본없는 \LaTeX 설명서 } \author{dokenzy} \date{ 단기 4346년 } 만약날짜부분을 \date{\today} 와같이입력하면자동으로오늘날짜를입력해준다. 그리고나서 Code 14 \begin{document} \maketitle 14
와같이 \begin{document} 다음에 \maketitle 명령을사용하면된다. 2.2 짜임새있는문서만들기 LATEX 은몇가지장절명령을제공함으로써논리적인문서를만드는것을도와준다. \chapter{} 는장 ( 章 ), \section{} 은절 ( 節 ), \subsection{} 은소절 ( 小節 ) 을의미한다. 이명령들은문서를논리적으로구분해줄뿐만아니라, \tableofcontents 명령 (2.4절차례 ) 이차례를만들때단락제목, 장절번호, 페이지번호등을자동으로넣어준다. 만약장절명령을쓰고싶되, 차례에는나타내고싶지않다면 \chapter*{} 와같이 * 를붙여주면된다. 단락제목이너무길면차례에서볼때불편할수있다. 이때는 \chapter[short title]{very long chapte 과같이옵션을주면, 차례에는 short title 이, 본문에는 very long chapter title 이들어간다. 2.3 목록 문서를작성하다보면목록을만들필요가있다. 이런경우들이다. Code 15 \begin{itemize} \item 좋아하는연예인 \item 좋아하는텍스트편집기 \item 우리동네에있는카페 \end{itemize} 결과 좋아하는연예인이름 좋아하는편집기 우리동네에있는카페 15
HTML의 <ul> 태그와같다. 항목기호를점대신하이픈 (-) 으로하고싶다면, 옵션을넣어준다. 만약특정항목의기호만바꾸고싶다면해당항목에만옵션을주면된다. Code 16 \begin{itemize}[-] \item 좋아하는연예인 \item[*] 좋아하는텍스트편집기 \item 우리동네에있는카페 \end{itemize} 결과 - 좋아하는연예인 * 좋아하는텍스트편집기 - 우리동네에있는카페 만약순서가중요한경우라면 itemize 환경대신 enumerate 환경을이용하자. TEX 이알아서번호를매겨준다. HTML의 <ol> 태그와같다. Code 17 \begin{enumerate} \item 좋아하는연예인이름 \item 좋아하는편집기 \item 우리동네에있는카페 \end{enumerate} 16
결과 1. 좋아하는연예인이름 2. 좋아하는편집기 3. 우리동네에있는카페 항목기호를아라비아숫자대신알파벳소문자로나타내고싶다면? 그방법은 이문서에서다루지않는다. 구글에서검색하기바란다. 검색키워드는 latex enumerate numbering style. 2.4 차례 차례없는문서는핸들없는자동차와같다. LATEX 으로차례를만드는방법은아주간단하다. 2.1절문서제목, 저자, 날짜에서설명한 \maketitle 다음에 \tableofcontents명령을사용하면된다. Code 18 \begin{document} \maketitle \tableofcontents 중요한점은최소두번이상컴파일해야차례를만들수있다. 한번컴파일하고나서 PDF문서를보면차례에아무것도나오지않는것을쉽게알수있을것이다. 대신 foo.tex 파일과같은폴더에 foo.toc 파일이생겼을것이다. 왜두번이상컴파일해야하는지, 어떻게자동으로만들어지는지궁금한사람은 foo.toc 파일을살펴보기바란다. 장, 절에대한차례뿐만아니라그림이나표의차례도자동으로만들수있다. 각각다음명령을사용하자 : \listoffigures, listoftables 17
2.5 찾아보기 ( 색인 ) 큰문서의맨끝에는보통찾아보기가온다. 찾고자하는내용이어디있는지쉽게찾아갈수있는기능을제공한다. LATEX 은찾아보기도쉽게만들수있다. 이문서에서는 XƎLATEX 에서찾아보기를만드는방법만제공한다. 먼저프리앰블에다음명령을입력한다. Code 19 \usepackage{makeidx} \makeindex 그리고본문에서찾아보기에들어갈단어를다음과같이입력한다. Code 20 우쭈쭈 \index{ 우쭈쭈 } 이제찾아보기에서우쭈쭈항목옆에쪽번호를누르면바로여기 우쭈쭈 로오게된다. 마지막으로문서에서찾아보기가들어갈곳에 \printindex 명령을사용한다. 이제문서를컴파일해서 idx 파일을얻은후, texindy라는별도의유틸리티를사용한후, 다시컴파일한다. 다음과같이하면된다. Code 21 # xelatex foo # texindy -L korean -I omega foo.idx # xelatex foo 만약차례, 상호참조등을사용한다면 xelatex 으로컴파일을두번이상한다. 끝이다. 이제찾아보기항목의 ㅇ 밑에 우쭈쭈 와쪽번호가보일것이다. 18
찾아보기에대한자세한내용은 ko.tex 설명서의제 8 장을참고하기바란다. 2.6 상호참조와자동조사 상호참조는문서의특정부분을참조하기위해쓰인다. 이문서에서도상호참조를많이사용했다. Code 22 % 여기서는코드를보이기위해줄을나누어입력했다. % 실제로는한문장이므로한줄에입력했다. 나는 \figurename~\ref{fig:foo}\ 을 \pageref{sec:test}\pagename에있는 \ref{sec:test}\sectionname에넣었다. 결과 나는그림 1.3 을 4 페이지에있는 1.3 절에넣었다. 복잡해보이지만뭔가멋지지않은가? 나는이상호참조부분을강조해서설명하지않을수없다. \figurename 1 은 그림 을, \ref{fig:fooproperty} 는 1.4 를출력해준다. \pageref{sec:test} 명령은쪽번호를자동으로가져온다. 이번호들을직접입력한다고생각해보라! 그림을추가하거나뺄때마다, 페이지수가줄거나늘때마다그짓거리를다시해야한다! 워드프로세서로 A4용지 300페이지분량의연간보고서를만든다고생각해보라! 그래도워드프로세서가좋다고생각한다면이문서를과감히삭제하기바란다. 2 \ref{} 명령을이용하면장, 절, 그림, 표등에대한참조를 TEX 이자동으로처리해준다. 뿐만아니다. ko.tex 이제공하는자동조사명령을이용하면앞에 1 이명령은 L A TEX 이제공하는기능이지만, kotex을이용하면한글또는한자로표기할수있다. 2 지금당장워드프로세서를언인스톨하라는뜻이아니다. 무엇이더좋은지만생각해보라. 19
오는단어에따라조사 을 또는 를 을알아서맞춰준다! 즉, 예제코드에서 ref{sec:test} 의번호에따라조사를 ko.tex 이알아서조정해주는것이다. ko.tex 이제공하는자동조사는다음의열두가지이다. Code 23 \ 이 \ 가, \ 을 \ 를, \ 와 \ 과, \ 로 \ 으로, \ 은 \ 는, \ 라 \ 이라 예제 : Code 24 % 실제로는한줄로입력했다. 신데렐라 \ 과백설공주 \ 은왕자 \ 를사이에두고머리끄덩이 \ 을잡고싸웠다더 \ 이라 결과 신데렐라와백설공주는왕자를사이에두고머리끄덩이를잡고싸웠다더라 이제자동조사기능까지쓸수있다는것을알게되었다. 그래도워드프로세서를고집하겠다는사람이있다면? 그런사람은방금전이문서를삭제했을테니자동조사기능을모를것이다. 잠시자동조사기능으로얘기가빠져버렸다. 그외 ko.tex 이제공하는멋진기능들은 6장한국어문서조판하기에간단히소개하였다. 다시상호참조사용법만요약하자면, Code 25 \section{ 안녕하세요 }\label{hello} 이번장은 \pageref{hello}\pagename에있는 \ref{hello}\sectionname입니다. 20
참조에쓰이기위한라벨 \label{hello} 3 을붙여놓고, 문서어딘가에서 \ref{hello}, \pageref{hello} 등의명령으로라벨이붙은곳의정보를자동으로가져올수있다. 문서의규모가크다면라벨을달때 \label{sec:hello} 와같이사용할수있다. sec: 이특별한기능을하는것은아니다. 다만절 (section) 에대한라벨임을쉽게알수있도록해줄뿐이다. 물론이를참조하기위해서는 \ref{sec:hello} 와같이해야한다. 이편리한기능을쓰기위해서당신이해야할일은컴파일을 3번이상해주는것뿐이다. 만약상호참조가나와야할부분이? 로나온다면참조를잘못했거나, 컴파일을더해야한다. 상호참조에문제가있다면컴파일이끝난후다음과같은경고가나타나니걱정할것없다. Code 26 LaTeX Warning: There were undefined references. LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right. 2.7 글꼴변경하기 2.7.1 글꼴 LATEX 은문서의논리적기능에따라알아서글꼴및글꼴크기를선택해서조판한다. 이매뉴얼은장제목, 절제목, 본문, 각주등의크기가서로다르게조판되었다. 하지만이것은 oblivoir 클래스 (6.2절 oblivoir 클래스 ) 가알아서해준것이지, 내가일일이지정해준것이아니다. 물론내마음대로바꾸는것도당연히가능하다. 이문서에서는본문글자에대해서만다루기로한다. 3 XƎTEX 과 LuaTEX 에서는라벨에한글을쓸수있다. 21
본문에서글자모양을변경하고싶은글자가있다면아래명령들을사용하면 된다. \textrm {...} \textsf {...} \texttt {...} \textmd {...} \textbf {...} \textup {...} \textit {...} \textsl {...} \textsc {...} \emph {...} \textnormal {...} roman sans serif typewriter medium bold face upright italic slanted Small Caps emphasized document font 2.7.2 글자크기 LATEX 에서글자크기를변경하고싶은경우에는문맥에따라상대적인크기로정하는것이좋다. 다음은 LATEX 에서글자크기를변경하는방법이다. \tiny \scriptsize \footnotesize \small \normalsize \large \Large \LARGE \huge \Huge 제일작은크기 scriptsize 각주크기 small 본문기본크기 large Large LARGE huge 제일큰크기 이런글자크기명령은이후의글자들에계속적용이된다. 그래서중괄호로 22
감싸서특정부분에만적용할수있도록하자. Code 27 이렇게하면 {\tiny 중괄호내에만영향 } 을미친다. 결과 이렇게하면중괄호내에만영향을미친다. 만약문단전체에적용하고싶다면명령대신환경을이용하자. Code 28 \begin{footnotesize} 문단전체글씨가각주사이즈로나타납니다. 문단전체글씨가각주사이즈로나타납니다. 문단전체글씨가각주사이즈로나타납니다. \end{footnotesize} 결과 문단전체글씨가각주사이즈로나타납니다. 문단전체글씨가각주사이즈로나타납니다. 문단전체글씨가각주사이즈로나타납니다. 2.8 각주 (footnote) 각주를달기위해서는각주를달고싶은낱말또는문장뒤에 4 Code 29 \footnote{ 각주는여기에나타납니다.} 를입력한다. 각주역시상호참조와번호매기기가자동으로된다. 끝. 4 각주는여기에나타납니다. 23
제 3 장 필수패키지 LATEX 이제공하는명령과환경만으로도그럴듯한문서를만들수있다. 하지만글자색상을바꾸거나무언가꾸며줄만한요소들을추가해야할때도있다. 이장에서는 LATEX 으로문서를작성할때많이사용하는패키지들을소개하고간단한사용법을설명한다. 3.1 graphicx 이미지를넣기위해쓰이는패키지이다. Code 30 \includegraphics{ktsmeta} 결과 이미지파일이름은확장자를빼고파일이름만넣도록한다. 24
하지만이미지만달랑넣기보다는 figure 환경안에사용하기를권한다. Code 31 \begin{figure}[!hbp] \centering \caption{kts META(Duane Bibby)} \label{fig:ktsmeta} \includegraphics{ktsmeta} \end{figure} 결과 그림 3.1 KTS META(Duane Bibby) 이명령은다양한옵션을제공하는데 width는가로, height는높이, angle은회전각도를뜻한다. 다른옵션들은설명서를참고하라. 여기서주의할점은 \label{} 명령을사용할경우, \caption{} 명령뒤에사용해야한다. 그래야어딘가에서 \ref{} 명령으로내부참조를할때해당그림으로이동할수있다. Code 32 \centering \includegraphics[ width=0.5\textwidth, height=5cm, angle=15]{ktsmeta} 25
결과 여기서 0.5\textwidth 는본문폭 (textwidth) 의절반 (0.5) 을뜻한다. 3.2 xcolor xcolor 패키지는색을다루는패키지이다. xcolor 패키지가제공하는다양한 색상이름은물론, 사용자가직접색상을임의로만들고이름을지어줄수있다. Code 33 \usepackage[cmyk, dvipsnames, svgnames]{xcolor} xcolor 패키지를불러올때위와같이옵션을줄수있다. cmyk는색상모델이다. cmyk는인쇄할때사용하는색상모델이다. rgb나 HTML 등의모델을사용할수있다. dvipsnames나 svgnames는미리정의된색상이름들을사용하기위한옵션이다. 이들옵션이제공하는색상이름을바로사용할수있다. 어떤이름들이어떤 26
색상인지를보려면 xcolor 패키지설명서를참고하기바란다. 내가좋아하는 HotPink는 svgnames가제공하는색상이다. Code 34 나는 \textcolor{hotpink}{ 핫핑크 } 가좋아 결과 나는핫핑크가좋아 이제직접색상을만들고이름을짓는방법을알아보자. \usepackage{xcolor} 를한다음에아래와같이정의한다. Code 35 \definecolor{sunorange}{cmyk}{0,.47,.78,0} 이매뉴얼을여기까지읽은사람이라면이코드가어떤의미인지알수있으리라생각한다. 다만마지막에있는숫자에대해서만간략히설명하기로한다. 각숫자는 Cyan, Magenta, Yellow, Black(Key) 에대한값이다. RGB가각각 0 부터 255 사이의값이라면, CMYK는 0부터 1사이의값이다. 이제이색상을이용해글자색을바꿔보자. Code 36 \textcolor{sunorange}{ 햇빛오렌지색 } 결과 햇빛오렌지색 27
3.3 mdframed 이놀라운패키지는박스를꾸밀때필요한모든기능을제공한다. 지난 2012년한국텍학회학술대회에서이주호님께서소개하셨는데, 그때만드신발표자료가정말훌륭하다. 나중에이패키지의매뉴얼에도소개되었다 1. 이패키지에대한설명은이주호님의발표자료를링크하는것으로대신하고, 여기서는이주호님의예제코드중하나만보이기로한다. 이패키지를사용하기위해서는먼저아래와같이 usepackage 를해준다. Code 37 \usepackage[framemethod=tikz]{mdframed} TikZ 2 는프로그래밍방식으로그래픽요소를만드는 TEX 패키지이다. 박스에 멋진효과를줄때이 TikZ 패키지를이용해서만들겠다는의미이다. 이제본문에서 mdframed 로박스를만들어보자. 1 http://progress.tistory.com/170 2 TikZ 홈페이지 28
Code 38 \begin{mdframed}[ linecolor=green!80, roundcorner=10pt, backgroundcolor=green!10, innertopmargin=\topskip, frametitleaboveskip=2pt, frametitlefont=\bfseries\itshape, frametitlerule=true, frametitlerulewidth=1pt, frametitlebackgroundcolor=olive!20, frametitlealignment=\center, leftmargin=1cm, rightmargin=1cm, frametitle={\normalfont\bfseries\large% \color{dodgerblue} 푸리에급수의부분합 }] 디리클레는푸리에급수의부분합을아래와같이나타냈습니다. \[ S_n(x)=\frac{1}{\pi}\int_{\pi}^{\pi}f(t)\frac{sin(n+1/2)(t-x)}{sin(t-x)/2}dt \] \end{mdframed} 위코드의결과는다음과같다. 3 3 수식코드에쫄지않아도된다. 수학자가아니라면이렇게입력할일이없고, 수학자라면 이런수식은어렵지않을것이다. 29
결과 푸리에급수의부분합 디리클레는푸리에급수의부분합을아래와같이나타냈습 니다. S n (x) = 1 π π π f(t) sin(n + 1/2)(t x) dt sin(t x)/2 3.4 hyperref 문서를작성하다보면링크를만들경우가생긴다. 문서외부의자료를참조하는링크뿐만아니라문서내에서참조하는내부참조역시링크이다. hyperref 패키지는이런링크들을다룬다. 대표적인명령으로이런명령이있다. Code 39 \href{http://www.ktug.org}{ktug} 어떻게사용하는지쉽게짐작할수있을것이다. hyperref 패키지는링크의 색상도지정할수있다. 또한 PDF 문서의속성까지도지정할수있다. 다음은이문서에서사용한 hyperref 패키지옵션이다. 30
Code 40 \usepackage[ pdfauthor={dokenzy}, pdftitle={ 모두를위한 LaTeX}, pdfsubject={latex을시작하려는사람들을위한성의없는설명서 }, pdfkeywords={latex, 매뉴얼, 너무성의없다 }, colorlinks= true, linkcolor=blue, urlcolor=blue, citecolor=blue, anchorcolor=blue]{hyperref} 그런데코드상에는아무문제가없는데컴파일할때! LaTeX Error: Option clash for package hyperref. 오류가발생할수있다. 사용중인어느패키지가이미내부적으로 hyperref 패키지를사용하고있기때문이다. 4 이럴때는 hyperref 패키지의옵션만설정하자. 프리앰블에서 \hypersetup{} 명령으로설정한다. 4 어떤패키지가다른패키지를로드할때는보통 \usepackage{} 대신 RequirePackage{} 명령을사용한다. 31
Code 41 \hypersetup{ pdfauthor={dokenzy}, pdftitle={ 모두를위한 LaTeX}, pdfsubject={latex을시작하려는사람들을위한성의없는설명서 }, pdfkeywords={latex, 매뉴얼, 너무성의없다 }, colorlinks= true, linkcolor=blue, urlcolor=blue, citecolor=blue, anchorcolor=blue} 3.5 tabu LATEX 에서표를만드는것은손이많이가는작업이다. tabu는기존의불편함을많이해소하고괜찮은인터페이스와강력한기능을제공한다. 이주호님은 2011년한국텍학회학술대회에서 표만들기의새표준 tabu 라는제목으로이패키지를소개해주셨다. 이때의발표자료역시아주좋은참고자료이다. 이주호님의자료가정말좋기때문에여기서는이주호님의발표자료중하나만예를보이는것으로마치겠다. 32
Code 42 \begin{tabu} spread 10pt {X[c]*{3}{ X[2,l]}} \toprule $x$ ( 도 ) & $\sin x$ & $\cos x$ & $\tan x$ \\ \midrule \rowfont[c]{\sffamily} 0 & 0 & 1 & 0 \\ 1 & 0.0174524 & 0.99984769 & 0.01745506 \\ \rowfont[r]{\large\itshape\bfseries} 2 & 0.03489949 & 0.99939082 & 0.03492076 \\ 3 & 0.05233595 & 0.99862953 & 0.05240777 \\ \bottomrule \end{tabu} 결과 x ( 도 ) sin x cos x tan x 0 0 1 0 1 0.0174524 0.99984769 0.01745506 2 0.03489949 0.99939082 0.03492076 3 0.05233595 0.99862953 0.05240777 33
제 4 장 폰트 XƎLATEX 은시스템에설치된트루타입과오픈타입폰트들을직접사용할수있다. Fontspec 패키지는이폰트들을직관적인방법으로사용할수있게해준다. ko.tex 은내부적으로 Fontspec 패키지를이용한다. 이주호님이 AJT 1 에쓰신 Fontspec: XƎTEX 의날개라는글은 XƎTEX 과 Fontspec 뿐만아니라폰트기술전반에대해정리한귀한글이다. 2 다양한폰트들을보여주려는특별한목적이아니라면하나의문서에 3개의폰트패밀리 (font family) 를사용하는것을권장한다. 바탕체 (serif), 돋움체 (sans serif), 타자체 (typewriter) 가바로그것이다. 바탕체는본문에쓰이는기본폰트, 돋움체는큰제목이나캡션등에쓰이는폰트, 타자체는그외특별한용도에쓰인다고보면된다. 이들폰트를지정하는방법은다음과같다. 1 the Asian Journal of TeX 2 나는폰트기술을다룬문서중에이보다좋은한글문서를찾지못했다. 34
Code 43 \setmainfont{serif} \setsansfont{sanserif} \setmonofont{typewriter} \setmainhangulfont{ 바탕글꼴 } \setsanshangulfont{ 돋움글꼴 } \setmonohangulfont{ 타자글꼴 } 예컨대, 이문서에쓰인한글본문폰트는다음과같이설정했다. Code 44 \setmainhangulfont{hcr Batang LVT} HCR Batang LVT 는절한국텍학회와한글텍사용자그룹에서언급한폰트이다. 이폰트의이름은폰트유틸리티등을통해알수있다 ( 그림 4.1). 그림 4.1 서체관리자로본함초롬바탕 LVT 폰트 35
하지만그림 4.2 처럼이름이없는경우도있다. 그림 4.2 서체관리자로본 a 아시아실록폰트 이런경우에는다음과같이폰트의파일명으로지정할수있다. 3 Code 45 \setsanshangulfont{a 아시아실록.otf} 영문폰트와한글폰트를따로지정하는이유는, 한글폰트에들어있는영문폰트가영어권회사의폰트보다좋지않기때문이다. 따라서한글폰트와잘어울리는영문폰트를선택하는것이중요하다. 무슨폰트를써야할지막막한사람은이주호님이문서작성워크숍에서발표한자료 ( 타이포그래피 ) 를참고하자. 3 폰트파일명이한글인경우안될수있다. 그럴때는파일명을영문자로바꾸자. 자세한내용은 oblivoir-simpledoc.pdf 의 5.5 절 ExternalLacation 을살펴보라. 36
제 5 장 Minimal Working Example 이제 LATEX 으로많은것들을할수있을것이다. 차례, 상호참조, 목록, 박스꾸미기, 표, 하지만컴파일하다가오류를만난확률도그만큼높아질것이다. 이제어떻게하면오류를찾고해결할수있는지그방법을찾아보자. 대부분의오류는다음과같은경우에발생한다. 오타 괄호의짝이맞지않을때 \begin{}, \end{} 짝이맞지않을때 없는명령을사용했을때 없는환경을사용했을때 옵션을잘못사용했을때 단순한명령과환경만으로만든텍문서에서오류를해결하는방법은그리어렵 지않다. 하지만많은패키지를쓰고직접명령이나환경을정의해서사용하는 37
큰규모의문서라면오류를찾는것자체가어려울것이다. 다행히 LATEX 은컴파일시발생하는오류에대해꽤정확하게알려준다. 컴파일중에오류가발생하면먼저오류메시지를잘읽어보자. 오류메시지를잘읽어보면어느부분에서오류가발생했는지알수있다. 이오류메시지가아주정확한경우도있지만그렇지않은경우도있다. 어떤부분의오류때문에다른부분이오류가발생하는경우이다. 이런오류는원인을알아내는것이어려울수있다. 패키지가서로충돌하는경우도어렵다. 하지만 Minimal Working Example(MWE) 을만들어보면이런경우도오류의원인을비교적쉽게찾아낼수있다. 이장의목표는오류의원인을찾는것이지오류를해결하는방법을찾는것이아니다. 5.1 왜 MWE 를만들어야하는가? 문서를만들다보면이런저런명령과환경을쓰기위해패키지를사용하기마련이다. 그러다가에러메시지만으로오류의원인을찾을수없게되면곤란해진다. 1 MWE는바로그런경우에특히유용하다. 먼저현재의파일을복사 (foo-mwe.tex) 한다. 복사한파일에서오류와관련없는부분을조금씩삭제하면서컴파일을해본다. 이렇게하다보면원래문서에서발생한오류과같은오류를갖는최소한의텍코드를만들게된다. 비록컴파일할때오류가발생하지만어떤환경 ( 엔진, 클래스, 패키지, 명령, 인코딩등많은조건들 ) 에서그런오류가발생하는지알수있다. 이문서를작성하면서의도한대로결과가나오지않아몇번의 MWE를만들어야했다. 가장최근에만든 MWE 작업과정을예로들어보이겠다. 그림의캡션모양을수정하기위해프리앰블에다음과같은코드를입력했다. 하지만결과가바뀌지않았다. 1 제일곤란한것은오류없이컴파일은되는데원하지않은결과가나오는것이다. 38
Code 46 \captiondelim{ } \captionnamefont{\footnotesize\bfseries\sffamily} \captiontitlefont{\footnotesize\sffamily} 50 페이지분량의컴파일과정이후다닥지나가버린다. log 파일도 2500 줄이 넘는다. MWE 를만들어야겠다. 1. latex4all.tex파일을 captiontest.tex파일로복사한다. 2. 그림캡션이의도한대로잘나오는지확인만하면되니까첫번째그림부분을제외하고본문에서내용을전부삭제한다 2. 3. 프리앰블에서도그림과상관없는것들을모두지운다. 4. 이제의도한대로잘나온다. 프리앰블에뭔가잘못된것이있을것이다. 5. 그림캡션과관련이있을테니이와관련된패키지를찾아봐야겠다. 6. \usepackage{caption} 이있다. 이걸다시넣고테스트해보자. 이런경고가보인다. Code 47 Class memoir Warning: You are using the caption package with the memoir class. To prepare we will now reset all captioning macros and configurations to kernel defaults, and then let the caption package take over. Please remember to use the caption package interfaces in order to configure your captions. 2 당연히문서맨끝에 \end{document} 는있어야한다. 39
그렇다. 내가사용하는 oblivoir라는클래스는 memoir클래스위에서동작하는데, memoir클래스에서제공하는캡션관련명령들이 caption 패키지때문에동작하지않은것이었다. 물론이경고메시지는 1,000줄짜리 latex4all.tex파일을컴파일할때도있었다. 하지만 2,500줄이넘는 log파일에서이걸찾아내려면 이제원인을알았으므로문제를해결해보자. 다행히이문제는 \usepackage{caption} 을지우는것으로해결할수있었다. 하지만어떤경우엔해결방법을찾는것이어려울때도있는법, 이럴때해결하는방법은 1) 구글이나 KTUG에서검색하거나, 2) KTUG에질문하는것이다. 검색은직접해보면되고, 이문서에서는 KTUG에질문을올리는요령을간략히설명한다. 1. MWE를만든다. 2. 그림파일이있다면그림파일도포함한다. 3. KTUG의질문게시판에자신의텍환경 ( 운영체제, TeXLive 버전, 사용한텍엔진등 ) 과오류내용, 원하는결과등을적고 4. 파일을첨부해서올린다. 압축포맷은 zip이가장좋다. 이정도면되겠지? 하고위아래싹뚝자르고코드일부만올리고질문하는분들이있다. 또는아무코드없이얘기만하는분들도있다. 이렇게올리면대답도추상적일수밖에없다. MWE파일을만들어서올리자. 이것이서로편한길이다. 텍코드에는오류가없는데도컴파일중에오류가발생할수있다. 텍은컴파일을하면서몇가지부수파일들을만드는데이런부수파일때문에오류가발생할수있다. TeXworks에서는 [ 메뉴 ]-[ 부수파일삭제 ] 를통해쉽게지울수있다. 웹브라우저에서캐쉬를지우는것과비슷하다. 40
5.2 경고 (WARNING) 다루기 컴파일을하면경고가발생하는것을쉽게볼수있다. 특히 Overfull 오류를자주볼수있다. 이경고는내용일부가본문너비보다넓은경우에발생한다. 어떤경고는무시해도되고어떤경고는고쳐야하는경우도있다. 판단은각자알아서잘한다. 폰트때문에경고가발생하는경우도있다. 3 Code 48 ** WARNING ** Unrecognized OpenType/TrueType cmap format. ** WARNING ** Unable to read OpenType/TrueType Unicode cmap table. ** WARNING ** Failed to load ToUnicode CMap for font "AppleSymbols" 대부분폰트문제이다. 좋은폰트는이런경고가없다. 그래서폰트를잘골라써야한다. 상호참조에문제가있어도경고가발생한다. 다음은이문서를컴파일하는중에나온경고이다. Code 49 LaTeX Warning: Reference `chap:xcolor' on page 31 undefined on input line 766. \label{sec:xcolor} 라고라벨을붙였는데, 참조할때는 \ref{chap:xcolor} 라고해서발생한경고이다. 코드에아무런문제가없어도상호참조경고가발생할수있다. Code 50 LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right. 3 이문서를작성할때발생한경고인데나는무시하기로했다. 41
이경고는텍파일에오류는없지만참조하는라벨이해당위치에없는경우발생한다. 예를들면내용이변경되면서쪽번호나장절번호가바뀔수있는데이것이반영이아직안됐을때발생한다. 해결하는방법은한번더컴파일해주면된다. 만약해결하지않으면쪽번호가나와야할곳이? 로나오게된다. 42
제 6 장 ko.tex 과 oblivoir 로한국어문서 조판하기 ) 3장필수패키지까지만배워도꽤멋진문서를만들수있다. 하지만한국어문서를작성하기위해서는여기서소개하는 ko.tex 을배울필요가있다. ko.tex 은단순히한글입출력에그치지않고 한국어문서조판 을하기위한많은기능들을제공한다. ko.tex 은매우많은기능을제공하기때문에내가다알지못한다. 여기서는이런기능들이있다는소개만간략히한다. 6.1 ko.tex 영어권에서만들어진 TEX 을이용해서한글을조판하기위해서많은노력들이있었고, 그결과현재의 ko.tex v2.0이만들어졌다. ko.tex 은다음의패키지들을총칭한다. ko.tex-utf legacy TeX 엔진에대응하는패키지 cjk-ko CJK 패키지 ( 개발자 Werner Lemberg) 를이용하여유니코드한글을 43
식자하는패키지 XƎTEX-ko XƎTEX 엔진에대응하는한글식자패키지 LuaTEX-ko LuaTEX 엔진에대응하는한글식자패키지 oblivoir memoir클래스를이용한한글문서작성클래스와패키지묶음 1 ko.tex 유틸리티한글문서작성에필요한유틸리티들 어려울수있지만어렵지않게쓸수있다. 우리는그냥이렇게만하면된다. Code 51 \usepackage{kotex} 위와같이선언하면 ko.tex 패키지가알아서필요한패키지를불러온다. 예를들어, 텍엔진이 XƎLATEX 이면 XƎTEX-ko패키지를불러온다. 만약텍엔진이 LuaLATEX 이라면 LuaTEX-ko패키지를불러온다. 즉, ko.tex 패키지가하는일은텍엔진에따라필요한패키지를자동으로호출하는것이다. ko.tex 이제공하는기능들을나열해보면, 우리말이름 ( 장, 절, 차례, 등 ) 방 점, 이 런 방 점 까 지! 한글식카운터 : ㄴ,, ᄂ, 나, 나,, 2, ⑵, b,, 둘, 둘째, ⅱ, Ⅱ 자동조사 미세조정 ( 자간, 어간, 행간, 행나눔, 수식과의간격등 ) 1 이문서는이클래스로만들어졌다. 44
한글책갈피, 찾아보기, 참고문헌등 옛한글 한글문서서식 세로쓰기자세한내용은 ko.tex 설명서를읽어보기바란다. 여기서는세로쓰기의예만간략히보이겠다. 그림 6.1 * 내가원하는우리나라 ( 백범김구 ) 중일부 6.2 oblivoir 클래스 ko.tex 을이용하면아름다운한국어문서를조판할수있다. 그러기위해서는다양한옵션들을잘활용해야한다. 하지만나처럼전문가가아닌사람은원하는게무엇인지조차잘모를수있다. 옵션을주어도제대로쓸줄을모른다. oblivoir 는바로그런사람들이좋아할만한클래스이다. memoir 클래스 2 에 ko.tex 을내장한이클래스는한국어문서조판을위한설정이잘되어있다. 2 많은기능을내장한클래스. 한글로번역된문서 45
따라서 ko.tex 패키지를따로불러들이지않아도된다. 이문서역시 oblivoir를사용한다. 따라서대부분의한국사람에게가장적절한한국어문서제작방법은 oblivoir 클래스를이용하는것이다. oblivoir 역시좋은설명서가있으니그것을참고하도록하자. <texdoc oblivoir> 46
제 7 장 좀더 LATEX 스럽게 지금까지 LATEX 과 ko.tex 의기본명령들을살펴봤다. 하지만 LATEX 이강력한 이유는그자체로하나의언어이기때문에사용자가직접명령이나환경을 만들어쓸수있다는것이다. 7.1 사용자정의명령 지금까지는클래스나패키지가제공하는명령만사용했다. 이제직접명령을 만들어보자. 7.1.1 가장간단한명령만약 C++ 언어를만든비야네스트롭스트룹 (Bjarne Stroustrup) 에대해글을쓴다고하자. 당연히이사람의이름이자주쓰일것이다. 그런데철자가길고어렵다. 뿐만아니라영어로표기할지한글로표기할지도결정하지못했다. LATEX 에서는아무문제가안된다. 47
Code 52... \newcommand{\bjarne}{bjarne Stroustrup}... \begin{document} \bjarne... \newcommand 명령은새명령을정의하는명령이다. 결과 Bjarne Stroustrup 만약에이름을한글로바꾸어야한다면 Code 53 \newcommand{\bjarne}{ 비야네스트롭스트룹 } 으로선언하면된다. 이제본문에서 \bjarne 라고쓴곳은전부 비야네스트롭 스트룹 이라고나올것이다. 7.1.2 옵션이있는명령 3.2장 xcolor의예제에서다음과같은명령을사용했다. Code 54 \textcolor{sunorange}{ 햇빛오렌지색 } 햇빛오렌지색을자주사용한다면좀더간편한방법을찾아보자. 48
Code 55 \newcommand{\sunge}[1]{\textcolor{sunorange}{#1}} \sunge{ 간편하게쓰는햇빛오렌지색 } 결과 간편하게쓰는햇빛오렌지색 7.1.3 옵션에기본값을주는명령방금전처럼하면항상햇빛오렌지색만쓸수있다. 만약다른색상을쓰고싶다면저런명령을색상마다만들어야할까? 제일좋은방법은햇빛오렌지색을기본값으로주고, 다른색상을쓰고싶을때만색상을지정해주는것이다. Code 56 \newcommand{\sunnytext}[2][sunorange]{\textcolor{#1}{#2}} 기본색은 \sunnytext{ 햇빛오렌지색 } 이지만, 다른색도 \sunnytext[goldenrod]{goldenrod색} 도할수있어요. 결과 기본색은햇빛오렌지색이지만, 다른색도 Goldenrod 색도할수있어요. 결과적으로 \textcolor{}{} 명령과별반다르지않게됐지만, 이런식으로인 자와옵션이들어가는명령을만들수있다는예시로는괜찮다고생각한다. 7.1.4 renewcommand 이미사용중인명령 ( 그명령이클래스에서제공하든, 패키지가제공하든, 직접정의한것이든 ) 을다시정의해야할경우가생기면 \renewcommand명령을사용한다. 이명령은사용자정의명령보다는클래스나패키지가제공하는명령을수정해야할경우에많이사용된다. 클래스나패키지를직접수정하는것은절대 49
하지않기를바란다. 대신 renewcommand 를사용하여다시정의하도록하자. 사용방법은 \newcommand{} 와같다. 7.2 사용자정의환경 \newenvironment{} 명령으로사용자정의환경을만들수있다. 다음은 lshort-kr문서에나온예제이다. Code 57 \newenvironment{king} {\rule{1ex}{1ex}% \hspace{\stretch{1}}} {\hspace{\stretch{1}}% \rule{1ex}{1ex}} \begin{king} My humble subjects \ldots \end{king} 결과 My humble subjects 7.3 파일나누기 LATEX 의가장큰장점중하나는파일을분리하여관리할수있다는점이다. 대규모문서, 또는공동으로문서를작성할때특히유용하다. Code 58 \include{filename} 50
이명령은 filename을현재 tex 파일에삽입한다. 이때호출된페이지는새페이지에서시작하게된다. 1 Code 59 \includeonly{file1, file2, file3} 이명령은프리앰블에서만쓸수있다. \include{} 명령을사용할때여기에열거된파일들만삽입할수있다. 만약다른파일을삽입할때새페이지로시작하는것이싫으면 \include{filename} 대신 \input{filename} 명령을사용하자. 1 내부적으로 \clearpage 명령이호출되기때문이다. 51
제 8 장 추천문서 내가이문서를쓰기까지많은자료를공부하고참고했다. 꼼꼼히읽은문서도있고어려워서잘모르고넘어간문서도있다. 한번읽고넘어간문서도있고몇번이고본문서도있다. 클래스 oblivoir와책만들기 같은내수준에는어려운문서도있고, Donald Knuth교수의일화가실린재밌는문서도있다. 본문에소개된문서도있고그렇지않은문서도있다. LATEX 을써보고싶은사람이라면필수매뉴얼정도는정독하길바란다. 8.1 L A TEX 초보자를위한필수매뉴얼 lshort-kr LATEX 전반에대해상세하게다루는문서 kotexdoc ko.tex 전반에대해상세하게다루는문서. xetexko-doc ko.tex 중 XƎTEX-ko 에대해다루는문서. 52
8.2 L A TEX 을더알고싶은사람을위한글 한국텍학회에서는 The Asian Journal of TeX 이라는학술지를통해텍을이용한조판및인쇄기술전반에대해많은논문을발표했다. 여기실린모든글들이훌륭하지만 ko.tex 및 XƎLATEX 과밀접한글몇가지만소개를한다. 클래스 oblivoir와책만들기김강수한글텍 : 과거, 현재, 그리고미래김강수 Fontspec: XƎTEX 의날개이주호 Oblivoir를이용한문서작성이기황 8.3 그외참고할만한글 Memucs Manual 김강수옮김한없이다양한분야에걸린관심, 하나의공통된맥락데니스샤샤, 캐시레이저어, 박영숙옮김 1 레이텍을빨리쓸수있는방법 2009 이호재워드프로세서사용자를위한 LATEX 김강수옮김라텍소개및기본사용방법조진환 Introduction to Digital Typography 조진환 XƎLATEX 문서작성의실제김강수스타일작성을위한명령어모음 2008년공주대워크숍강좌팀 1 세종연구원에서출간된 컴퓨터를만든 15 인의과학자 (Out of their minds) 중 Donald Knuth 편 53
article 클래스를파헤쳐보자 2008 년공주대워크숍강좌팀 문단과리스트김강수 LATEX 활용하기김강수 54
찾아보기 C command, 8 D documentclass, 6 E enumerate, 16 F font, 34 footnote, 23 G graphicx, 24 H hyperref, 30 K kotex, 43 M mdframed, 28 Minimal Working Example, 37 N newcommand, 47 newenvironment, 50 O oblivoir, 45 P package, 9 Preamble, 8 T tableofcontents, 17 tabu, 32 texdoc, 12 W WARNING, 41 X xcolor, 26 XeLaTeX, iii ㄱ각주, 23 55
경고, 41 공백문자, 9 글꼴, 21 글자크기, 22 ㄷ따옴표, 12 ㅁ명령, 8 목록, 15 문단, 9 ㅍ파일나누기, 50 패키지, 9 프리앰블, 8 ㅎ한국텍학회, iii 한글텍사용자그룹, iii 함초롬, i ㅅ상호참조, 19 색인, 18 설치, 1 ㅇ우쭈쭈, 18 ㅈ자동조사, 19 ㅊ차례, 17 찾아보기, 18 ㅋ클래스, 6 ㅌ특수문자, 10 56
마치며 근본없는 LATEX 매뉴얼은여기까지다. 힘들어서맞춤법수정도포기했다. tex 소스가겨우 1050줄에불과한, A4기준 50쪽도안되는문서인데도불구하고힘들다. memoir설명서나 lshort-kr같은문서를번역하신분들의노고가새삼더크게느껴진다. 영국이나미국등에서초등학생부터컴퓨터프로그래밍교육을시작한다고한다. 특히영국은 5세부터는간단한프로그래밍과정을가르치고, 11세이상학생에게는실제프로그래밍언어를교육한다고한다. 나는 LATEX 교육도프로그래밍교육이상의효과가있을것이라고생각한다. 프로그래밍하듯이글쓰기를하니이보다좋은교육방법이있을까? 또한웹퍼블리셔에게도좋은훈련방법이될것이다. validator만통과한다고좋은마크업이아니잖은가. Dokenzy