요약
이 수업은 문서의 구조를 다루는 이 강좌의 셋째 단원을 연다. 단원이 무엇을 위한 것인지 설명한다. 곧 앞 단원에서 잘 조판한 본문에서 출발하여, 고유한 골격을 갖춘 긴 문서로 나아가는 것이다. 그런 문서에서는 각 부분에 번호가 붙고, 차례에 실리고, 서로를 참조하며, 여러 파일로 나뉜다. 또한 단원의 다섯 수업과, 문서 클래스와 쪽에서 자신만의 프리앰블까지 그것들을 잇는 실마리를 소개하고, 앞 단원들에서 무엇을 전제하는지 밝히며, 학술 문서의 형식이 어디에서 왔는지 돌아본다. 그리고 단원이 해결하는 문제, 곧 참조와 번호를 손으로 쓴 문서는 바뀌는 순간 거짓말을 하기 시작한다는 문제를 제기하고, 이 골격이 물리학 학위 논문에도 역사학 학위 논문에도 똑같이 쓸모 있음을 보인다.
학습 목표
- 단원 내용의 순서를 서술하고, 각 수업이 다음 수업에 무엇을 보태는지 설명한다.
- 단원이 앞 단원들에서 전제하는 것을 알아보고, 필요하면 복습한다.
- 내부 참조를 손으로 쓰지 않는 까닭을 예를 들어 설명한다.
- 여러 분야의 학술 장르에서 단원이 조판하는 법을 가르치는 구조를 알아본다.
시작 평가
단원을 공부하기 전에 출발점을 재어 보는 것이 좋다. 이 평가는 자기 평가이다. 점수를 매기지 않으며, 공부의 방향을 잡는 것만이 목적이다. 처음 두 문항은 단원이 앞 단원들에서 전제하는 내용을 복습하고, 이어지는 열 문항은 두 문항씩 차례로 단원의 다섯 수업을 다룬다. 긴 문서를 조판해 본 적이 없는 사람은 맞히리라 기대하지 않아도 된다. 모든 답은 맞든 틀리든 요점을 설명하고 그것을 다루는 수업의 이름을 알려 준다. 같은 기능은 마지막 종합 수업에서 다시 잰다.
단원을 시작하기 전에 출발점을 확인해 보세요. 짧은 자기 평가입니다. 점수가 매겨지지 않으며 결과는 브라우저에만 저장됩니다.
문제 1이전 단원에서문서를 처음 컴파일한 뒤
\ref로 쓴 참조가 물음표 두 개로 나타나고, 로그는 한 번 더 컴파일하라고 한다. 무슨 일이 일어난 것인가?그럴 수도 있지만, 그렇다면 다시 컴파일해도 정의되지 않은 참조에 대한 경고가 남는다. 여기서 로그가 요구하는 것은 바로 한 번 더의 패스이다.\ref와\label은 LaTeX의 핵심에 속하므로 패키지가 필요 없다.지워도 아무것도 나아지지 않는다. 다음 패스가 그것을 다시 쓰고, 참조는 여전히 또 한 번의 패스를 기다린다.엔진은 소스를 한 번만 읽는다. 한 패스에서.aux파일에 적은 것은 다음 패스가 시작될 때 읽는다. 그래서 참조와 차례에는 적어도 두 번의 패스가 필요하다.복습: 컴파일과 오류 수정
문제 2이전 단원에서어떤 에세이는 작품 제목을 쓸 때마다 겹낫표를 손으로 치는 대신, 프리앰블에서
\newcommand{\jakpum}[1]{『#1』}로 정의한\jakpum{…}으로 표시한다. 무엇을 얻는가?지금은 결과가 비슷하다. 이득은 규정이 바뀌어 제목을 다른 표기와 구별해야 할 때 드러난다.속도는 눈에 띄게 달라지지 않는다. 이점은 유지 관리에 있지 성능에 있지 않다.정의의 어디에도 제목을 차례에 넣는 것은 없다. 정의는 모양만 정한다.명령은 기능, 곧 작품의 제목을 가리키고, 그 정의가 모양을 정한다. 이것이 논리적 마크업이며, 이 단원은 자신만의 프리앰블로 그것을 방법으로 만든다.복습: 의미 있는 서식
문제 3한 학생이
\documentclass{article}로 학위 논문을 쓰면서 본문을\chapter{…}로 나누었다. 컴파일하면 어떻게 되는가?클래스는 모르는 구획을 바꾸어 주지 않는다. 그 명령은 클래스 안에 없다.구획 단계는 클래스에 따라 다르다. 그래서 클래스를 고르는 일이 구조에 관한 첫 결정이다.모르는 명령은 오류를 일으킨다. 엔진은 그것을 조용히 무시하지 않는다.각 클래스는 자신의 구획 단계를 정의한다.report와book에는\chapter가 있고,article은\section에서 시작한다. 장으로 나뉜 학위 논문은 장이 있는 클래스로 쓴다.복습: 문서 클래스와 쪽
문제 4어느 대학이 A4 용지에 2.5센티미터의 여백을 요구한다. 그 여백을 정하는 알맞은 방법은 무엇인가?
a4paper는 용지 크기를 고를 뿐이다. 여백은 클래스가 자신의 비율에 따라 정하며, 대학의 규정을 따르지 않는다.그것은 여백을 바꾸는 것이 아니라 본문을 옮길 뿐이며, 줄바꿈으로 생긴 줄 첫머리의\hspace는 사라진다. 게다가 본문 속의 시각적 마크업이 된다.글자 크기는 쪽의 여백을 바꾸지 않는다.geometry는 몇 가지 치수로부터 쪽의 모든 치수를 계산하므로, 치수를 한 번만 선언하면 서로 어긋나지 않는다.복습: 문서 클래스와 쪽
문제 5
article클래스의 문서에서\tableofcontents앞에\setcounter{tocdepth}{1}을 썼다. 차례에는 무엇이 나타나는가?이 수는 최대 깊이이지 하나의 단계가 아니다. 1단계까지, 곧 절이 들어간다.차례가 비는 것은 패스 때문에 첫 컴파일에서뿐이다.tocdepth가 차례를 비우지는 않는다.번호 매기기는 다른 카운터secnumdepth가 정한다.tocdepth는 무엇이 차례에 들어가는지만 정한다.tocdepth는 차례에 들어가는 가장 깊은 단계를 정한다.article에서 절은 1단계, 소절은 2단계이다. 소절은 본문에서 여전히 번호가 붙으며, 차례에서만 사라진다.복습: 구획, 차례와 부록
문제 6
article클래스의 문서에서\appendix명령 뒤에\section을 두 개 썼다. 번호는 어떻게 붙는가?\appendix는 바로 번호 매기기를 바꾸기 위해 있다. 그것이 없으면 부록은 절이 늘어난 것에 지나지 않는다.부록에는 문자로 된 번호가 붙고 차례에도 들어간다.기본 클래스에서 부록의 번호에는 대문자 알파벳을 쓴다.\appendix는 절 번호를 처음부터 다시 매기고 대문자 알파벳으로 바꾼다.report와book에서는 장에 대해 같은 일을 한다.복습: 구획, 차례와 부록
문제 7한 저자가 제2절인
\section{방법}앞의 줄에\label{sec:methods}를 썼다.\ref{sec:methods}는 어떤 번호를 인쇄하는가?소스에서 가깝다는 것만으로는 부족하다. 중요한 것은 순서이다. 앞에 쓴 레이블은 제2절의 번호를 보지 못한다.레이블은 존재하고 기록된다. 두 번째 패스 뒤에는 번호를 인쇄한다. 다만 원한 번호는 아니다.오류는 나지 않는다. 레이블은 제목 뒤에 쓰며, 안에도 앞에도 쓰지 않는다.\label은 뒤에 무엇이 오는지 모른다. 자기보다 앞에 마지막으로 매겨진 번호, 여기서는 제1절의 번호를 간직한다. 그래서\section{…}바로 뒤에 쓴다.복습: 상호 참조
문제 8hyperref 패키지를 불러오면 문서에서 무엇이 바뀌는가?
번호 매기기는 바뀌지 않는다. hyperref는 그것을 링크로 바꾼다.패스는 여전히 필요하다. 링크도 보조 파일의 같은 자료에 기댄다.그 이름은 언어 설정(kotex의 hangul 옵션이나 babel)이 정한다. hyperref는 손대지 않는다.hyperref는 번호도 본문도 바꾸지 않는다. 더하는 것은 이동 수단이다. 그래서 그것이 동작을 바꾸는 거의 모든 패키지 뒤, 프리앰블 끝 가까이에서 불러온다.복습: 상호 참조
문제 9학위 논문의 주 문서에서
\include{chapter1}와\input{chapter1}는 무엇이 다른가?쪽 나눔, 보조 파일, 그리고 일부만 컴파일할 수 있는지가 다르다.\input은 프리앰블에서든 본문에서든 어떤 파일이든 받는다.둘 다 파일을 고치지 않는다. 둘 다 컴파일할 때 파일을 읽는다.\include는 장을 위해 만들어졌다. 쪽을 새로 열고, 부분마다 자기 보조 파일을 두며, 선택을 허용한다.\input은 어떤 조각에도 쓸 수 있고, 문단 안이나 프리앰블에서도 쓸 수 있다.복습: 긴 문서
문제 10학위 논문의 프리앰블에
\includeonly{chapter3}가 있고, 본문은 다섯 장을\include로 포함한다. 논문 전체를 전에 이미 컴파일한 적이 있다면, 이번 컴파일은 무엇을 만드는가?\includeonly는 어떤 장을 조판할지 정한다. 나머지 장은 PDF에 나타나지 않는다.다른\include를 지우면 그렇게 된다.\includeonly를 쓰면 번호가 유지된다.다른 파일들은 제자리에 그대로 있다. 조판되지 않을 뿐이다.LaTeX는 제외된 장마다 그 장의 마지막 컴파일이 남긴 보조 파일을 읽는다. 그래서 번호는 문서 전체의 번호로 남는다.복습: 긴 문서
문제 11프리앰블에
\newcommand{\emph}[1]{\textbf{#1}}가 있다. 어떻게 되는가?그것은\renewcommand가 하는 일이다.\newcommand는 다시 정의하기를 거부한다.한 이름은 한 명령만 가리킨다. 같은 이름의 명령 둘이 함께 있을 수는 없다.정의는 프리앰블에서 실행되며, 거부된 정의는 오류이다.이 보호 장치는 LaTeX나 패키지의 명령을 실수로 바꿔 버리는 일을 막는다. 정말로 다시 정의하려면, 무엇을 잃는지 알고서\renewcommand를 쓴다.복습: 매크로와 자신만의 프리앰블
문제 12프리앰블에
\newcommand{\yang}[2]{#1~#2}가 있을 때\yang{5}{km}는 무엇을 인쇄하는가?#1은 먼저 쓴 인수, 곧 5이며, 정의에서도 먼저 온다.물결표는 예약 문자이다. 정의 안에서 나눌 수 없는 공백으로 작용하며 인쇄되지 않는다.\newcommand는#1부터#9까지, 아홉 개까지의 인수를 받는다.[2]는 인수 두 개를 선언하고,#1과#2가 그것을 차례로 받는다. 수와 단위이며, 물결표로 이어진다. 이 명령은 기능을 가리키고, 물결표를 잊는 일이 없게 해 준다.복습: 매크로와 자신만의 프리앰블
콘텐츠를 불러오는 중…