본문 바로가기
Topos Uranos

문서의 구조: 종합과 도전 과제

요약

이 수업은 문서의 구조를 다루는 이 강좌의 셋째 단원을 마무리한다. 문서 클래스에서 자신만의 프리앰블에 이르는 결정과 메커니즘의 사슬을 다시 세우면서, 고리마다 어떤 원리가 쓰이고 그것이 어느 수업에서 세워지는지를 짚는다. 이룬 것을 강좌 계획에 비추어 자리매김하고, 예고만 했을 뿐 다음 단원들로 넘어가는 문제가 무엇인지 밝힌다. 마무리 평가에서는 시작 평가의 기능을 되풀이한다. 그리고 각 수업의 문제보다 어려운 여섯 개의 도전 과제로 끝맺는다. 이 과제들은 여러 수업을 엮어서, 규정에 맞추어 학위 논문을 설계하고, 한 권의 책의 번호와 참조를 예측하고, 여러 파일로 나뉜 문서 가운데 실패하거나 거짓을 말하는 문서를 진단하기를 요구한다.

학습 목표

  1. 단원의 결정과 메커니즘의 순서를 다시 세우고, 각각이 기대는 원리를 밝힌다.
  2. 번호, 차례, 참조, 부분 컴파일이 보조 파일에 어떻게 의존하는지 설명한다.
  3. 단원이 세운 것과, 예고만 했을 뿐 다음 단원들이 펼칠 것을 구별한다.
  4. 여러 파일로 나뉜 문서 가운데 실패하는 문서나 거짓 번호를 단 채 컴파일되는 문서를 진단하고, 고칠 순서를 정한다.
  5. 학위 논문이 지켜야 할 규정에 맞추어 그 클래스, 쪽, 구성, 참조, 파일을 설계한다.

단원에서 이룬 것

이 단원은 문서에, 어떤 변경을 거쳐도 번호와 차례와 참조가 참으로 남는 구조를 주는 것을 목표로 삼았다. 이 목표는 도입이 앞 단원들에서 이미 아는 것으로 선언한 것에 기대어 이루어졌다. 컴파일의 패스, 프리앰블과 본문의 구분, 그리고 논리적 마크업이다. 그러므로 지나온 길은 다섯 구간으로 이루어진 하나의 사슬로 읽을 수 있다.

문서 클래스와 쪽

문서 클래스와 쪽 수업은 어떤 구획이 있는지, \maketitle이 무엇을 하는지, 초록이 있는지, 짝수 쪽과 홀수 쪽을 구별하는지를 클래스가 정한다는 것을 세웠다. 이로부터 구조와 인쇄 방식에 따라 article, report, book 가운데 하나를 고르는 기준을 이끌어 냈고, KOMA-Script의 클래스를, 이 예제들의 TeX Live 판에서 스페인어와 함께 쓸 때 필요한 옵션 es-noquoting과 함께 소개했다. 클래스의 옵션을 차례로 살피고, 여백이 왜 줄 길이에 달려 있는지와 geometry로 그것을 어떻게 정하는지를 설명했으며, 클래스의 몇몇 명령이 스스로 강요하는 쪽 스타일로 끝맺었다.

구획, 차례와 부록

구획, 차례와 부록 수업은 제목 정보와 요약을 조판하고, 구획의 단계를 정리하고, 서로 독립된 두 카운터 secnumdepth와 tocdepth가 무엇에 번호를 붙이고 무엇을 차례에 올릴지를 정한다는 것을 세웠다. 차례는 앞선 패스가 적어 둔 것으로 조판되며 낡아도 경고하지 않는다는 것, \appendix는 그 뒤에 오는 것의 번호 매기는 방식을 바꾼다는 것, 그리고 책에는 두 가지 쪽 번호를 가진 세 부분이 있으며 그 순서가 아무래도 좋은 것이 아니라는 것을 설명했다.

상호 참조

상호 참조 수업은 모든 참조가 의존하는 원리를 세웠다. 레이블은 자신보다 앞에서, 자신이 놓인 환경 안에서 마지막으로 매겨진 번호를 기록한다. 이로부터 각 요소에서 레이블을 어디에 두는지, 그림의 캡션보다 앞에 둔 레이블이 왜 절을 가리키는지, 번호 없는 절에는 왜 참조할 자기 번호가 없는지를 이끌어 냈다. 변경한 뒤 한 번만 컴파일하면 이전 번호가 아주 그럴듯한 모습으로 인쇄된다는 것을 보였고, 패키지 가운데 마지막에 불러와야 하는 hyperref와, 그 뒤에 오는 cleveref를 소개했다. cleveref는 \crefformat이나 \crefname이 한국어 이름을 정해 주기 전까지는 영어 이름을 쓴다.

