L A TEX 활용하기 김강수 * 2008 년 11 월 28 일 요약 2008 년 11 월 28 일, 숭실대학교교수학습센터워크숍학습자료. L A TEX 을어느정도알고계신 분을대상으로, TEX 과 L A TEX 의기본사항을상기시키고, 중급활용자가되기위해필요한사항들을 실습과함께소개한다. 차례차례................................................ 1 1 TEX: What and Why...................................... 3 1.1 TEX 의세가지측면................................... 3 1.2 TEX 이라는말의용법.................................. 3 1.3 글쓰기도구로서의 L A TEX................................ 3 1.4 L A TEX 문서작성에입문................................. 4 2 첫번째난관, 설치....................................... 5 2.1 KC2008, 소개...................................... 5 2.2 설치에관한지침.................................... 5 2.3 첨언........................................... 5 3 첫문서를작성해보자..................................... 6 3.1 미리알아야할것.................................... 6 3.2 라텍문서의구성요소................................. 7 3.3 좀긴문서........................................ 7 4 중급자로의첫걸음....................................... 9 4.1 라텍사용하기의두모드................................ 9 4.2 패키지의활용...................................... 9 4.3 자신만의레이아웃을만들어보자........................... 9 4.4 L A TEX 프로그래밍을해보자............................... 10 *KTUG. collection@ktug.or.kr 1
2 4.5 폰트문제........................................ 11 4.6 TEX 언어?........................................ 12 4.7 또하나의 L A TEX 을쓸이유 Beamer......................... 13 5 Short Cuts........................................... 14 5.1 매뉴얼과샘플...................................... 14 5.2 수식입력익히기.................................... 14 6 L A TEX 문서작성의즐거움................................... 15
TEX: WHAT AND WHY 3 1 TEX: What and Why 1.1 TEX 의세가지측면프로그래밍언어 TEX 은 D. Knuth 가만든조판프로그래밍언어이다. 컴파일러 TEX 은 TEX 언어로입력된원본 (source) 파일을처리하여오브젝트파일을얻어내는컴파일러프로그램이다. 매크로언어 TEX 은사용자가다양한수준에서정의하고활용할수있도록하는매크로집합이다. TEX 매크로의예로는 plaintex, L A TEX, ConTEXt 등이있다. 1.2 TEX 이라는말의용법엔진, engine TEX 매크로언어의가장기본이되는 primitive 와그구현을함께엔진이라고부른다. 현재가장많이사용되는엔진은 pdftex, 또는 pdf-ε-tex. 매크로, macro 미리정의된매크로세트로서사용자가 TEX 언어에익숙하지않더라도약속된매크로명령을이용해서원하는결과를더쉽게얻게만드는일종의라이브러리이다. L A TEX. 구현, implementation TEX 을실제활용하려면방대한폰트와유틸리티가필요하다. 이것을하나의시스템으로묶어해당플랫폼에서쉽게운영할수있게도와주는 TEX 관련프로그램모음으로이루어진시스템. KC2008, TEX Live, MiKTEX. 배포판, 또는설치프로그램. 1.3 글쓰기도구로서의 LATEX L A TEX 은문서작성시스템 (Document Preparation System), 즉, 글쓰기도구이다. 그런면에서흔히 Word Processor 와비교된다. 주로과학 기술문헌의글쓰기에주로활용된다. 논문, 학회지기고, 단행본출판등.
TEX: WHAT AND WHY 4 L A TEX 의글쓰기는 <Mark-up> 이다. 사용자는조판표지와기타문서의구조 (structure) 와외양 (layout) 을결정하는지시사항을 control sequence로텍스트사이에써넣는다. 이런방식의글쓰기는장점과단점을동시에가지고있다. L A TEX 의글쓰기는 programmable 하다. 즉일정한규칙에따라서문서내의각요소에대하여프로그래밍을적용할수있다. L A TEX 의글쓰기는 구조화글쓰기 이다. 저자의사유의흐름을구조화하고내용에집중할수있도록해준다. L A TEX 이채택하고있는 TEX 의수식표현은, 적어도수식표현에관한한가장폭넓게받아들여지고있으며익숙해진사람에게매우효율적인표현이가능하다. 1.4 LATEX 문서작성에입문 L A TEX 은 ( 좋은 ) 도구일뿐, 저자의사유를대체하지못한다. 그러나, 좋은사유를가장잘표현해주는데탁월하다. 마크-업글쓰기의장점을최대한활용하기로결심해야한다. L A TEX 이 가장좋은 도구는아닐지모르나, 아주좋은도구임에는틀림없다. 다만, 익숙해졌을때. 익숙해질때까지약간의학습은필수적이다.
첫번째난관, 설치 5 2 첫번째난관, 설치 2.1 KC2008, 소개 KC2008은 KTUG과 KTS에서공식적으로배포하는 TEX 운영시스템. KTUG이설립된 2002년경부터사용자친화적인편리한 ( 한글 )TEX 시스템을제공하려는노력이시작되었음. 2006년까지, MiKTEX-KTUG, HPack 등다양한시도들이있었음. 2006년부터, KTUG Collection 이라는이름으로단한번의설치로설정이완료되고즉시문서작성이가능한시스템을개발해왔음. KC2008은 TEX Live 를기반시스템으로하여한글환경과다양한유틸리티를추가하고전용편집기를제공함. 안정적이고대단히효율적인실행파일을갖춘국제표준에부합하는 TEX 운영시스템. 문제가생겼을때즉시대응할수있고사용자의요구에민감하게반응하는것이최대장점. 2.2 설치에관한지침 http://www.ktug.or.kr/ 의 DOWNLOAD/Install 메뉴. 또는이기황선생이금년공주대학교워크숍에서발표한자료, http://faq.ktug.or.kr/faq/latexworkshop/2008fall?action= download&value=kc08inst.pdf 참조. 2.3 첨언 2000년대중반까지만해도, TEX 사용의첫난관이설치였다. 그러나 KTUG Collection 이배포되고있는현재, 설치가문제가되는경우는극히드물어졌고복잡한설정과정도거의해결되었다. 예전에 TEX 을사용하시던분들께오늘날설치문제에관한한어느정도극적인변화가생겼는지를직접들어보시면재미있을것임.
첫문서를작성해보자 6 3 첫문서를작성해보자 3.1 미리알아야할것 \documentclass{oblivoir}%article, book, report, class,... % 주석문. 이부분이 preamble 이다. \begin{document} 안녕하세요. Hello, World! \end{document} (1) L A TEX 문서는 \documentclass 선언으로시작한다. (2) TEX 의제어명령 (control sequences) 은역슬래시 (\) 로시작하여공백으로끝난다. (3) documentclass 에는적절한문서클래스를선언한다. (4) 전문 (preamble) 에서 \usepackage 문을통하여스타일을로드하고사용자정의설정을행한다. (5) 본문은 \begin{document} 와 \end{document} 사이에온다. (6) 다음문자들은제어명령으로쓰이므로직접입력하지못한다. & # ~ _ ^ \ 이문자들을입력하려면특별한방법을써야한다. (7) 제어명령은 command 라고부르는것과 environment 라고부르는것이있다. (8) L A TEX 원본파일은 plain text (UTF-8) 파일이다. 특히한글은유니코드 UTF-8으로저장되도록주의를기울이자. 좋은, 손에익은에디터를잘활용하도록하는것이중요하다. (9) 컴파일하여결과미리보기를해보자.
첫문서를작성해보자 7 3.2 라텍문서의구성요소 L A TEX 문서는텍스트와텍스트를보조하는요소들, 그리고수식등으로이루어진다. 텍스트를보조하 는요소들에는참조장치, 요약문, 각주, 그림과표등이있다. 3.3 좀긴문서 \documentclass[a4paper,11pt]{oblivoir} \usepackage{graphicx,xcolor} \usepackage{amsmath,amssymb} \begin{document} \title{ 간단한문서샘플 } \author{ 홍길동 } \date{\today} \maketitle \begin{abstract} 이문서는가장간단한문서샘플이다. \end{abstract} \tableofcontents \section{ 서론 }\label{sec:intro} 간단한문서샘플을작성해보자. \section{ 본론 } \subsection{ 인용문의처리 } 라텍에서는인용처리방식이매우다양하다. 다른아무런설정이없어도인용을잘처리해준다.\cite{HT} 또한 \pageref{sec:intro} 페이지의 \ref{sec:intro}\ 를보면, 상호참조가어떻게구현되는가를잘알수있다. \subsection{ 문서에들어가는것들 } 수식은다음과같이깔끔하게처리된다. \begin{equation}\label{eq:1} P(z) = \prod_{n=1}^\infty E_p\left(\frac z{a_n}\right) \end{equation}
첫문서를작성해보자 8 그림은외부그림을이용할수도있겠지만, 재미삼아간단한 picture 그림 ~\ref{fig:1}\ 을하나넣어보겠다. \begin{figure} \centering \setlength\unitlength{1pt} \begin{picture}(88,60) \multiput(55,40)(3,-3){10}{\circle{20}} \multiput(85,10)(3,3){11}{\circle{20}} \end{picture} \caption{picture 환경의그림 }\label{fig:1} \end{figure} 뭐, 이왕이면표도하나. 표 ~\ref{tab:1}\ 을보라. \begin{table} \centering \caption{ 표샘플 }\label{tab:1} \begin{tabular}{ c c } \hline Hello & Good-bye \\ \hline 안녕 & 안녕 \\ \hline \end{tabular} \end{table} 식 ~\eqref{eq:1} 및그림과표는문서를더욱풍부하게해준다.\footnote{% 여기인용한그림과표는 \bnm{ 한글과텍 } 에서가져온것이다.} \section{ 결론 } 나쁘지않은것같다. \begin{thebibliography}{0} \bibitem{ht} 김강수. `` 한글 \LaTeX 의현재와미래,'' 온라인문서. \end{thebibliography} \end{document}
중급자로의첫걸음 9 4 중급자로의첫걸음 4.1 라텍사용하기의두모드라텍사용에는두가지방식이있다. 1 주어진양식에충실하게. 나의목적은글을쓰는것또는 Presentation 을만드는것이지디자인이아니다. 2 이왕이면예쁘게문서를꾸며야한다. 레이아웃, 폰트, 타이포그래피, 디자인등을나만의것으로하고자한다. 일반적으로 1의경우는특정학술지에기고하거나졸업논문을쓰거나하는등제한된목적으로쓰이고, 익혀야할것이많지않다. 수식을자유롭게쓸수있는정도이면됨. 그러나 2의경우는디자인과그구현 (TEX 을통한 ) 의문제가된다. 이때는익혀야할것도많고알아야할것도많다. 4.2 패키지의활용 L A TEX 의가장중요한장점이, 상상가능한거의모든문제에대해이미답이나와있다는것이다. 패키지를활용하자. 예를들면페이지레이아웃은 geometry 패키지를이용한다. 페이지스타일은 fancyhdr 패키지를이용한다. 둘이상의그림을나란히배치하는것은 subfloat 패키지를이용한다. 거의대부분의자신이원하는기능, 모양이어딘가적당한패키지로존재할것이다. 어떤패키지가어떤기능을하는지모르기때문에문제가되는데, 이런것은 물어서 해결한다. 4.3 자신만의레이아웃을만들어보자 가장쉽게시작할수있는곳은레이아웃을변경하는것이다. 잘만들어진스타일을분석하거나, 그 코드를가져다가자신이원하는방식으로조금변경하는것이다.
중급자로의첫걸음 10 chapter heading 의모양, 페이지스타일 ( 면주 ) 의모양등을원하는대로바꾸는것은이것이시작이다. 먼저 preamble에원하는모양을구현하는명령을만들어서테스트한후, 그것을항상사용할수있도록.sty라는확장명을붙여서저장해두면그것이소위스타일패키지가될수있다. 다음코드는 report 클래스의장 (chapter) 헤딩모양을바꾸기위해 kosections-utf.tex 파일의일부를가져다가변경한것이다. \makeatletter \def\@makechapterhead#1{% % \vspace*{50\p@}% \vspace*{0pt}% {\parindent \z@ \raggedright \normalfont \ifnum \c@secnumdepth >\m@ne \centering %%% <----------------- % \huge\bfseries \LARGE\bfseries \pre@chaptercnt\thechapter\post@chaptercnt % \par\nobreak % \vskip 20\p@ \fi % \interlinepenalty\@m % \Huge \bfseries #1\par\nobreak \quad #1% \vskip 40\p@ }} \makeatother 4.4 LATEX 프로그래밍을해보자 예전에필자는문제와답을함께입력해두면답만모아서따로출력하는기능을구현해본적이있다. 대략다음과같은모양. %%%%%%%%%%%%%% b %%%%%%%%%%%%%%%%%% \newcommand\outputfilename{collectedsol.tex} \newoutputstream{outputstream}\newinputstream{inputstream} \IfStreamOpen{outputstream}{}{% \openoutputfile{\outputfilename}{outputstream}% } \def\errmsg{} \newcounter{munje}[section]\setcounter{munje}{0} \newcommand\fmtmunje{\arabic{section}.\arabic{munje}} \newif\ifinmunenv\inmunenvfalse
중급자로의첫걸음 11 \newenvironment{mun} {\InMunEnvtrue\refstepcounter{munje}% \par\noindent{\bfseries [ 문제 \fmtmunje]\label{mun:\fmtmunje}}% \hfill\hyperlink{sol:\fmtmunje}{$\heartsuit$}\par} {\InMunEnvfalse\par\bigskip} \newenvironment{pul}% {\ifinmunenv\def\errmsg{}\else\def\errmsg{pul nesting Error! }\fi \let\thismunje\fmtmunje \addtostream{outputstream}{% \string\par\string\bigskip {\string\par\string\noindent\string\normalsize\string\sffamily {\itshape\errmsg} 풀이 \thismunje ::: (Page...\string\pageref {mun:\thismunje})\string\hypertarget{sol:\thismunje}{}} \string\hrulefill\string\par } \expandafter\writeverbatim\expandafter{outputstream} }% {% \endwriteverbatim \par } \newcommand\printcollectedsol{% \clearpage \centerline{\large 풀이 } \small \closeoutputstream{outputstream} \openinputfile{\outputfilename}{inputstream} \readstream{inputstream} } %%%%%%%%%%%%%% e %%%%%%%%%%%%%%%%%%%%%%% 그다지어렵지않다. 중요한것은코딩자체가아니라문제를해결하는 방법 또는알고리즘이 다. 이방법을실제코드로구현하는것은매뉴얼을찬찬히읽으면다나와있다. ( 어디에있는가, Know-Where 의문제 ). 4.5 폰트문제최근 TEX 의눈부신발전은 TEX 은매우오래된프로그램이기도하지만최근급격히변모하고있기 도하다 종래 TEX 의한특징처럼여겨져오던, 폰트사용의제약을완전히탈피했다. X TEX 이라는 새로운엔진의등장으로시스템폰트를자유롭게사용할수있게된것이다. 이문서는 X TEX 을이용하여윤명조, 맑은고딕등의트루타입오픈타입글꼴을사용하여작성하 E E 였다. 다음은이문서의폰트사용설정부분이다.
중급자로의첫걸음 12 \setmainfont[mapping=tex-text]{minion Pro} \setsansfont{myriad Pro} \setkormainfont(- 윤명조 340)(- 윤명조 330){- 윤명조 320} \setkorsansfont{ 나눔고딕 } \setkormonofont{ 맑은고딕 } \setmonoscale{.9} 4.6 TEX 언어? TEX 이라는언어는그자체로문법을갖추고있어서이문법을습득하는것이그다지쉽지않다. 이에대한한가지좋은소식. LuaTEX 이라는새로운엔진은 TEX 명령을 Lua 언어로정의할수있게하고있다. 만약 Lua 스크립트언어에익숙하다면 TEX 에대해서는최소한의지식만을가지고도자유자재로 TEX commands 들을정의하고활용할수있게할수있다. 다음예는간단한견적서를 LuaTEX 으로출력하게한보기이다.( 이호재님이작성하심.) \begin{tabularx}{\textwidth}{ X r r r } \hline Description & Quantity & Unit Price & Amount \tabularnewline \hline % \directlua0{ CurRow = 1 TotRow = 20 array = { {"1st Driver Tests", 1, 2040}, {"1st Certification Tests", 1, 7650}, {"2nd Driver Tests", 1, 2040}, {"2nd Certification Tests", 1, 7650}, {"3rd Certification Tests", 1, 2040} } i = 1 total = 0 while array[i] do array[i][4] = array[i][2] * array[i][3] total = total + array[i][4] str = array[i][1].."&"..array[i][2].."&".. array[i][3].."\string\\,\string\\eur &".. array[i][4].."\string\\,\string\\eur\string\\tabularnewline\string\\hline" tex.print(str) CurRow = CurRow + 1 i=i+1 end
중급자로의첫걸음 13 while CurRow <= TotRow do str = "& & & \string\\tabularnewline\string\\hline" tex.print(str) CurRow = CurRow + 1 end } % \multicolumn{3}{ r }{TOTAL} & \num{\directlua0{tex.print(total)}}\,\eur\tabularnewline \hline \end{tabularx} 4.7 또하나의 LATEX 을쓸이유 --- Beamer 이번강좌는 L A TEX 중급자강좌라서제대로다루지못했지만, Beamer 강좌는꼭한번개최되기를희망한다. Beamer는 L A TEX 을이용하여 PDF 발표자료 (Presentation) 를만드는도구이다. MS Powerpoint 가하는일과비슷한일을한다.
SHORT CUTS 14 5 Short Cuts 5.1 매뉴얼과샘플가끔매뉴얼을읽은후에문서작성을시작하겠다는분들을본다. 그러나, 이것은효율적인접근방법이아니다. 먼저좋은샘플을그대로복사한후자신의내용으로채워넣는다. 아무리좋은샘플이라도뭔가바꾸고싶은것이있게마련. 바꾸고싶은것이나그밖에하고싶은것을알아보기위해서매뉴얼을이용한다. 즉, 매뉴얼을레퍼런스처럼이용하는것. 어느정도되겠다고생각하면이제연관된내용을찾으면서매뉴얼을훑어본다. 이과정을반복한다. 요컨대좋은샘플과매뉴얼이있으면시작하기에충분하다. 5.2 수식입력익히기 TEX 의수식명령을모두아는것은불가능하다. 그러나어느정도는알아두어야한다. 수식입력을익히기위해반드시읽어야하는문서. (1) amsldoc, (2) Mathmode LyX의 WysiWym 모드를활용하여원하는수식을만들어보면서거기에해당하는명령이무엇인지알아본다.
L A TEX 문서작성의즐거움 15 6 L A TEX 문서작성의즐거움얼마전에있었던한워크숍에서 Beamer에대한강연을하신분께서매우재미있는말씀을하셨다. 즉, 파워포인트는시간이갈수록짜증스러워지는데반해, Beamer는숙련되어갈수록재미있어진다. 고하신것. 또한, 내용이부실해서화려한효과로관객의주의를돌려야하는상황이라면파워포인트를이용하시고, 청중을내용에집중하게하려면 Beamer를이용하시라일견일리있는말씀이다. 파워포인트도매우훌륭한도구이므로이런식의비교는재미있게말씀하시기위해한것이겠지만, L A TEX 을기반으로하는대부분의글쓰기방식이이와유사하다. 즐거운 L A TEX 체험이되시기를빌며.