1. 개요
GNU troff, groffUNIX의 전통적인 조판(typesetting) 언어인 troff를 자유 소프트웨어로 제작한 GNU 프로젝트의 구현체. 흔히 man page를 생성하는 포맷으로 알려져 있다.
2. 역사
역사가 상당히 오래된 편인데, 기원을 따지면 1964년까지 거슬러 올라간다. 1964년 당시 MIT 재학생이던 제리 설쳐(Jerry Saltzer)가 CTSS(Compatible Time-Sharing System) 운영체제용으로 RUNOFF라는 조판 프로그램과 TYPSET라는 문서 편집기를 개발했는데, 이는 이후 데니스 리치에 의해 IBM 7094에 올라간 멀틱스 운영체제로 포팅되었다.# 이후 runoff[1]는 멀틱스에서 문서 포맷 형식으로 널리 쓰이기 시작했다.[2]이후 멀틱스 runoff는 1971년 11월 3일 당시 벨 연구소에서 근무하던 켄 톰슨에 의해 PDP-11 어셈블리로 포팅하며 roff라는 이름을 붙히게 되고,[3] 1973년까지 UNIX I부터 UNIX III까지 매뉴얼 문서를 제작하는 데 쓰였다.
이후 더 많은 기능이 필요했던 벨 연구소의 조 오사나(Joe F. Ossanna)는 기존의 roff 구현체를 기반으로 하드웨어 터미널 및 라인 프린터 출력인 nroff(new roff)를 만들었고 얼마 지나지 않아 또다시 다양한 폰트 및 공백 크기 설정을 지원하고 GSI CAT를 출력하는 troff(typesetter roff)를 만들었다.
두 프로그램이 완전히 다른 문법을 사용하는 것은 아니고, 동일한 tf 파일을 소스에서 nroff는 VT 출력용, 즉 쉽게 말하면 터미널 man page용 아스키 정렬 텍스트를 출력하는 용도였고 troff는 출력 및 인쇄용으로 TeX랑 비슷하게 세세한 조판 설정이 가능했다. 실제로 troff와 TeX은 공통점이 굉장히 많은데, TeX에 의미적(semantic)으로 추상화된 매크로 패키지 묶음인 LaTeX이 있듯이 troff도 수식용 매크로
eqn
, 테이블용 매크로 tbl
등의 패키지가 존재한다.이후 GSI CAT 포맷을 지원하는 하드웨어가 단종되고 PDP-11 어셈블리도 관리가 어려워지자, 브라이언 커니핸(Brian Kernighan)이 기기 종속적이지 않은 출력 형식을 지원하고 확장 매크로를 지원하도록 처음부터 재작성했는데, 이 버전을 기존 n/troff와 비교해 흔히 ditroff(device independent troff)라고 부른다.
1990년대 초반 유닉스의 오픈소스화와 GNU를 중심으로 한 자유 소프트웨어 운동이 일어나기 시작하면서, 유닉스의 핵심 요소 중 하나인 man page와 관련된 troff도 AT&T 라이선스 분쟁에 시달리다가 결국 제임스 클라크(James Clark)에 의해 오픈 소스로 재작성되게 된다. 해당 구현체는 이후 GNU 프로젝트 본진으로 넘어가며 groff(GNU roff)라는 이름이 붙었고, GPLv1 라이선스로 1990년 6월에 최초 버전을 출시하게 된다.
3. 매크로
man
- man page 문서 형식 매크로me
- 논문, 연구자료(research paper) 등을 만들기 위한 형식. LaTeX 논문 형식과 비슷하다.mm
- 기록, 보고서 형식ms
- 도서, 출판 서적 및 기술 서적 형식
4. 전처리기
5. 출력 형식
- ascii - man page 출력용.
groff -Tascii | less
로 man page를 빌드해 실시간으로 확인할 수 있다. - DVI
- HTML
- PostScript
6. 관련 문서
[1] 대문자로 쓰인 RUNOFF는 CTSS식 명령어다. 유닉스의 사실상 조상격인 멀틱스에서는 으레 유닉스에서 그러듯
runoff
로 소문자로 호출했다.[2] Dennis Ritchie and Rudd Canaday of BTL ported CTSS BCPL to Multics. Ken Thompson wrote a version of QED in BCPL, and Doug McIlroy and Bob Morris wrote Multics runoff in BCPL based on Jerry Saltzer's MAD version of RUNOFF for CTSS. #[3] we transliterated the roff text formatter into PDP-11 assembler language, starting from the PDP-7 version that had been transliterated from McIlroy's BCPL version on Multics, which had in turn been inspired by J. Saltzer's runoff program on CTSS. #