| 원저자 | 조 오사나 |
|---|---|
| 개발자 | 벨 연구소 |
| 프로그래밍 언어 | C |
| 운영 체제 | 유닉스, 유닉스 계열, 플랜 9 |
| 플랫폼 | 크로스 플랫폼 |
| 종류 | 명령어 |
| 라이선스 | 플랜 9: MIT 허가서 |
| 웹사이트 | troff |
troff(/ˈtiːrɒf/), "typesetter roff"의 약자로, 벨 연구소가 유닉스 운영체제를 위해 개발한 문서 처리 시스템의 주요 구성 요소이다. troff와 관련 프로그램인 nroff는 모두 원조 roff에서 개발되었다.
nroff가 터미널과 라인 프린터에서 출력물을 생성하기 위한 의도였다면, troff는 1972년에 도입된 그래픽 시스템스 CAT와 같은 조판 시스템에서 출력물을 생성하기 위한 것이었다. 둘 다 동일한 기반 마크업 언어를 사용했기에, 단일 소스 파일을 일반적으로 nroff나 troff에서 변경 없이 사용할 수 있었다.
troff는 글꼴, 간격, 문단, 여백, 각주 등을 지정하는 명령어를 제공한다. 다른 많은 텍스트 포맷터와 달리, troff는 페이지 위에 문자를 임의로 배치하거나 겹칠 수 있으며, 완전히 프로그래밍 가능한 입력 언어를 갖추고 있다. 표, 도표, 수학식을 더 편리하게 생성하기 위해 별도의 전처리기가 사용된다. troff에 대한 입력은 일반 텍스트 파일이며 모든 텍스트 편집기로 만들 수 있다.
다양한 문서 스타일을 위해 방대한 매크로 패키지가 만들어졌다. troff의 일반적인 배포판에는 연구 논문 서식을 위한 me 매크로, 유닉스 man 페이지 작성을 위한 man 및 mdoc 매크로, 오버헤드 프로젝터용 투명 필름(transparency)을 위한 mv 매크로, 그리고 편지, 책, 기술 보고서 및 메모를 위한 ms 및 mm 매크로가 포함되어 있다.
troff의 기원은 제롬 H. 살처가 1960년대 중반 MIT의 CTSS 운영체제를 위해 작성한 RUNOFF라는 텍스트 포맷팅 프로그램으로 거슬러 올라간다. (이름은 "I'll run off a document"라는 문구에서 유래했다고 한다.)
밥 모리스는 이를 GE 635 아키텍처로 포팅하고 roff(runoff의 약자)라고 불렀다. 이 프로그램은 PDP-7용으로 rf라는 이름으로 재작성되었으며, 같은 시기(1969년)에 더그 매킬로이는 BCPL 프로그래밍 언어로 roff의 확장 및 간소화 버전을 재작성했다.
첫 번째 유닉스 버전은 벨 연구소에 있던 PDP-7에서 개발되었다. 1971년 개발자들은 운영체제에 대한 추가 작업을 위해 PDP-11을 확보하고자 했다. 이 시스템에 대한 비용을 정당화하기 위해, 그들은 벨 연구소 특허 부서를 위한 문서 포맷팅 시스템을 구현하겠다고 제안했다. 이 첫 번째 포맷팅 프로그램은 조 오사나가 작성한 매킬로이의 roff를 재구현한 것이었다.
더 유연한 언어가 필요해졌을 때, 미래의 모든 버전의 기초가 된 nroff(newer "roff")라는 새로운 버전의 roff가 작성되었다. 그래픽 시스템스 CAT 사진식자기를 도입하게 되자, 오사나는 다중 글꼴과 비례 간격을 지원하도록 nroff를 수정했다. 조판용 roff라는 뜻의 troff로 명명된 이 소프트웨어의 정교한 출력물은 조판기 제조사를 놀라게 했고, troff를 사용한 원고가 이미 출판된 것이라고 생각한 동료 평가자들을 혼란스럽게 만들었다. 그 결과, troff라는 이름은 */ˈtrɒf/가 아니라 /ˈtiːrɒf/로 발음된다.
troff와 함께 nroff(실제로는 거의 동일한 프로그램)가 제공되었으며, 이는 라인 프린터와 문자 단말기용 출력물을 생성하기 위한 것이었다. nroff는 troff가 수행하는 모든 것을 이해했으며, 글꼴 변경과 같이 적용할 수 없는 명령어는 무시했다.
오사나의 troff는 PDP-11 어셈블리어로 작성되었으며 CAT 사진식자기를 위한 출력물을 생성했다. 오사나는 이를 C로 재작성했으나, 당시 7,000줄의 주석 없는 코드였으며 여전히 CAT에 의존하고 있었다. CAT가 점차 드물어지고 제조사의 지원이 중단되면서, 다른 장치를 지원하는 것이 우선순위가 되었다. 오사나가 이 작업을 완료하기 전에 사망함에 따라 브라이언 커니핸이 troff 재작성 작업을 맡게 되었다. 새롭게 재작성된 버전은 후처리기(post-processor)가 읽고 적절한 프린터 코드로 변환하기 매우 쉬운 장치 독립적(device-independent) 코드를 생성했다. 또한, 이 새로운 버전의 troff(장치 독립적 troff라는 의미의 ditroff로 자주 불림)는 그리기 기능을 포함한 몇 가지 확장을 갖추었다. 프로그램 문서에서는 ditroff의 출력 형식을 정의하며, 이는 GNU groff와 같은 많은 현대적인 troff 클론에서 사용된다.
1983년, troff는 벨 연구소 라이선스 하에 찰스 리버 데이터 시스템즈의 UNOS 운영체제에서 사용할 수 있는 여러 유닉스 도구 중 하나였다.
troff 도구 모음(전처리기 및 후처리기를 포함)은 결국 Documenter's WorkBench(DWB)라고 불리게 되었으며, 1994년까지 벨 연구소와 이후 스핀오프 기업인 유닉스 시스템 연구소(USL)에서 지속적으로 개발되었다. 그 시점에 SoftQuad가 유지보수를 맡았으나 브라이언 커니핸은 개인적으로 troff를 계속 개선했다. 따라서 현재 최소한 다음과 같은 벨 연구소 troff의 변형들이 사용되고 있다.
troff는 Interleaf, FrameMaker, LaTeX와 같은 다른 프로그램들에 의해 대체되었지만, 여전히 광범위하게 사용되고 있다. troff는 여전히 유닉스 문서의 기본 포맷터로 남아 있다.
이 소프트웨어는 1990년부터 GNU 시스템을 위해 groff로 재구현되었다. 또한, 오픈 소스화된 고대 유닉스 시스템과 오픈솔라리스 및 플랜 9에서 발견되는 ditroff 기반의 오픈 소스 버전과 같은 현대적 후계자들 덕분에, 다양한 오픈 소스 라이선스 하에 사용할 수 있는 여러 버전의 AT&T troff(CAT 및 ditroff 기반)가 존재한다.
일반적으로 troff를 직접 사용하는 대신 더 사용하기 쉬운 인터페이스를 거치는 것이 권장되었다.
Troff에는 문서를 처리하기 전에 실행되는 매크로가 포함되어 있다. 이 매크로에는 페이지 헤더 및 푸터 설정, 새로운 명령어 정의, 출력물 서식 지정 방식에 영향을 주는 기능이 포함된다. 매크로 세트를 포함하기 위한 명령줄 인수는 -m이름이며, 이로 인해 많은 매크로 세트가 기본 파일 이름 앞에 m이 붙은 형태를 띠게 되었다.
앞에 m이 붙는 표준 매크로 세트는 다음과 같다:
ms 매크로는 AT&T에서 개발된 최초의 매크로였으나 이후 mm 매크로로 대체되었다. mm 매크로의 목표 중 하나는 벨 연구소의 타이핑 풀(typing pool)이 사용할 수 있도록 하는 것이었으며, 시간이 지나면서 이는 표준이 되었다. AT&T는 mm 매크로를 System V 유닉스용으로 상업적으로 공개했다. 반면, me 매크로는 버클리에서 개발되었다.
mm 매크로로 작성된 간단한 비즈니스 편지의 예는 다음과 같다:
.TL.ND "January 10, 1993".AU "Ms. Jane Smith".AT "Upcoming appointment".MT 5Reference #A12345.sp 4Mr. Samuel Jones.sp 0Field director, Bureau of Inspections.sp 01010 Government Plaza.sp 0Capitoltown, ST.sp 3Dear Mr. Jones,.sp 2.PMaking reference to the noted obligation to submit for state inspection our newly created production process, we request that you consider the possible inappropriateness of subjecting the innovative technologies of tomorrow to the largely antiquated requirements of yesterday. If our great state is to prosper in the twenty-first century, we must take steps.Bnow , in.Ithis year of.Ithis decade, to prepare our industrial base for the interstate and international competition that is sure to appear. Our new process does precisely that. Please do not let it be undone by a regulatory environment that is no longer apt..PThank you for your consideration of our position..FC Sincerely.SG
사용 가능한 매크로의 포괄적인 목록은 일반적으로 tmac(5) 매뉴얼 페이지에 나열되어 있다.
troff가 발전함에 따라 troff만으로는 쉽게 수행할 수 없는 작업들이 생겨났고, 여러 전처리기가 개발되었다. 이 프로그램들은 문서의 특정 부분을 troff 입력으로 변환하며, 유닉스의 "파이프라인" 활용 방식(한 프로그램의 출력을 다른 프로그램의 입력으로 전달하는 방식, 파이프와 필터 참고)에 자연스럽게 들어맞는다. 일반적으로 각 전처리기는 특별히 표시된 입력 파일의 섹션만 번역하고 나머지는 변경하지 않고 통과시킨다. 임베드된 전처리 명령은 단순한 애플리케이션별 프로그래밍 언어로 작성되며, 이는 높은 수준의 성능과 유연성을 제공한다.
세 가지 전처리기는 그림을 설명하기 위한 도메인 특화 언어를 정의하여 troff에 그리기 기능을 제공한다.
또한 입력 텍스트에서 .so 포함 지시어를 제거하는 soelim 명령어가 있다.
파이프라인의 일반적인 구조는 다음과 같다:
soelim 파일 | refer | ideal | pic | tbl | eqn | troff
더 많은 전처리기가 pic을 위한 출력을 생성함으로써 더 복잡한 그림을 그릴 수 있게 한다.
troff에 대해 더 친숙한 인터페이스를 목표로 하는 다른 프런트엔드들도 개발되었다.
그중 하나인 Sanscribe는 원래 버클리에서 개발되었으며, 이후 인텔과 InterACT를 포함한 여러 사용자에 의해 1980년대에 개선되었다. 메모, 보고서, 문서를 작성하는 데 사용되는 Sanscribe는 기본 troff 명령어와 me 매크로, 그리고 soelim, eqn, tbl, grap, pic과 같은 다양한 전·후처리기를 기반으로 구축되었다. 그러나 이는 전처리기가 아닌 메인 프로그램 바이너리이다. 조건부 포함 기능 덕분에 다중 플랫폼 참조 매뉴얼을 유지 관리하는 데 특히 유용하다. 하지만 Sanscribe는 불안정하며 난해한 오류를 일으키거나 이상하게 포맷된 결과를 만들어내기 쉽다.
특수 목적 프런트엔드인 vgrind는 주석을 기울임꼴로, 키워드를 굵게, 함수 이름을 여백에 강조하는 등의 기능을 통해 소스 프로그램 목록을 예쁘게 포맷한다. 필터로 실행하거나 출력물이 troff로 전달되는 메인 프로그램으로 실행될 수 있다. 포트란, C, C++뿐만 아니라 본 셸 및 Yacc와 같은 도메인 특화 도구, 심지어 이맥스 리스프 및 아이콘과 같은 더 넓은 범위의 언어도 지원한다.
CADiZ 도구 모음은 Z 표기법을 위해 다른 접근 방식을 사용한다. cadiz 프로그램은 파이프라인 앞단의 전처리기가 아니라, 파이프 대신 저장된 파일을 사용하여 입력과 출력 양방향으로 troff와 여러 번 상호작용한다. CADiZ에는 .ZA에서 .ZZ까지의 고유 매크로 세트도 포함되어 있다.