Linux で Troff を使用して PDF ドキュメントをフォーマットする方法

Linux で Troff を使用して PDF ドキュメントをフォーマットする方法

troff は、Linux システム用の最小限かつ強力なドキュメント テキスト プロセッサです。コマンドラインからソースファイルをコンパイルすることで、印刷可能なドキュメントを簡単に作成できます。LaTeX とは異なり、Troff は信じられないほど軽量で、ほとんどの Linux システムにプリインストールされています。このチュートリアルでは、Troff を使用して Ubuntu で PDF ドキュメントをフォーマットする方法を示します。

troff とは何か、なぜそれを使用するのか

基本的に、Troffはコードのようなスクリプトを印刷可能な文書に変換するテキスト処理プログラムです。ワード プロセッサとは異なり、Troff は「WYSIWYG」パラダイムに依存しません。代わりに、書式設定を処理するために特定の種類のコードを使用する必要があります。

デフォルトの Libreoffice Writer 画面。

このアプローチの最大の利点の 1 つは単純さです。Troff の基本的なインストールには、ドキュメントの作成に必要なものがすべて含まれています。さらに、グラフィカル ユーザー インターフェイスがないということは、SSH 経由でもドキュメントを作成できることを意味します。

Troff を実行するリモート OpenBSD セッション。

Troff のインストール

多くの場合、Troff はほとんどの Linux ディストリビューションにデフォルトでバンドルされています。-hそのフラグを実行することで、システムにそれがあるかどうかを確認できます。これにより、Troff インストールが受け入れるすべてのフラグの簡単なリストが表示されます。

troff -h

Troff で -h フラグを実行している端末画面。

ディストリビューションにデフォルトで Troff がバンドルされていない場合があります。その場合、「groff」パッケージを探すことでインストールできます。

groff の apt info コマンドを実行しているターミナル ウィンドウ。

これは、GNU プロジェクトによる Troff および Nroff プログラムの再実装であり、多くの新しい最新機能が含まれています。

次のコマンドを使用して、Ubuntu に groff をインストールできます。

sudo apt install groff

groff の apt install コマンドを表示しているターミナル ウィンドウ。

初めての troff ドキュメントの作成

ソース コードと同様に、すべての Troff ドキュメントは、ドキュメントの作成方法に関する指示を含むテキスト ファイルです。これらには、ページと余白の幅、文字とページの間隔が含まれます。

複雑な Troff マクロが表示されているターミナル ウィンドウ画面。

このレベルの制御により、プログラムを操作してあらゆる種類のドキュメントを作成できます。これを簡素化するために、Troff の開発者は、これらのコマンドをより単純な構文に凝縮する「マクロ」を作成しました。

Troff で使用する最も一般的なマクロの 1 つは「ms」です。記事のスタイルでドキュメントを作成します。touch次のコマンドを使用して、ms ドキュメントを作成できます。

touch my-first-document.ms

すべての Troff ドキュメントはテキストであるため、テキスト エディタを使用してドキュメントを開くことができます。私の場合は、vim を使用しています。または、Linux 用のこれらのテキスト エディターを使用することもできます。

vim my-first-document.ms

新しい 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 で使用する最も基本的なコマンドの 2 つは、.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 ドキュメントを表示しているターミナル ウィンドウ。

ここから、ファイルを Troff プログラムに渡してドキュメントを作成します。

groff -ms -Tpdf. /my-first-document.ms > output.pdf

基本的な Troff ドキュメントの PDF 出力。

太字、斜体、下線付きテキストの作成

通常のワード プロセッサと同じように、ほとんどの Troff マクロは、ドキュメントをカスタマイズするための多数のスタイル コマンドを提供します。ms の場合、これらは.B.I.ULおよび.BXです。

  • この.Bコマンドは、テキストを太字に変更します。
  • この.Iコマンドは、テキストを斜体に変更します。
  • .UL.BXは、それぞれテキストの周りに下線とボックスを描画するコマンドです。

上記のコマンドと同様に、ドキュメントでこれらを使用するには、各スタイルを 1 行で区切る必要があります。

.TL
My First Troff Document

.PP
This is
.B
content
.R
that I want to look like a paragraph in my final document. [...]

この例では、「コンテンツ」という単語の前に新しい行を作成し、.B太字に変更するコマンドを追加してから、新しい行を作成して.Rコマンドを追加しました。これにより、Troff は以前のスタイルに戻ることができます。

