Troff를 사용하여 Linux에서 PDF 문서 형식 지정하는 방법

Troff는 Linux 시스템을 위한 최소하지만 강력한 문서 텍스트 프로세서입니다. 명령줄에서 소스 파일을 컴파일하여 인쇄 준비가 완료된 문서를 쉽게 생성할 수 있습니다. LaTeX와 달리 Troff는 매우 가벼우며 대부분의 Linux 시스템에 미리 설치되어 있습니다. 이 튜토리얼에서는 Ubuntu에서 PDF 문서를 형식 지정하는 방법을 보여줍니다.
목차
- Troff란 무엇이며 왜 사용해야 하는가
- Troff 설치하기
- 첫 번째 Troff 문서 만들기
- Troff 형식 이해하기
- 굵게, 기울임 및 밑줄 텍스트 만들기
- 새 문서 섹션 만들기
- Troff에서 목록 만들기
- Troff에서 전처리기를 사용하여 표 만들기
- 자주 묻는 질문
Troff란 무엇이며 왜 사용해야 하는가
기본적으로 Troff는 코드와 같은 스크립트를 인쇄 가능한 문서로 변환하는 텍스트 처리 프로그램입니다. 워드 프로세서와 달리 Troff는 “WYSIWYG” 패러다임에 의존하지 않습니다. 대신, 형식을 처리하기 위해 특정 유형의 코드를 사용해야 합니다.

이 접근 방식의 가장 큰 장점 중 하나는 단순성입니다. Troff의 기본 설치에는 문서를 생성하는 데 필요한 모든 것이 포함되어 있습니다. 또한 그래픽 사용자 인터페이스가 없기 때문에 SSH를 통해서도 문서를 생성할 수 있습니다.

팁: Linux에서 SSH를 통해 GUI 애플리케이션을 포워딩하는 방법을 배우세요.
Troff 설치하기
Troff는 대부분의 Linux 배포판에 기본적으로 번들로 제공됩니다. 시스템에 Troff가 있는지 확인하려면 -h 플래그를 실행하면 됩니다. 이 명령은 Troff 설치가 수용하는 모든 플래그의 간단한 목록을 표시합니다.
troff -h
일부 배포판에서는 Troff를 기본적으로 번들로 제공하지 않는 경우가 있습니다. 그런 경우 “groff” 패키지를 찾아 설치할 수 있습니다.

이것은 GNU 프로젝트에 의해 Troff 및 Nroff 프로그램을 재구현한 것으로, 여러 가지 새로운 현대적 기능이 포함되어 있습니다.
Ubuntu에서 groff를 설치하려면 다음 명령을 사용하세요:
sudo apt install groff
첫 번째 Troff 문서 만들기
소스 코드와 유사하게, 모든 Troff 문서는 문서를 생성하는 방법에 대한 지침을 포함하는 텍스트 파일입니다. 여기에는 페이지 및 여백 너비, 문자 및 페이지 간격이 포함됩니다.

이러한 수준의 제어를 통해 프로그램을 조작하여 모든 종류의 문서를 생성할 수 있습니다. 이를 단순화하기 위해 Troff의 개발자는 이러한 명령을 더 간단한 구문으로 압축하는 “매크로”를 만들었습니다.