긴 문서

긴 문서 수업은 하나의 문서를 주 파일과 프리앰블 없는 조각들로 나누었다. 글자 그대로의 치환인 \input과, 쪽을 새로 열고 자기 보조 파일을 쓰며 \includeonly를 받아들이는 \include를 구별했다. \includeonly의 번호는 앞선 전체 컴파일의 보조 파일에 의존한다. 경로는 주 파일의 폴더에서부터 쓴다는 것, Texmaker에서는 마스터 문서를 지정한다는 것을 세웠고, 나뉜 문서에 고유한 오류들을 살폈다. 그 가운데 둘은 소리가 없다. \include가 찾지 못하는 조각과, 프리앰블을 가진 조각이다. 후자의 \end{document}는 학위 논문을 거기서 끝내 버린다.

매크로와 자신만의 프리앰블

매크로와 자신만의 프리앰블 수업은 논리적 마크업을 방법으로 바꾸었다. 인자와 선택 인자를 받는 \newcommand, 이미 쓰이는 이름을 다시 정의하지 못하게 막는 보호 장치, 인자 없는 명령 뒤에서 사라지는 공백, \NewDocumentCommand, 인자가 시작 부분에만 존재하는 자신만의 환경, 그리고 파일이나 패키지로 옮긴 프리앰블이다. 이 프리앰블은 클래스, 언어, hyperref의 자리를 강요해서는 안 된다.

다음 그림은 다섯 구간을 하나의 사슬로 모은 것이다. 가운데 열의 각 마디는 결정이나 메커니즘이며, 서로 기대는 순서에 따라 번호가 붙고, 자신이 쓰는 앞의 고리들과 호로 이어진다. 그 둘레에 떠 있는 것이 받침, 곧 사슬이 거듭 의지하는 원리들이다. 각 받침은 자신에게 기대는 고리들과 실선으로, 자신이 세워지는 고리와 점선으로 이어지며, 앞 단원들에서 세워진 받침은 고리 모양으로 그려진다. 받침을 누르면 그것을 쓰는 고리가 모두 강조되고, 각 고리는 그것을 배우는 수업으로 이어진다.