1 つの単語を太字で示す Troff ドキュメントの PDF 出力。

.Rスタイルを変更するときは、常にコマンドを追加する必要があることに注意してください。たとえば、次の抜粋では.Iコマンドが終了しません.R

.TL
My First Troff Document

.PP
This is
.I
content
that I want to look like a paragraph in my final document. [...]

本文の大部分がイタリック体で表示されている、Troff 文書の PDF 出力。

新しいドキュメント セクションの作成

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 ドキュメントの PDF 出力。

デフォルトでは、すべての 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 ドキュメントの PDF 出力。

通常の番号付きヘッダーとは別に、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.

番号なしのネストされた見出しを示す Troff ドキュメントの PDF 出力。

Troff でのリストの作成

また、Troff の単純さにより、必要に応じて動作を変更することもできます。たとえば、デフォルトでは、Troff マクロまたは ms マクロのいずれにもリストはありません。それにもかかわらず、いくつかのミリ秒コマンドを組み合わせてリストを作成することはできます。

Troff のすべてのリストは、インデント、箇条書き、およびコンテンツの 3 つの部分で構成されます。インデントを作成するには、 コマンド.RS.REコマンドを使用します。これらは、その中のテキストの現在のインデント レベルを 4 スペース分移動します。

.RS
This is my first item.
.RE

単純なリスト項目を示す Troff ドキュメントの PDF 出力。

次に、 を使用して、リスト アイテムの箇条書きを作成します.IP。これは、テキストの左余白を特定の幅に固定する「段落のインデント」コマンドです。

この.IPコマンドを使用すると、カスタムの箇条書きと、箇条書きとテキストの間のスペースを設定することもできます。この場合、箇条書きを「[1]」に設定し、4 つのスペースを割り当てます。

.RS
.IP [1] 4
This is my first item.
.RE

箇条書き付きの単一のリスト項目を示す Troff ドキュメントの PDF 出力。

コマンドをコピーして貼り付けて、.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

箇条書きで 3 つの基本的なリスト項目を示す Troff ドキュメントの PDF 出力。

最後に、カスタム マクロを作成して、このプロセスを自動化します。たとえば、次の抜粋は、.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 の特徴の 1 つは、その機能のほとんどが「プリプロセッサ」として存在することです。ほとんどの場合、これらはプログラムの外部にあるバイナリであり、「プリプロセッサ コンテナ スクリプト」を作成して動作し、それらを低レベルの Troff コードに変換します。

プリプロセッサから変換された Troff コードを表示する端末ウィンドウ。

Tbl は、Troff プリプロセッサの好例です。文書内の表を管理するプログラムです。基本的な Tbl コンテナーは次のようになります。

.TS
allbox ;
c c c.
item1 <Tab> item2 <Tab> item3
item4 <Tab> item5 <Tab> item6

.TE

  • およびコマンドは、これが読み取り可能な環境であることを Tbl に通知します.TS.TE
  • 2 行目は、このテーブルをフォーマットする方法をプログラムに指示します。
  • 3 行目はスペースで区切られたフィールドで、テーブル内の列の数と配置を指定します。
  • 4 行目と 5 行目は、テーブルの内容を含むタブ区切りのフィールドです。
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

基本的な表を示す Troff ドキュメントの PDF 出力。

よくある質問

Windows で Troff を使用することは可能ですか?

デフォルトでは、Troff も Groff も正式に Windows に移植されていません。それにもかかわらず、Windows Subsystem for Linux をインストールすることで、Groff を他の GNU ユーティリティと一緒に使用することができます。

Troff には参考文献追跡機能がありますか?

はい。Referは、外部参考文献ファイルを使用して、Troff ドキュメント内の参照を自動的に追跡する単純なプリプロセッサです。を実行してマニュアルページにアクセスすると、その仕組みについて詳しく知ることができますman refer

Troff をコンパイルするときの「missing DESC」エラーを修正するにはどうすればよいですか?

この問題は、システムに依存関係がないか、バージョン ファイルが一致していないことが原因である可能性が最も高いです。これを修正するには、ディストリビューションのリポジトリから適切な groff パッケージをインストールします。

画像クレジット: Unsplash 経由の Simon Hattinga Verscheure . Ramces Redによるすべての変更とスクリーンショット。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です