Troff에서 가장 일반적으로 사용할 매크로 중 하나는 “ms”입니다. 이는 기사 스타일의 문서를 생성합니다. touch 명령을 사용하여 ms 문서를 생성할 수 있습니다:
touch my-first-document.ms모든 Troff 문서는 텍스트이므로 텍스트 편집기를 사용하여 문서를 열 수 있습니다. 제 경우에는 vim을 사용하고 있습니다. 또는 Linux용 텍스트 편집기를 사용할 수 있습니다.
vim my-first-document.ms
Troff 형식 이해하기
모든 Troff 문서는 유사한 구조를 따릅니다. 형식 지정하려는 내용에서 모든 형식 지정 명령은 별도의 줄에 있어야 합니다. 따라서 일반적인 Troff 문서는 다음과 같은 형태를 가집니다:
.COMMAND1
This is a piece of content in a Troff document.
.COMMAND2
This is a different piece of content in a Troff document.ms에서 사용할 두 가지 기본 명령은 .TL과 .PP입니다. 전자는 텍스트를 제목으로 변환하고 문서에서 중앙에 배치하며, 후자는 텍스트를 단락 스타일로 형식 지정합니다.
예를 들어, 다음 발췌는 .TL과 .PP 명령을 모두 사용합니다:
.TL
My First Troff Document
.PP
This is content that I want to look like a paragraph in my final document. It is not a very long content but it is my first Troff document and it is something that I am proud of. It is about three sentences long and it should wrap around the document properly.
여기서 파일을 Troff 프로그램에 전달하여 문서를 생성합니다.
groff -ms-Tpdf ./my-first-document.ms > output.pdf
팁: 더 간단한 것을 선호한다면 Google Docs에서 MLA 형식으로 작성하는 방법을 배우세요.
굵게, 기울임 및 밑줄 텍스트 만들기
일반 워드 프로세서와 마찬가지로 대부분의 Troff 매크로는 문서를 사용자 정의하기 위한 여러 스타일 명령을 제공합니다. ms의 경우, 이러한 명령은 .B, .I, .UL 및 .BX입니다.
.B명령은 텍스트를 굵게 변경합니다..I명령은 텍스트를 기울임으로 변경합니다..UL및.BX는 각각 텍스트에 밑줄과 상자를 그리는 명령입니다.
위의 명령과 유사하게, 문서에서 이러한 명령을 사용할 때는 각 스타일을 별도의 줄에 분리해야 합니다:
.TL
My First Troff Document
.PP
This is
.B
content
.R
that I want to look like a paragraph in my final document. [...]이 예제에서는 “content”라는 단어 앞에 새 줄을 만들고 .B 명령을 추가하여 굵게 변경한 다음, 새 줄을 만들고 .R 명령을 추가했습니다. 이렇게 하면 Troff가 이전 스타일로 돌아갑니다.

스타일을 변경할 때 항상 .R 명령을 추가해야 한다는 점에 유의하는 것이 중요합니다. 예를 들어, 다음 발췌는 Troff가 그 뒤에 .R을 보지 못했기 때문에 .I 명령을 종료하지 않습니다:
.TL
My First Troff Document
.PP
This is
.I
content
that I want to look like a paragraph in my final document. [...]
새 문서 섹션 만들기
LaTeX와 유사하게, Troff는 섹션 및 계층 감지를 지원하므로 편집할 때 각 헤더의 수준을 정렬하고 일치시킬 필요가 없습니다.
문서에 새 섹션을 만들려면 .NH 명령 뒤에 헤딩의 이름을 사용하세요.
.TL
My First Troff Document
.NH
My First Heading
.PP
This is content that I want to look like a paragraph in my final document.
기본적으로 모든 Troff 헤더는 프로그램이 최종 문서에서 내용을 구조화하고 표시하는 방식을 결정하는 수준 값을 가지고 있습니다. 이를 알고 있으면 이 값을 변경하여 헤딩의 수준을 조정할 수 있습니다.
예를 들어, 다음은 부모 바로 아래에 수준 2 헤딩을 생성합니다:
.TL
My First Troff Document
.NH
My First Heading
.NH 2
My First Subheading
.PP
This is content that I want to look like a paragraph in my final document.
정상 번호 매기기 헤더 외에도 Troff는 여전히 문서의 수준 계층을 따르는 빈 헤더를 생성할 수 있습니다.
이를 위해 .NH를 .SH 명령으로 바꾸세요:
.TL
My First Troff Document
.SH
My First Heading
.SH 2
My First Subheading
.PP
This is content that I want to look like a paragraph in my final document.
팁: Google Docs에서 여백을 변경하는 방법을 알아보세요.
Troff에서 목록 만들기
Troff의 단순성 덕분에 필요에 따라 동작을 조정할 수 있습니다. 예를 들어, 목록은 Troff나 ms 매크로에 기본적으로 제공되지 않습니다. 그럼에도 불구하고 몇 가지 ms 명령을 결합하여 목록을 만들 수 있습니다.
Troff의 모든 목록은 세 부분으로 구성됩니다: 들여쓰기, 글머리 기호 및 내용. 들여쓰기를 만들려면 .RS 및 .RE 명령을 사용하세요. 이는 그 안의 모든 텍스트의 현재 들여쓰기 수준을 네 칸 이동합니다.
.RS
This is my first item.
.RE
다음으로, 목록 항목의 글머리 기호를 만들기 위해 .IP를 사용하세요. 이는 텍스트의 왼쪽 여백을 특정 너비로 고정하는 “들여쓰기 단락” 명령입니다.
.IP 명령은 사용자 정의 글머리 기호와 글머리 기호와 텍스트 사이의 간격을 설정할 수 있습니다. 이 경우, 글머리 기호를 “[1]”로 설정하고 네 칸을 줄 것입니다.
.RS
.IP [1]4
This is my first item.
.RE
이제 추가 목록 항목을 만들기 위해 .IP 명령을 복사하여 붙여넣습니다.
.RS
.IP [1]4
This is my first item.
.IP [2]4
This is my second item.
.IP [3]4
This is my third item.
.RE
마지막으로, 사용자 정의 매크로를 만들어 이 과정을 자동화합니다. 예를 들어, 다음 발췌는 제 .IP 명령을 .QW에 바인딩합니다:
.de QW
.IP [-]4
..
.RS
.QW
This is my first item.
.QW
This is my second item.
.QW
This is my third item.
.RE
Troff에서 전처리기를 사용하여 표 만들기
Troff의 한 가지 특이점은 대부분의 기능이 “전처리기”로 존재한다는 것입니다. 대부분의 경우, 이러한 전처리기는 프로그램 외부의 바이너리로, “전처리기 컨테이너 스크립트”를 생성하고 이를 저수준 Troff 코드로 변환하여 작동합니다.

