요약
이 수업은 LaTeX의 첫걸음을 다루는 이 강좌의 첫째 단원을 마무리한다. 조판에서 문서의 디버깅에 이르는 개념과 절차의 사슬을 다시 세우면서, 고리마다 어떤 원리가 쓰이고 그것이 어느 수업에서 세워지는지를 짚는다. 이룬 것을 강좌 계획에 비추어 자리매김하고, 살짝 건드리기만 했을 뿐 다음 단원들로 넘어가는 문제가 무엇인지 밝힌다. 마무리 평가에서는 시작 평가의 기능을 되풀이한다. 그리고 각 수업의 문제보다 어려운 여섯 개의 도전 과제로 끝맺는다. 이 과제들은 여러 수업의 도구를 엮어서, 실패하는 문서를 진단하거나 설명으로부터 문서를 계획하기를 요구한다.
학습 목표
- 단원의 개념과 절차의 순서를 다시 세우고, 각각이 기대는 원리를 밝힌다.
- 원본을 읽는 규칙, 원본의 해부, 로그의 메시지가 서로 어떻게 이어지는지 설명한다.
- 단원이 세운 것과, 예고만 했을 뿐 다음 단원들이 펼칠 것을 구별한다.
- 여러 원인으로 한꺼번에 실패하는 문서를 진단하고, 로그에 따라 고칠 순서를 정한다.
- 문서에 담길 내용에 대한 설명으로부터 그 프리앰블과 본문을 계획한다.
단원에서 이룬 것
이 단원은 LaTeX를 한 번도 써 보지 않은 사람을, 짧은 문서를 스스로 쓰고 컴파일하고 고칠 수 있는 데까지 이끄는 것을 목표로 삼았다. 그 목표는 도입에서부터 밝혀 둔 단 하나의 단서를 빼고 이루어졌다. 그 단서란 컴퓨터에서 파일과 폴더를 다루는 일을 이미 안다고 본 것이다. 이 단서 아래에서, 지나온 길은 네 구간으로 된 하나의 사슬로 읽을 수 있으며, 그 사슬에서 각 개념이나 절차는 앞의 것들에 기댄다.
LaTeX란 무엇인가
LaTeX란 무엇인가 수업은 조판, 곧 글자 하나하나와 줄 하나하나와 쪽 하나하나를 배치하는 결정들의 총체와, 학술적인 글에 고유한 요구에서 출발했다. 거기서 마크업 언어가 알맞다는 결론을 끌어냈다. 저자는 각 요소가 무엇인지를 선언하고, 그것이 어떻게 보일지는 문서 클래스가 정한다. 이것이 내용과 형식의 분리이며, 단원 전체에서 되풀이하여 나타난다. 이어서 세 가지 엔진을 구별하고, Unicode를 읽고 시스템 글꼴을 불러오는 LuaLaTeX를 골랐다. 엔진이 원본을 읽는 세 가지 규칙(이어진 공백은 하나로 치고, 빈 줄은 문단을 끝내고, 퍼센트 기호는 주석을 시작한다)을 정하고, 쓰고 컴파일하고 읽는 순환을, 컴파일할 때마다 남는 로그와 보조 파일과 함께 기술했다.
작업 환경
작업 환경에 관한 수업은 그 기술을 실제 설치로 바꾸었다. 배포판(TeX Live, MiKTeX, MacTeX)과 그 패키지 관리자, LuaLaTeX로 컴파일하고 UTF-8로 저장하며 원본과 PDF를 동기화하도록 설정한 Texmaker, 그리고 프로젝트마다 기본 컴파일러를 바꾸어야 하는 Overleaf이다. 또 프로젝트 하나에 폴더 하나라는 규칙, 저자가 쓰는 것과 컴파일이 다시 만드는 것의 구별, 그리고 PDF가 바뀌지 않을 수 있는 세 가지 원인을 세웠다. PDF를 쓰지 못하게 하는 심각한 오류, 파일을 잠그거나 다시 불러오지 않는 뷰어, 다른 파일의 컴파일이다.
문서의 해부
문서의 해부에 관한 수업은 최소 문서가 조리법처럼 주던 것을 한 조각씩 설명했다. 프리앰블은 설정하고 본문은 조판한다. \begin{document}에 이르면 설정이 닫히기 때문이다. 명령은 제어 단어와 제어 기호로 나뉜다. 제어 단어의 이름은 글자가 아닌 첫 문자에서 끝나고 뒤따르는 공백을 소비하며, 제어 기호는 공백을 소비하지 않는다. 명령은 중괄호 안의 필수 인자와 대괄호 안의 선택 인자를 받고, 어떤 것은 별표가 붙은 형태를 가진다. 선언은 그것을 담은 그룹이 끝날 때까지 유효하고, 그룹인 환경은 연 순서와 반대 순서로 닫아야 한다. 열 개의 예약 문자는 출력되는 대신 무언가를 하며, 저마다 출력하는 방법이 따로 있다. 패키지와 클래스가 그 선택 사항과 함께 구조를 완성한다.
컴파일과 오류 수정
컴파일과 오류 수정에 관한 수업은 앞의 모든 것을 한데 모았다. 엔진은 패스 단위로 일하므로 상호 참조와 차례는 다음 패스에서 완성되며, latexmk가 패스를 스스로 되풀이한다는 것을 설명했다. 오류를 느낌표가 있는 줄, 행 번호, 그리고 읽은 부분과 아직 읽지 않은 부분을 가르는 끊김으로 읽는 법을 가르쳤다. 언제나 고쳐야 하는 오류를 경고와 박스 알림에서 구별했다. 가장 흔한 메시지를 그 원인과 연결했는데, 그 원인은 거의 언제나 원본의 해부를 어긴 것이다. 그리고 전략을 내놓았다. 첫 번째 오류부터 읽고, 원본을 반으로 나누고, 문제를 최소 예제로 줄이고, 보조 파일을 지우고, 메시지로 검색한다.
다음 그림은 네 구간을 하나의 사슬로 모은 것이다. 가운데 열의 각 마디는 개념이나 절차이며, 서로 기대는 순서에 따라 번호가 붙고, 자신이 쓰는 앞의 고리들과 호로 이어진다. 그 둘레에 떠 있는 것이 받침, 곧 사슬이 거듭 의지하는 원리들이다. 각 받침은 자신에게 기대는 고리들과 실선으로, 자신이 세워지는 고리와 점선으로 이어지며, 배우지 않고 전제하는 받침만은 고리 모양으로 그려진다. 받침을 누르면 그것을 쓰는 고리가 모두 강조되고, 각 고리는 그것을 배우는 수업으로 이어진다.
사슬의 받침
- A파일과 폴더. 컴퓨터에서 파일과 폴더를 다루는 일상적인 일. 만들고, 이름 붙이고, 찾고, 복사하고, 확장자로 구별하는 것. 도입에서부터 이미 안다고 본다. 이 단원에서는 증명 없이 받아들인다.
- B내용과 형식. 저자는 각 요소가 무엇인지를 선언하고, 그것이 어떻게 보일지는 문서 클래스와 프리앰블이 정한다. 확립되는 곳: 2. 마크업 언어.
- CUnicode와 글꼴. LuaLaTeX는 UTF-8로 저장된 원본을 Unicode로 읽고 시스템 글꼴을 불러온다. 글꼴에 없는 문자는 컴파일을 멈추지 않지만 PDF에서 빠진다. 확립되는 곳: 3. 엔진과 LuaLaTeX.
- D로그. 컴파일할 때마다 한 일이 오류와 경고와 함께 로그에 기록된다. 무언가 실패했을 때 가장 먼저 읽는 것이 이것이다. 확립되는 곳: 5. 원본, 컴파일, PDF.
- E그룹과 유효 범위. 선언은 그것을 담은 그룹이 끝날 때까지 유효하다. 중괄호와 환경은 그룹을 열며, 그룹은 연 순서와 반대 순서로 닫아야 한다. 확립되는 곳: 12. 그룹과 환경.
- F예약 문자. 열 개의 문자는 출력되는 대신 무언가를 한다. 본문에 그대로 쓰면 오류나 눈에 띄지 않는 효과를 낳는다. 확립되는 곳: 13. 예약 문자.
- G첫 번째 오류. 오류에서 회복하려고 엔진은 추측하며, 그 추측이 새 오류를 낳을 수 있다. 원본과 확실히 대응하는 것은 첫 번째 오류뿐이다. 확립되는 곳: 16. 오류 읽기.
제1구간 LaTeX란 무엇인가
- 조판이 무엇이며 학술적인 글이 왜 그것을 요구하는지 설명한다.
- 마크업 언어로 내용을 형식에서 떼어 놓는다.
- 언어, 문자 체계, 글꼴에 따라 엔진을 고르고 LuaLaTeX를 고르는 근거를 댄다.
- 공백, 문단, 주석의 규칙에 따라 원본이 무엇을 만들어 낼지 예측한다.
조판. 조판한다는 것은 각 글자가 어디에 놓이고, 각 줄이 어디서 끝나고, 각 쪽이 어디서 나뉘는지를 정하는 일이다. 수식, 상호 참조, 각주, 여러 언어를 담은 학술적인 글은 그것을 더 강하게 요구한다.
증명된 수업: LaTeX란 무엇인가.
마크업 언어. TeX 위에 쓰인 매크로 모음인 LaTeX에서, 저자는 일반 텍스트 파일에 내용을 표시하고, 형식은 클래스와 프리앰블에서 나온다.
사용: 1. 조판. 증명된 수업: LaTeX란 무엇인가.
엔진과 LuaLaTeX. pdfLaTeX, XeLaTeX, LuaLaTeX는 같은 LaTeX를 이해하지만, Unicode를 읽고 시스템 글꼴을 불러오는 것은 뒤의 둘뿐이다. 이 강좌는 LuaLaTeX를 쓴다.
사용: 2. 마크업 언어. 증명된 수업: LaTeX란 무엇인가.
공백, 문단, 주석. 여러 공백은 하나로, 줄바꿈은 공백 하나로 친다. 빈 줄은 문단을 끝낸다. 퍼센트 기호는 줄의 나머지를 줄바꿈과 함께 주석으로 만든다.
사용: 2. 마크업 언어. 증명된 수업: LaTeX란 무엇인가.
원본, 컴파일, PDF. 원본을 쓰고, 엔진이 그것을 컴파일하고, PDF를 읽는다. 그 곁에 로그와 보조 파일이 남는다.
사용: 3. 엔진과 LuaLaTeX. 받침: A (파일과 폴더). 증명된 수업: LaTeX란 무엇인가.
제2구간 작업 환경
- 시스템, 용량, 연결 상태에 따라 배포판과 설치 방식을 고른다.
- Texmaker와 Overleaf를 LuaLaTeX로 컴파일하도록 설정한다.
- 각 프로젝트를 자기 폴더에 정리하고 어떤 파일을 보존할지 정한다.
- 고친 뒤에도 PDF가 바뀌지 않을 수 있는 이유를 설명한다.
배포판과 패키지. 배포판은 엔진, 패키지, 글꼴, 그리고 빠진 것을 설치하는 관리자를 한데 모은 것이다. TeX Live, MiKTeX, MacTeX가 있으며 전체 설치와 기본 설치가 있다.
사용: 3. 엔진과 LuaLaTeX. 받침: A (파일과 폴더). 증명된 수업: 작업 환경.
Texmaker와 Overleaf. Texmaker는 LuaLaTeX로 컴파일하고, UTF-8로 저장하고, 원본과 PDF를 동기화하도록 설정한다. Overleaf에서는 프로젝트마다 LuaLaTeX를 고른다.
사용: 5. 원본, 컴파일, PDF, 6. 배포판과 패키지. 받침: C (Unicode와 글꼴). 증명된 수업: 작업 환경.
폴더와 보조 파일. 문서마다 폴더를 둔다. 저자가 쓰거나 마련한 것은 보존하고, 컴파일이 다시 만드는 보조 파일은 지워도 된다.
사용: 5. 원본, 컴파일, PDF, 7. Texmaker와 Overleaf. 받침: A (파일과 폴더). 증명된 수업: 작업 환경.
바뀌지 않는 PDF. PDF가 바뀌지 않는다면, 컴파일이 그것을 쓰지 않았거나, 뷰어가 잠그거나 다시 불러오지 않았거나, 다른 파일을 컴파일한 것이다. 로그와 PDF의 시각이 이를 가린다.
사용: 8. 폴더와 보조 파일, 7. Texmaker와 Overleaf. 받침: D (로그). 증명된 수업: 작업 환경.
제3구간 문서의 해부
- 프리앰블과 본문을 구별하고 각 명령을 어디에 둘지 정한다.
- 명령의 부분들을 알아보고 그 이름이 어디서 끝나는지 예측한다.
- 선언의 유효 범위를 예측하고 환경을 올바르게 중첩한다.
- 열 개의 예약 문자를 출력하고, 보호하지 않으면 그것들이 무엇을 하는지 설명한다.
프리앰블과 본문. 프리앰블은 패키지를 불러오고 아무것도 조판하지 않은 채 결정을 내린다. 본문은 조판이 이루어지는 유일한 곳이다. 정의하거나 저장하기만 하는 것은 어디에 두어도 되지만 프리앰블에 두는 것이 좋다.
사용: 5. 원본, 컴파일, PDF. 받침: B (내용과 형식). 증명된 수업: 문서의 해부.
명령. 제어 단어는 글자가 아닌 첫 문자에서 끝나고 뒤따르는 공백을 소비한다. 제어 기호는 문자 하나뿐이며 공백을 소비하지 않는다. 인자는 중괄호나 대괄호 안에 쓴다.
사용: 4. 공백, 문단, 주석. 증명된 수업: 문서의 해부.
그룹과 환경. 선언은 자기 그룹이 끝날 때까지 유효하다. 환경은 그룹이며, 다른 환경 안에서 연 것은 그보다 먼저 닫힌다.
예약 문자. 역슬래시, 중괄호, 퍼센트, 달러, 앰퍼샌드, 샵, 밑줄, 캐럿, 물결표는 출력되는 대신 무언가를 하며, 저마다 고유한 방법으로 출력된다.
사용: 11. 명령, 4. 공백, 문단, 주석. 증명된 수업: 문서의 해부.
패키지와 클래스. 패키지는 LaTeX가 할 수 있는 일을 넓히며 프리앰블에서만 불러온다. 클래스는 그 선택 사항과 함께 문서의 전체 모양을 정한다.
사용: 10. 프리앰블과 본문, 6. 배포판과 패키지. 받침: B (내용과 형식). 증명된 수업: 문서의 해부.
제4구간 컴파일과 오류 수정
- 상호 참조와 차례에 패스가 한 번 더 필요한 이유를 설명하고, latexmk로 컴파일한다.
- 로그의 오류를 읽는다. 그 메시지, 그 행, 그리고 발견된 지점이다.
- 가장 흔한 오류를 그 그럴듯한 원인과 연결한다.
- 차례를 갖춘 전략으로 오류의 진짜 원인을 찾아내고, 어떤 경고에 대처할지 판단한다.
패스와 latexmk. 패스마다 엔진은 다음 패스가 쓸 번호와 제목을 보조 파일에 적는다. latexmk는 아무것도 바뀌지 않을 때까지 패스를 되풀이한다.
사용: 8. 폴더와 보조 파일. 받침: D (로그). 증명된 수업: 컴파일과 오류 수정.
오류 읽기. 오류는 느낌표가 있는 줄로 알아본다. l.로 시작하는 줄은 원본의 행 번호를 알려 주며, 그 행은 읽은 부분과 아직 읽지 않은 부분으로 나뉘어 있다.
사용: 9. 바뀌지 않는 PDF, 11. 명령. 받침: D (로그). 증명된 수업: 컴파일과 오류 수정.
흔한 오류. 정의되지 않은 명령이나 환경, 열리지 않은 수식, 짝이 맞지 않는 중괄호, 없는 파일, 프리앰블 안의 텍스트. 각 메시지는 원본의 해부에 관한 어떤 규칙을 어겼는지를 드러낸다.
사용: 16. 오류 읽기, 10. 프리앰블과 본문, 12. 그룹과 환경, 13. 예약 문자, 14. 패키지와 클래스. 받침: E (그룹과 유효 범위), F (예약 문자). 증명된 수업: 컴파일과 오류 수정.
디버깅 전략. 첫 번째 오류를 읽고, 그룹이나 환경을 끊지 않으면서 본문을 반으로 나누고, 최소 예제로 줄이고, 보조 파일을 지우고, 메시지로 검색한다.
사용: 17. 흔한 오류, 4. 공백, 문단, 주석, 8. 폴더와 보조 파일. 받침: D (로그), E (그룹과 유효 범위), G (첫 번째 오류). 증명된 수업: 컴파일과 오류 수정.
경고. 경고는 컴파일을 멈추지 않지만, 어떤 것은 조치를 요구한다. 정의되지 않은 참조, 다시 컴파일하라는 요청, 튀어나온 줄, 빠진 문자이다.
사용: 15. 패스와 latexmk, 16. 오류 읽기. 받침: C (Unicode와 글꼴), D (로그). 증명된 수업: 컴파일과 오류 수정.
텍스트를 향하여. 사슬은 최소 문서로는 더 이상 충분하지 않은 곳에서 멈춘다. 언어, 문자 체계, 각주, 인용을 지닌 텍스트 자체가 다음 단원의 대상이다.
콘텐츠를 불러오는 중…