사슬의 받침

  • A패스. 엔진은 한 패스에서 번호, 제목, 쪽을 보조 파일에 적어 두고, 다음 패스에서 그것을 쓴다. 첫째 단원에서 세워진다. 이 단원에서는 증명 없이 받아들인다.
  • B프리앰블과 본문. 프리앰블은 설정하고 패키지를 불러오며, 본문은 조판한다. 정의하거나 저장하기만 하는 것은 어느 쪽에 두어도 된다. 첫째 단원에서 세워진다. 이 단원에서는 증명 없이 받아들인다.
  • C내용과 형식. 저자는 각각이 무엇인지를 선언하고, 다른 곳에서 내린 결정이 그것이 어떻게 보일지를 정한다. 앞 단원들에서 세워진다. 이 단원에서는 증명 없이 받아들인다.
  • D클래스가 정한다. 문서 클래스는 어떤 구획이 있는지, 제목이 무엇을 조판하는지, 초록이 있는지, 쪽이 어떻게 나뉘는지, 그 명령들이 어떤 스타일을 강요하는지를 정한다. 확립되는 곳: 1. 세 가지 표준 클래스.
  • E레이블이 기록하는 것. 레이블은 자신보다 앞에서, 자신이 놓인 환경 안에서 마지막으로 매겨진 번호를 기록한다. 무엇에 붙어 있는지는 모른다. 확립되는 곳: 11. 레이블과 참조.
  • F불러오는 순서. 패키지는 읽힌 순서대로 불러와지며, 뒤에 온 것이 앞의 것이 한 일을 되돌릴 수 있다. hyperref는 마지막에, cleveref는 그 뒤에 둔다. 확립되는 곳: 13. 링크.
  • G주 파일. 컴파일하는 것은 언제나 주 파일이다. 조각들은 그 본문의 일부로서 프리앰블이 없으며, 그 경로는 주 파일의 폴더에서부터 쓴다. 확립되는 곳: 16. include 명령.
  1. 제1구간 문서 클래스와 쪽

    • 문서의 구조와 인쇄 방식에 따라 클래스를 고른다.
    • 클래스의 옵션을 선언하고 그 효과를 예측한다.
    • 줄을 지나치게 늘이지 않고 geometry로 여백을 정한다.
    • 쪽 스타일, 머리말, 꼬리말을 예측하고 바꾼다.
    1. 세 가지 표준 클래스. article에는 장이 없다. report에는 장이 있으며, 제목과 초록이 각각 별도의 쪽에 놓인다. book은 양면으로 인쇄하며 초록이 없다.

      받침: B (프리앰블과 본문). 증명된 수업: 문서 클래스와 쪽.

    2. KOMA-Script. scrartcl, scrreprt, scrbook은 표준 클래스에 유럽식 결정을 더한 것에 해당한다. 스페인어 babel과 함께 쓰면 이 판에서는 옵션 es-noquoting이 필요하다.

      사용: 1. 세 가지 표준 클래스. 받침: C (내용과 형식). 증명된 수업: 문서 클래스와 쪽.

    3. 클래스의 옵션. 용지, 글자 크기, 단면 또는 양면, 제목 쪽, 장의 시작, 초안 모드는 첫 줄에서 선언한다.

      사용: 1. 세 가지 표준 클래스. 받침: D (클래스가 정한다). 증명된 수업: 문서 클래스와 쪽.

    4. 여백. geometry는 몇 가지 치수로 쪽을 계산한다. 본문 상자의 너비가 줄 길이를 정하며, 바로 그것을 독자가 감당한다.

      사용: 3. 클래스의 옵션. 받침: B (프리앰블과 본문). 증명된 수업: 문서 클래스와 쪽.

    5. 쪽 스타일. 스타일은 머리말과 꼬리말을 정한다. \maketitle과 \chapter는 자기 쪽에 plain 스타일을 강요하며, fancyhdr나 scrlayer-scrpage는 고유한 스타일을 짠다.

      사용: 1. 세 가지 표준 클래스, 4. 여백. 받침: D (클래스가 정한다). 증명된 수업: 문서 클래스와 쪽.

  2. 제2구간 구획, 차례와 부록

    • 클래스에 따라 제목과 요약을 조판한다.
    • 구획의 단계를 고르고 번호와 차례를 예측한다.
    • 어느 패스에 의존하는지 알고서 차례와 목록을 만든다.
    • 부록과 책의 부분들을 배치한다.
    1. 제목과 요약. \title, \author, \date는 저장하고 \maketitle이 조판한다. abstract 환경은 article과 report에 있고 book에는 없다.

      사용: 1. 세 가지 표준 클래스. 받침: D (클래스가 정한다), B (프리앰블과 본문). 증명된 수업: 구획, 차례와 부록.

    2. 구획의 단계. 편에서 소단락까지 일곱 단계가 있다. 장은 report와 book에만 있으며, 위계는 제목의 크기로 고르는 것이 아니다.

      사용: 1. 세 가지 표준 클래스. 받침: D (클래스가 정한다). 증명된 수업: 구획, 차례와 부록.

    3. 번호와 차례. secnumdepth는 어느 단계에 번호를 붙일지를, tocdepth는 어느 단계를 차례에 올릴지를 정한다. 별표 형태는 번호를 붙이지도 소비하지도 않는다.

      사용: 7. 구획의 단계. 받침: C (내용과 형식). 증명된 수업: 구획, 차례와 부록.

    4. 차례와 목록. 차례는 앞선 패스가 .toc 파일에 적어 둔 것을 조판하며, 낡아도 경고하지 않는다.

      사용: 7. 구획의 단계, 8. 번호와 차례. 받침: A (패스). 증명된 수업: 구획, 차례와 부록.

    5. 부록과 책의 부분. \appendix는 그 뒤에 오는 것의 번호 매기는 방식을 바꾼다. book에서는 앞부분, 본문, 뒷부분이 두 가지 쪽 번호를 가지며, 부록은 \backmatter 앞에 둔다.

      사용: 7. 구획의 단계, 5. 쪽 스타일. 받침: D (클래스가 정한다). 증명된 수업: 구획, 차례와 부록.

  3. 제3구간 상호 참조

    • 레이블을 두고 이름을 붙인다.
    • 한 번 또는 두 번의 패스 뒤에 참조가 무엇을 인쇄할지 내다본다.
    • hyperref와 cleveref를 제 순서로 불러온다.
    • 이름과 번호로, 또는 제목으로 참조한다.
    1. 레이블과 참조. \label은 자리를 표시하고, \ref와 \pageref는 그 번호와 쪽을 쓴다. 두 번의 패스가 필요하다.

      사용: 7. 구획의 단계. 받침: A (패스). 증명된 수업: 상호 참조.

    2. 레이블을 두는 자리. 번호를 매기는 명령 뒤, 같은 환경 안에 둔다. \section 뒤, \caption 뒤이다. 무엇을 가리키는지 말해 주는 접두사를 붙인다.

      사용: 11. 레이블과 참조. 받침: E (레이블이 기록하는 것). 증명된 수업: 상호 참조.

    3. 링크. hyperref는 참조, 차례, 각주를 링크로, 절을 책갈피로 바꾸며, 패키지 가운데 마지막에 불러온다.

      사용: 11. 레이블과 참조, 9. 차례와 목록. 받침: B (프리앰블과 본문). 증명된 수업: 상호 참조.

    4. 이름이 붙은 참조. cleveref는 이름과 번호를 쓴다. 한국어 이름이 없으면 영어 이름(“section”)을 쓰며, 한국어 이름은 \crefformat이나 \crefname으로 정한다. nameref는 제목으로 참조한다.

      사용: 13. 링크, 12. 레이블을 두는 자리. 받침: E (레이블이 기록하는 것), F (불러오는 순서). 증명된 수업: 상호 참조.

  4. 제4구간 긴 문서

    • 조각마다 \input과 \include 가운데 하나를 고른다.
    • \includeonly가 무엇을 유지하는지 예측한다.
    • 폴더를 정리하고 마스터 문서를 지정한다.
    • 나뉜 문서의 시끄러운 오류와 조용한 오류를 알아본다.
    1. input 명령. \input은 파일의 내용이 그 자리에 쓰여 있는 것처럼 끼워 넣으며, 쪽을 나누지도 보조 파일을 만들지도 않는다.

      받침: B (프리앰블과 본문). 증명된 수업: 긴 문서.

    2. include 명령. \include는 앞뒤로 쪽을 새로 열고, 조각마다 자기 보조 파일을 쓰며, 중첩할 수 없다.

      사용: 15. input 명령, 7. 구획의 단계. 받침: A (패스). 증명된 수업: 긴 문서.

    3. 부분 컴파일. \includeonly는 고른 조각만 조판하고 나머지는 그 보조 파일로 번호를 매긴다. 그 보조 파일은 조각의 마지막 변경 뒤에 한 전체 컴파일에서 나온 것이어야 한다.

      사용: 16. include 명령, 11. 레이블과 참조. 받침: A (패스). 증명된 수업: 긴 문서.

    4. 폴더와 마스터 문서. 주 파일은 맨 위 폴더에, 조각은 하위 폴더에 두고, 경로는 주 파일에서부터 쓰며, 이름은 단순하게 하고, Texmaker에서 주 파일을 마스터 문서로 지정한다.

      사용: 16. include 명령. 받침: G (주 파일). 증명된 수업: 긴 문서.

    5. 나뉜 문서의 오류. 파일이 없는 \input은 컴파일을 멈춘다. 파일이 없는 \include는 “No file”이라고 적을 뿐이다. 프리앰블을 가진 조각은 자기 \end{document}에서 학위 논문을 끝낸다.

      사용: 16. include 명령, 18. 폴더와 마스터 문서. 받침: G (주 파일), B (프리앰블과 본문). 증명된 수업: 긴 문서.

  5. 제5구간 매크로와 자신만의 프리앰블

    • 인자와 선택 인자 하나를 받는 명령을 정의한다.
    • 정의, 재정의, 조건부 정의를 구별하고, 사라지는 공백을 피한다.
    • 자신만의 환경을 정의한다.
    • 프리앰블을 파일이나 패키지로 모은다.
    1. 자신만의 명령. \newcommand는 인자를 아홉 개까지 받는 명령을 정의하며, 첫 인자를 기본값이 있는 선택 인자로 만들 수 있다. 되풀이되는 기능에 이름을 붙인다.

      받침: C (내용과 형식). 증명된 수업: 매크로와 자신만의 프리앰블.

    2. 이미 쓰이는 이름과 공백. \newcommand는 이미 있는 이름을, \renewcommand는 없는 이름을 거부한다. 인자 없는 명령은 뒤따르는 공백을 삼킨다.

      사용: 20. 자신만의 명령. 받침: B (프리앰블과 본문). 증명된 수업: 매크로와 자신만의 프리앰블.

    3. 자신만의 환경. \newenvironment는 시작과 끝을 정의한다. 그 인자는 시작 부분에만 존재하며, \NewDocumentEnvironment는 끝 부분에서도 인자를 받는다.

      사용: 20. 자신만의 명령. 받침: C (내용과 형식). 증명된 수업: 매크로와 자신만의 프리앰블.

    4. 자신만의 프리앰블. 프리앰블은 \input으로 읽는 파일이나 .sty 패키지로 옮긴다. 패키지는 클래스, 언어, hyperref의 자리를 강요하지 않는다.

      사용: 20. 자신만의 명령, 21. 이미 쓰이는 이름과 공백, 15. input 명령, 13. 링크. 받침: F (불러오는 순서), C (내용과 형식). 증명된 수업: 매크로와 자신만의 프리앰블.

수학을 향하여. 사슬은 구조가 완성되어 채우는 일만 남은 곳에서 멈춘다. 번호 붙은 수식과 정리는 이 단원의 레이블로 참조될 것이며, 다음 단원의 주제이다.