Tbl은 Troff 전처리기의 좋은 예입니다. 이는 문서에서 표를 관리하는 프로그램입니다. 기본 Tbl 컨테이너는 다음과 같은 형태입니다:
.TS
allbox ;
c c c.
item1 item2 item3
item4 item5 item6
.TE .TS및.TE명령은 Tbl에 이 환경을 읽을 수 있음을 알려줍니다.- 두 번째 줄은 프로그램이 이 표를 형식 지정하는 방법을 알려줍니다.
- 세 번째 줄은 열의 수와 정렬을 지정하는 공백으로 구분된 필드입니다.
- 네 번째 및 다섯 번째 줄은 표의 내용을 포함하는 탭으로 구분된 필드입니다.

Tbl로 문서를 컴파일하는 것은 일반 Troff 파일과 약간 다릅니다. 먼저 파일을 로드합니다:
tbl my-first-document.ms > preprocessed.ms다음으로, 프로그램의 출력을 Troff에 전달합니다:
groff -ms-Tpdf ./preprocessed.ms > output.pdf마지막으로, UNIX 파이프를 사용하여 이 과정을 자동화합니다:
tbl my-first-document.ms | groff -ms-Tpdf> output.pdf
알아두면 좋은 점: sed로 UNIX 파이프 및 파일 리디렉션에 대해 자세히 알아보세요.
자주 묻는 질문
Windows에서 Troff를 사용할 수 있나요?
기본적으로 Troff나 Groff는 Windows에 공식적으로 포팅되지 않았습니다. 그럼에도 불구하고 Windows Subsystem for Linux를 설치하여 Groff와 다른 GNU 유틸리티를 사용할 수 있습니다.
Troff에 참고 문헌 추적 기능이 있나요?
예. Refer는 외부 참고 문헌 파일을 사용하여 Troff 문서에서 참조를 자동으로 추적하는 간단한 전처리기입니다. man refer를 실행하여 작동 방식에 대해 자세히 알아볼 수 있습니다.
Troff를 컴파일할 때 “missing DESC” 오류를 어떻게 수정할 수 있나요?
이 문제는 시스템의 종속성이 누락되었거나 버전 파일이 일치하지 않기 때문일 가능성이 높습니다. 이를 수정하려면 배포판의 리포지토리에서 적절한 groff 패키지를 설치하세요.
이미지 크레딧: Simon Hattinga Verscheure via Unsplash. 모든 수정 및 스크린샷은 Ramces Red에 의해 작성되었습니다.