べた書き入力による文書清書システム


r2.5
ユーザガイド


内田 昭宏
Copyright (C) 1994 A.Uchida
uchida@ccs.mt.nec.co.jp

本ユーザガイドは plain2 , LaTeX , tgif を使って書かれています.

$Id: plain2.pln,v 1.4 1994/01/07 09:41:22 uchida Exp $



はじめに

文書清書システムとして LaTeX や troff が広く使われるようになりました. LaTeX や troff を利用すると, 比較的手軽に高品位の文書を作成することができますが,LaTeX や troffを使いこなすことは初心者には容易ではありません.また,LaTeX や troffのコマンドが埋めこまれた文書は読みづらく,文書を推考しながら作成するのに適していません.

plain2 はべた書きされた文書を解析して, 自動的に LaTeX やtroff のコマンドを埋め込んだ文書に変換して出力するコマンドです. plain2 を使えば,LaTeX やtroff の知識がなくても, 簡単に美しい文書を作成できるようになります.

また,出力のカスタマイズ機能や, べた書き文書中に LaTeX や troff のコマンドを埋め込む機能を使って, 高度なレイアウトが必要な文書の作成にも利用することができます.

ユーザガイドの構成

本ユーザガイドは以下のような構成になっています.

前半部は,plain2 を始めて使う人を対象にした, 簡単な使い方の説明になっています.後半部では,既に plain2 に慣れている人を対象に,plain2の詳細な機能の説明や, より高度な応用例を紹介しています.

ユーザガイド中の記法

本ユーザガイドでは, べた書きされた文書を左側に行番号を付けた形式で示します.

べた書きの文書中では, 縦線の位置がずれて見えることがありますが,これはLaTeX の処理のために生じているもので,実際の文書中では縦線はきちんと揃っています.

  1: 1. 本ユーザガイド中での例文の表示
  2: 
  3: LaTeX処理の問題で,罫線がずれることがあります.
  4:     -----------------------------------------
  5:     | 入力文      |  行番号付きで示します   |
  6:     -----------------------------------------
  7:     | 清書された  |  枠線の中に示します     |
  8:     | イメージ    |                         |
  9:     -----------------------------------------

べた書き入力文書を plain2 に通し, 更に清書系に通した結果のイメージは枠線で囲んで示します. このユーザガイド自体は LaTeX を使って清書されていますが,特別な注意がある場合を除いて, troff を使ってもほぼ同等の清書結果が得られます.

本ユーザガイド中での例文の表示

LaTeX処理の問題で,罫線がずれることがあります.

入力文 行番号付きで示します
清書された
イメージ
枠線の中に示します
 

plain2 のバージョンと入手方法

このユーザガイドは , plain2 の "r2.5" 版をベースとしています.

plain2 は JUS Free software CD-ROM (1992) を始め,いくつかのフリーソフト配布パッケージに収録されて配布されています. また,何人かの方によってMS-DOS上に移植版が作成され, パソコン通信等からも入手可能です.ただし,93年末の時点で, これら配布媒体上のものはいずれも,1991年5月に fj.sources で公開された"r2.3" 版です.

r2.5 では r2.3 で発見されたいくつかのバグを修正した他, 出力形式のカスタマイズなどの新機能が導入しています.


配布条件

バグレポート,改造報告などは uchida@ccs.mt.nec.co.jp までお願いします.

plain2の名前の由来

開発当初, plain2 はべた書きを LaTeXに変換する plain-to-tex = plain2texとplain-to-roff = plain2roff という二つのコマンドに分かれていました.その後の改定で二つの出力機能が一つのコマンドにマージされた結果, plain2-to-xxxの最後の部分が削られて,plain2 という名前のコマンドになりました.


まずは使ってみよう

ここでは,簡単な例を使って,plain2 を使った文書作成の方法を説明します. まず,つぎのようなべた書き文書を作成します.

  1:     『はじめてのplain2』
  2:             by 内田昭宏
  3:             1992/11/22
  4:         
  5: 1. ようこそ plain2 の世界へ
  6: 
  7: TeXなんて書けない,読めない.そんなユーザの声に応える
  8: のがplain2です.使い方は簡単.特殊文字{\"'}もそのままどうぞ.
  9: 
 10:     % plain2 -tex example.pln > example.tex
 11:     % jlatex exapmle.tex
 12:         ...
 13:         ...
 14:     % xdvi example.dvi
 15: 
 16: 1.1. 多様なリスト
 17: 
 18: いろいろなリストが書けます.ネストもできます.
 19:   ・項目型リスト
 20:     先頭にビュレット"・"やダッシュのある行
 21:   ・列挙型リスト
 22:     1) 数字
 23:     2) アルファベット
 24:     3) ローマ数字
 25:   ・記述型リスト
 26: 
 27: 1.2. テーブルと線画の機能
 28: 
 29: plain2ならテーブルも簡単に書けます
 30:    -------------------------------------------------
 31:    |      | べた書き|マークアップ| ワープロ|
 32:    =================================================
 33:    |覚えやすさ |  ○  |   ×  |  ◎  |
 34:    |読みやすさ |  ◎  |   ×  |  ◎  |
 35:    |データ交換 |  ○  |   ○  |  ×  |
 36:    -------------------------------------------------
 37: 
 38: 簡単な絵くらいは書けます.
 39:  ┌──┐           ┌─────┐
 40:  │べた│ ┏━━━━━━┓  │LaTeX│
 41:  │書き┝→┃plain2┠┬→│┌────┴┐
 42:  │テキ│ ┗━━━━━━┛│ ││troff│
 43:  │スト│         │ └┤     │
 44:  └──┘         └─→│     │
 45:                  └─────┘

plain2 は例文から次に示す文書構造を抽出し, 適切な LaTeX または troffのコマンドを挿入します.

1~3行タイトル 22~24行列挙型リスト
5行セクションタイトル(深さ1) 27行セクションタイトル(深さ2)
7行平文 29行平文
10~14行例示 30~36行テーブル
16行セクションタイトル(深さ2) 38行平文
18行平文 39~45行線画
19~25行項目型リスト  

ここでは,LaTeXを選択することにします.

% plain2 -tex example.pln > example.tex

入力文書の文字コードにはJISコード,または,EUCコードを使うことができます, 出力コードの標準はEUCコードです.オプションによって,入出力共にシフト JISコードを選択することも可能です.MS-DOSに移植されたplain2では, 入出力共にシフトJISコードが標準となっています.

これ以降の手順は,普通に LaTeXを使う場合と同じです.

        % jlatex example.tex
                ...
                ...

LaTeXを使って清書された結果を次に示します.

バックスラッシュなど,LaTeXや troff処理系の特殊文字は自動的にクォートして出力されます.


出力に troff を選択することもできます.plain2 の troff の出力は mm マクロを使うことを仮定しています.

        % plain2 example.pln > example.mm
        % ditroff -mm example.mm
                ...

mm マクロは "Documenters Work Bench" の文書処理環境に含まれていますが, より一般的な ms マクロを使った出力を選択することもできます. ms マクロを使う場合には"-ms"オプションを指定します.LaTeX出力と troff のmmマクロ出力は,最終的にほぼ同じイメージで清書されるように配慮してありますが, ms マクロを選択した場合の出力イメージは多少異なったものになります.

        % plain2 -ms example.pln > example.ms
        % ditroff -ms example.ms
                ...

タイトル

例文では,『はじめてのplain2』からの3行がタイトルです. タイトルは必ず文書ファイルの先頭でなくてはいけません. タイトルは省略することも可能です.

タイトルには,題名,著者名, 日付,所属などのうち必要なものを書きます.最初の例に示した書き方の他に, 各行の先頭にタグを付ける書き方もあります.

  1: 	『はじめてのplain2』
  2: 			by 三田 一郎
  3: 			フリーソフトウェア研究所
  4: 			1992/11/22
  5: 
  6: 1.  タイトルの書き方
  7: 
  8: タイトル部分には空白行を入れることはできません.
  9: タイトル部分と本文との間には一行以上の空白を置いてください.

  1: 題名		はじめてのplain2
  2: 著者		三田 一郎
  3: 日付		1992/11/22
  4: 所属		フリーソフトウェア研究所
  5: 
  6: 1.  タイトルの書き方
  7: 
  8: タイトル部分には空白行を入れることはできません.
  9: タイトル部分と本文との間には一行以上の空白を置いてください.

タイトル部分には空白行を入れることはできません. タイトル部分と本文との間には一行以上の空白が必要です.また, タイトル部分の全ての行は予め定められたパターン (タイトルの詳細 章参照)のいずれかにマッチしなくてはいけません. 一行でもパターンにマッチしない行があると, タイトル全体の解釈が失敗してしまいます.

セクションタイトル

例文には3つのセクションタイトルが含まれていす.セクションタイトルは, セクション番号(章番号,節番号)と見だし部分から構成されます.


セクションタイトルは行の先頭から始まっていなくてはなりません. また,セクションタイトル行の直前は必ず空白行でなくてはいけません. できれば,前後共に空白行とすることが望ましいです.例文では, セクション番号に全角数字と全角のドットを使っていますが, 半角数字と半角ドットを使うこともできます.

plain2 はセクション番号の値そのものにはほとんど注意を払わず,セクションの深さ(ドットで区切られた並びの数)だけに注目しています.


plain2 の出力を LaTeX や troff で清書すると,べた書き文書中でのセクション番号の値にかかわらず,セクション番号は続き番号となります.入力文書中では番号の数自体にはあまり注意を払う必要はありません.

  1: 1. ようこそ plain2 の世界へ
  2: 
  3: 2.4. 多様なリスト
  4: 
  5: 3.1. テーブルと線画の機能
  6: 

ようこそ plain2 の世界へ

多様なリスト

テーブルと線画の機能


平文

特別の構造を持たない普通の文章を平文と呼びます. 平文は,LaTeXやtroffを通すと行詰めされる指定で出力されます.

平文の間に空白行を入れることで,段落の区切りを表します.空白行を使わずに, 行の先頭に全角一個文の空白をおくことで段落を示すこともできます.

  1:   我々が普段書く技術文書やメモには,章・リスト・表などの
  2: 基本的な文書構造が多く使われ,細かいレイアウト調整が必要
  3: とされることは少ない.
  4:   これら基本的な文書構造は,空白の配置やインデント・簡単
  5: な記号を使ってべた書きテキストでも書き表すことができるに
  6: もかかわらず,多くの場合,高い品質の印字を得るために,
  7: TeXやtroffのマークアップ言語で文書構造を指定している.
  8: 
  9: また,いわゆるWYSIWYGの文書作成ツールを使った場合にも入
 10: 力速度,文書の交換性などに問題がある.
 11: 
 12: 筆者らは,べた書きの文書の外観からその構造を解析し,
 13: TeX/troffのコマンドに変換するプログラムを作成した.
 14: 

我々が普段書く技術文書やメモには, 章・リスト・表などの基本的な文書構造が多く使われ, 細かいレイアウト調整が必要とされることは少ない.

これら基本的な文書構造は, 空白の配置やインデント・簡単な記号を使ってべた書きテキストでも書き表すことができるにもかかわらず, 多くの場合,高い品質の印字を得るために,TeXや troffのマークアップ言語で文書構造を指定している.

また,いわゆる WYSIWYGの文書作成ツールを使った場合にも入力速度,文書の交換性などに問題がある.

筆者らは,べた書きの文書の外観からその構造を解析し, TeX/troffのコマンドに変換するプログラムを作成した.


例示

コマンド実行例の部分は,行詰めをせずに, そのままのイメージで出力しなければなりません.このような部分を例示と呼びます.

プログラム例のように,比較的短い行が続く部分, 空白を多く含む行が続く部分などが例示と判定されます.

リスト

例文では,3つの項目からなる項目型リストの中に, 列挙型のリストがネストされています.

リストには,項目型リスト,列挙型リスト,記述型リストの3種類があり, リスト行の先頭に付けられたリストマークの種類によって識別されます.


項目型:
項目型は次の文字のいずれかをリストマークに使うリストです.

ビュレット: "o ","・","* ","*", "+ "
ダッシュ: "-"(半角ダッシュ),"−"(全角ダッシュ )

  1: ・ビュレットリストその1
  2: ・ビュレットリストその2
  3: 
  4: - ダッシュリストその1
  5: - ダッシュリストその2

troff 出力を選択した場合には, ビュレットとダッシュの違いが区別して出力されますが, LaTeX出力ではビュレットとダッシュの違いは出力に反映されません.

  • ビュレットリストその 1
  • ビュレットリストその 2

  • ダッシュリストその 1
  • ダッシュリストその 2

列挙型:
列挙型はアルファベット一文字,数字,またはローマ数字による順序番号をリストマークとしたリストです.順序番号には半角のドットを付けるか,両側または右側に括弧を付けます.全角数字を使うことはできません.

  1: 1) 数字列挙型
  2: 	アラビック数字.1,2,3,...
  3: 2) 英字列挙型
  4: 	アルファベット.a,b,c,... A,B,C,...
  5: 3) ローマ数字列挙型
  6: 	幅が一定でないです.i,ii,iii,iv,... I,II,III,IV,...
  7: 
  8: [a] ドットによる修飾
  9: 	最後にドットを付ける.1.,2., a. b.
 10: [b] 括弧による修飾
 11: 	右側か両側に付ける.A),B), (i),(ii)
 12: [c] 角括弧による修飾
 13: 	角括弧の場合も同様.I], II],[1],[2]

  1. 数字列挙型

    アラビック数字. 1,2,3,...
  2. 英字列挙型

    アルファベット.a,b,c,... A,B,C,...
  3. ローマ数字列挙型

    幅が一定でないです.i,ii,iii,iv,... I,II,III,IV,...

  1. ドットによる修飾

    最後にドットを付ける.1.,2., a. b.
  2. 括弧による修飾

    右側か両側に付ける.A),B), (i),(ii)
  3. 角括弧による修飾

    角括弧の場合も同様.I], II],[1],[2]

記述型:
リストのタイトルを "[]"で囲むか,タイトルに":"を付けて,リストマークとしたものが記述型リストです. (全角のコロン":"は使えません)

  1: コロンを置く:
  2: 	タイトルの最後にコロンを付ける形式です.
  3: 角括弧で囲む:
  4: 	タイトル全体を角括弧で囲む形式です.
  5: 
  6: [LaTeX]	配布フリーの処理系も多くパソコンでも使えます
  7: [troff]  元祖UNIX の文書処理系ですが最近は斜陽ぎみか

コロンを置く:
タイトルの最後にコロンを付ける形式です.
角括弧で囲む:
タイトル全体を角括弧で囲む形式です.

[LaTeX] 配布フリーの処理系も多くパソコンでも使えます
[troff] 元祖UNIX の文書処理系ですが最近は斜陽ぎみか

テーブル

"-","=","|","+" を使って書いたべた書きのテーブルが,LaTeXのtabular 環境,または, troff の tbl 機能を使ったテーブルに変換されます.縦線と横線の交点は,横線"-"でも縦線"|"あるいは'+'のいずれでもかまいません.

plain2 は複数カラム/複数行にまたがるフィールドを含む,複雑なテーブルも扱うことができます.

  1: ---------------------------------
  2: |へん|つくり||  あわせて   |
  3: |  |   || 漢字 | よみかた |
  4: |===============================|
  5: | 金 |   || 錫 | すず   |
  6: |----| 易 ||------+-----------+
  7: |  |   || 鯣 | するめ  |
  8: |  |------||------+-----------+
  9: | 魚 | 非 || 鯡 | にしん  |
 10: |  |------||------+-----------+
 11: |  |   || 鯰 | なまず  |
 12: |----| 念 ||------+-----------+
 13: | 手 |   || 捻 | ひねる  |
 14: ---------------------------------

へん
 
つくり
 
あわせて
漢字 よみかた


 
すず




 
するめ
にしん


 
なまず
ひねる

線画

JISの罫線素片文字を使って書いた絵を,troffの PICまたはLaTeXのpicture環境の図に変換します. PC9800独自の罫線文字は認識されないので注意してください.

いくつかの特殊な記法を採用することで, 線画機能の表現力を拡充しています.日常的な作画はほとんどべた書きだけで済ますことも可能でしょう.

  1:     ┏━Ethernet
  2:     ┃        /───EWS4800
  3:     ↓       /
  4: □━━━━┳━━━━━/━━━━━━━━━━━━━━━□
  5:   ┌──┸──┐ /      2GBdisk
  6:   │/───\│×       :
  7:   ││X-  ││        :
  8:   ││Window││ ┌ ̄ ̄┐←……┘
  9:  ┌┤\───/├┐│  │
 10:  │└─────┘┝┥  │
 11:  └───────┘└__┘


plain2 コマンド

plain2 コマンドは,次のような形式で起動します.

        % plain2 filename
        % plain2 < filename
        % plain2 -roff -ms < filename > outfile.ms
        % plain2 filename1 filename2 filename3 > outfile.tex
        % plain2 -tex -exam=40 filename > outfile.tex

出力の標準は troff です.LaTex を使う場合には,"-tex" オプションを指定してください.

ファイル名が指定されない場合,標準入力から文書を読み込みます. ファイルは複数指定することもできます.処理結果は標準出力に出力されます.

plain2のオプションは,出力形式調整のオプションと(出力オプション ),入力文書解析のパラメータ設定オプション(解析オプション), その他のオプションに分けることができます.

表 1.オプション一覧
 オプション 内容














 
-tex
-tstyle=sss
-roff
-mm
-ms
-[no]listd
-[no]space
-[no]pre
-[no]acursec
-raw
-renum
-jis
-euc
-sjis
-f file
LaTeX出力
LaTeXスタイルファイル追加
troff出力 mm マクロ

troff出力 ms マクロ
リスト修飾
空白行の削除のオン/オフ
プリアンプルの出力/抑止
入力に忠実なセクション番号
raw出力モード
べた書きのままリナンバ
JISコード出力
EUCコード出力
入出力共シフトJIS
出力カスタマイズファイル指定
解析
オプ


-table=ddd
-exam=ddd
-indsec
-ktable
-ref
テーブル制御
例示制御
インデント付きセクション
漢字罫線テーブル
相互参照(LaTeXのみ)


-v
-dLevel
-pt=Size
verboseモード
デバッグオプション
フォントサイズ

オプションは,コマンドラインだけでなく,環境変数や, べた書き文書ファイル自身に指定することもできます. 文書ファイル中への指定方法については,タイトルの書き方 (タイトルの詳細 章)を参照してください. 文書ファイル中に指定された, 解析オプションの有効範囲はそのファイル内に限定されます.

コマンドオプション

出力オプション:
-tex

LaTeX出力を選択します. jarticle スタイルを使った出力を生成します.

-tstyle=sss

LaTeX スタイルファイル指定します.例えば,"-tstyle=epsf" と指定すると,次のように出力されます.

                \documentstyle[epsf]{jarticle}
                \setcounter{secnumdepth}{6}
                        ...

-roff

troff出力を選択します.mm マクロを使った出力を生成します. 何も指定がない場合のディフォールトは,この troff 出力です.

-mm

roff オプションと同じです.mm マクロを使った roff 出力を生成します.

-ms

troff出力ですが,ms マクロを使った出力を生成します.

-[no]listd

plain2 は,標準で列挙型リストの出力に際して, 番号の種類や括弧などを忠実に出力するめの処理を行います."-nolistd" を指定すると,入力中での番号の付け方と関係なく, 単純な列挙型リストして出力します.

-[no]space

標準では入力文書中の空白は, そのまま出力中でも空白行として出力されますが,このオプションをつけることで, 余分な空白行を削除して出力します. 環境変数などで,ディフォールトが nospace に指定されている場合, "-space"によって,空白行を出力するように変更できます.

-[no]pre

plain2の LaTeX出力,troff出力の先頭には, プリアンプル部分がつけられています.plain2の出力を,複数連結したり, 他の LaTeXや troffの文書に取り込んで使う場合, このオプションでプリアンプル出力をはずすことができます.

                % plain2 -tex -nopre example.pln
                \title{
                はじめてのplain2}
                \author{
                内田昭宏\\
                }
                \date{
                1992/11/22}
                \maketitle
                        ...

環境変数などで,ディフォールトが nopre に指定されている場合, "-pre"によって,プリアンプルを出力させることができます.

-raw

入力文書中の特殊文字のクォートをしません.

-[no]acursec

入力文書に付けられたセクション番号をそのままの値で出力文書に反映させます.

-renum

入力テキストに対してリナンバー処理のみを行ないます. リナンバの対象は,リスト番号,セクション番号,そして,図表番号です.

-jis

変換した結果をJISコードで出力します.ディフォールトでは EUCコードで出力します.

-euc

変換した結果をEUCコードで出力します.ディフォールトの設定です.

-sjis

変換した結果をシフトJISコードで出力します. このオプションを指定した場合,入力もシフトJISコードにする必要があります.

-f file

出力カスタマイズファイルを指定します. ( plain2 の出力とカスタマイズ 章 )

解析オプション:
-table=ddd

テーブルの判定基準値を0から100の間で設定します. ディフォールトの値は50です. テーブルのつもりで書いた部分がテーブルにならないとき,少し大きめの値を設定します.

                # テーブルになり易くする
                % plain2  -table=80

-exam=ddd

例示の判定基準値を0から100の間で設定します.ディフォールトの値は 50です. 例示のつもりで書いた部分が例示にならないとき, 少し大きめの値を設定します.

                # 例示になり難くする
                % plain2  -exam=30

-indsec

セクションは行の先頭に書くことが基本ですが, セクションがインデントされている文書を,どうしても plain2 の入力として使う必要がある場合に使用してください.ただし, この機能を使うとセクションとリストの判別が不正確になります.

-ktable

JIS罫線を使って書かれたテーブルも解析します.ただし, 罫線を使ったテーブルは, 罫線文字を使って書かれた線画と判別することが困難なため,"[[T","]]T" を使ってテーブルの範囲を明示的に指定してください.


その他のオプション:

-ref

表番号,図番号,セクションのリファレンス機能を有効とします. この機能は LaTeX 出力を選んだときだけ利用可能です.

-v

処理の途中経過を表示します.また,不連続な章番号, リスト番号に警告メッセージを表示します.

                % plain2 -v example.pln
                Input 46 lines from "example.pln"
                Right Margin = 48
                [blank][section]5 16 27 [appendix][quotation][list]19-25 22-24
                [fig title][picture]38-45[table]30-36 [justified][example]10-14
                [section][plaintext]

- ヘルプ

"-help" 等,不正なオプションを入力することで, ヘルプメッセージを表示させることができます.

usage: plain2 [options] [files ...]
  ---- parser options ----                 ---- output options ----(default)
-table=dd: table factor  [0-100](def=50) -roff:     troff output
-exam=dd:  example factor[0-100](def=50)  -ms/-mm:   troff macro       (mm)
-indsec:   sections can be indented      -tex:      tex output
-ktable:enable JIS keisen table           -tstyle=ss:tex style / CSS file
-ref:      figure/picture reference      -html:     HTML output
                                          -htmlold:  old HTML output
  ---- encoding ----                      -htmlonce: HTML (one path) output
-jis:      JIS code output                -here:     HTML table/picture ref.
-sjis:     Shift-JIS code input/output   -renum:    renumbering only
                                         -[no]listd:list decoration    (on)
  ---- Others ----                       -[no]space:spacing            (on)
-v:        verbose output                -[no]pre:  preamble block     (on)
-dLevel:   debug level                   -[no]acursec: section numbers (off)
  ----- experimental ----                -raw:      quote special chars(off)
-pt=Size:  font size                     -f file:   output customization

plain2 r2.54 1994/04 by A.Uchida NEC Corporation
        (HTML output) by k-chinen@is.aist-nara.ac.jp, NAIST
        (unofficial patch 98/08/13 by N.Nide)
        (HTML table by KOBAYASHI Kenichi 2002/01/06)

コマンドライン以外でのオプション指定

オプションはコマンドラインの他に,環境変数に設定しておいたり, 入力ファイル中に指定することもできます.

plain2 は,次の順序でオプションを評価します.

  1. 環境変数変数
  2. コマンドライン
  3. 入力ファイル中のオプション

環境変数に定義されたオプションをコマンドラインで変更することはできますが, 入力ファイル中に記述されたオプションは, コマンドラインから変更することはできません.

環境変数によるオプション指定

環境変数 PLAIN2_INIT に予めオプションを設定することができます. 例えば,次のような設定をすることで,ディフォールトの出力形式を LaTeX に変更することができます.

        % plain2 example.pln            ← 標準では troff 出力
        .nr Ls 0
        .S 10 10+2
        .ce 999
        \fB\s+4はじめてのplain2
        \fP\s-4
        .ce 0
        .ad r
                ...
        % setenv PLAIN2_INIT -tex        ← 環境変数に LaTeX 出力を指定
        % plain2 example.pln            ← オプションなしでも
        \documentstyle[]{jarticle}         LaTeX出力が選択される
        \setcounter{secnumdepth}{6}
        \setcounter{tocdepth}{6}
        \topsep=0.1cm
        \parsep=0.1cm
        \itemsep=0.0cm
        \begin{document}
        \title{
        はじめてのplain2}
                ...

入力ファイル中のオプション指定

plain2入力文書の先頭にも,オプションを指定することができます. ファイル先頭のタイトル部分で,"option" というキーワードに続けて, コマンドラインでオプションを指定するのと同じ書式でオプションを記述します. タイトル部分がない文書の場合には,ファイル先頭にオプション行を書き, 続いて空白行をおいてください.

文書ファイルで指定した解析オプションの有効範囲は, そのファイル内に限定されます. また,出力オプションは,plain2 に最初に読み込まれるファイルに書かれた場合に限り有効です. 2番目以降ののファイル中に出力オプションがあった場合,警告メッセージが表示され, そのオプションは無視されます.

  1:     『plain2利用の手引き』
  2:             by A.Uchida
  3: option -table=0 -exam=40
  4: 
  5: タイトルに"-table=0"オプションがあるので,
  6: 以下の部分はテーブルになりません.
  7:     +-----------------------------+
  8:     | この領域は | テーブルに |
  9:     +-----------------------------+
 10:     | なり    | ません   |
 11:     +-----------------------------+

plain2利用の手引き

A.Uchida

タイトルに"-table=0"オプションがあるので, 以下の部分はテーブルになりません.

+-----------------------------+ | この領域は | テーブルに |+-----------------------------+ | なり | ません |+-----------------------------+



plain2 の扱う文書形式

plain2 は表plain2 の文書形式 に示す文書形式を扱うことができます. 明示的指定のところにアルファベットを示したものは, 後に述べるように明示的に文書形式を指定できるものです.

plain2 は,行全体, あるいは複数行からなる領域に対して文書形式をあてはめていきます. 行の途中から文書形式が変わったり,行の一部だけが別の文書形式となることはありません.

表 2.plain2の文書形式
文書形式 明示的指定
セクションタイトル
平文
引用
例示
テーブル
リスト
ページ
空白
線画
右寄せ
センタリング
図表題
付録
raw出力
コメントアウト
-
-
-
E
T
-
-
-
P
A
N
-
-
R
C

raw 出力とコメントアウトは通常のべた書き文書から自動的に判定されることのない特殊な機能です.raw 出力を指定された部分は,plain2 の処理を受けずに,そのままの形で出力されます.コメントアウトを指定された部分は出力されません.("-renum" を指定した場合は,コメントアウト部分もそのまま出力されます)

明示的文章形式指定

べた書き本来の主旨からは外れますが,入力文書中の指定した範囲の文書形式を明示的に指定する方法が用意されています.

例えば, 次のようにテーブルがきちんと出力されない,例示のつもりで書いた部分が行詰めされてしまうなど,どうしても思い通りの出力とならない場合は,明示的な指定を使うこともやむをえないでしょう.

  1: plain2 は次のようなテーブルをうまく切り出して
  2: 解析することができません.
  3:       -------------------------------
  4:          日付 |   行き先  | 交通費
  5:       ===============================
  6:          7/07 |   天王台  |  880円
  7:          7/21 |   宮崎台  |  400円
  8:          8/17 | 池尻大橋  |  220円
  9:          8/18 | 池尻大橋  |  220円
 10:       -------------------------------
 11: このような場合は,明示的に文書形式を指定する
 12: しかないでしょう.

plain2 は次のようなテーブルをうまく切り出して解析することができません.

-------------------------------

日付 | 行き先 | 交通費===============================

7/07 | 天王台 | 880円7/21 | 宮崎台 | 400円8/17 | 池尻大橋 | 220円8/18 | 池尻大橋 | 220円-------------------------------

このような場合は, 明示的に文書形式を指定するしかないでしょう.


文書形式を明示的に指定するためには, その領域を"[[X"と"]]X" (Xはテキストタイプを指定するアルファベット一文字 )で囲みます."[[X"と"]]X"は両方とも行の先頭に書きます.

  1: plain2 は次のようなテーブルをうまく切り出して
  2: 解析することができません.
  3: [[T
  4:       -------------------------------
  5:          日付 |   行き先  | 交通費
  6:       ===============================
  7:          7/07 |   天王台  |  880円
  8:          7/21 |   宮崎台  |  400円
  9:          8/17 | 池尻大橋  |  220円
 10:          8/18 | 池尻大橋  |  220円
 11:       -------------------------------
 12: ]]T
 13: このような場合は,明示的に文書形式を指定する
 14: しかないでしょう.

plain2 は次のようなテーブルをうまく切り出して解析することができません.

日付 行き先交通費
7/07
7/21
8/17
8/18
天王台
宮崎台
池尻大橋
池尻大橋
880円
400円
220円
220円

このような場合は, 明示的に文書形式を指定するしかないでしょう.


指定できる文書形式は次の7種類です.

E: 例示(プログラム例,簡単な図など )
T: テーブル
P: 線画による図形
A: 右寄せ
N: センタリング
R: plain2 の処理をせずそのまま出力する

LaTeX/troff のコマンドをべた書き文に挿入するときなど
C: テキストブロックをコメントアウト

RとCは, 明示的に指定する方法以外ではおこることのない特殊な形式です.

  1: raw 出力
  2: [[MT
  3: ここは,{\Large そのまま}出力されます
  4: ]]M
  5: コメントアウト出力
  6: [[C
  7: この部分は出力
  8: されません.
  9: ]]C

% plain2 -tex -nopre hint_raw.pln
\par
raw 出力
ここは,{\Large そのまま}出力されます
\par
コメントアウト出力
%% この部分は出力
%% されません.

明示的な指定を使った例を以下に示します.

  1: [[E
  2: ここは,例示ブロック(non-fill, constant-width)として
  3: 出力されます.
  4: ]]E
  5: [[T
  6: ここは テーブル として
  7: 出力  され   ます
  8: ]]T
  9: [[MT
 10: ここは,{\Large そのまま}出力されます
 11: ]]M
 12: [[P
 13:     ┌→線画に
 14: ここは─┘ なります
 15: ]]P
 16: [[C
 17: この部分は出力
 18: されません.
 19: ]]C
 20: [[N
 21: ここはセンタリングして
 22: 出力されます
 23: ]]N
 24: [[A
 25: ここは右寄せで
 26: 出力されます
 27: ]]A
 28: 


行内の特殊機能

plain2 の文書形式には含まれていない, フットノートや,文字フォント指定などの文書清書系の機能を利用するため, 特別な記法"((X","))",(Xは機能指定するアルファベット一文字)が用意されています.


f: フットノート
b: ボルドフォント
r: rawモード("[[R","]]M"と同様 )
x: リファレンス(LaTeXのみ )
i: インデックス(LaTeXのみ )

  1: plain2はUNIX((fUNIXはUSLが開発しライセンス
  2: しています))上で開発されました.
  3: 	・行の中で一部を((bBOLD FONT にして
  4: 	  強調))することができます.
  5: 	・清書系の機能を直接使うことも
  6: 	  ((r{\large 可能}))です.
  7: 	・使えるのは平文,リストの中だけです.

plain2は UNIX*1 上で開発されました .


*1 UNIXは USLが開発しライセンスしています


ただし, この機能を使えるのは


の中に限られます.セクションタイトルなど, これ以外の部分では行内の特殊機能を使うことはできません.

英文文書

plain2 は入力文書中に漢字コードが全く含まれていない場合, 英文文書と判定します.英文文書と日本語文書では, 文書解析と出力の処理に一部相違があります.

解析:
列挙リスト:
英文文書では,順序番号 +ドットという形式のリストは許されません.

例示:
英文文書では,漢字 /ローマ字の比率という条件が使えません.また, 英文文書は日本後の文書に比べて空白が多く含まれるため,英文文書の場合, 日本語文書に比べて例示となる条件が厳しくなります.

テーブル:
例示と同様の理由で枠線のないテーブルに対しての判定条件が厳しくなります.

出力:
日本語文書の場合,図表の題に"図","表" を使います. 英文文書の場合には,"Figure","Table"を使います.


個々の文書形式の詳細

この章では,各文書形式について,より詳細に説明します.

タイトルの詳細

文書ファイルの先頭から,最初の空白行までの範囲の行が, 全て表タイトルのパターン に挙げるパターンにマッチすると, そのブロックはタイトルと判定されます.ただし,標準のLaTeX出力では配布先, 連絡先に指定した部分は出力されません.

タイトルのパターン 中に示した形式 (A,B,C)はマッチしたパターンの中からどの部分をタイトルとして取り出すかを表しています.

  1. パターンより右側の部分を抜き出す .ただし,パターンより2個以上の空白がある場合, そこから右の部分だけが切り出される .

    例(△は空白) 抜き出される部分
    題名△pain2△ユーザガイド
    題名△pain2△△ユーザガイド
    [△題名△]△△pain2△ユーザガイド
    pain2△ユーザガイド
    ユーザガイド
    pain2△ユーザガイド


  2. パターンで囲まれた内側の部分を抜き出す
  3. パターンにマッチした行全体を使う

表 3.タイトルのパターン
種類
 
パターン
 
形式
 

 
LaTeX
標準
troff
標準

題名

 
題名
『』
【】
引数1
A
B
B
A
題名 plain2ユーザガイド
『plain2ユーザガイド』
【はじめてのべた書き入力】
引数1 ○○○○○○



 



 
文書
番号
文書番号
引数2
A
A
文書番号 ABC-92-01-222
引数2 ○○○○○○

 

 


日付


 
日付


89-95/
/89-95
引数3
A
C
C
C
C
A
日付 Tue Oct 13 1992
1992年10月

92/10/13
10/13/92
引数3 ○○○○○○





 





 

所属
部門


 
所属
本部
開発部
研究部/研究所
開本/開研/技研
引数4
C
C
C
C
C
A
所属 田町電機
UNIX本部
フリーソフト開発部
PDS研究所
海岸通り技研
引数4 ○○○○○○





 





 


配付先


 
配付先
配布先
各位
殿

引数5
A
A
C
C
C
A
配付先 別紙
配布先 ユーザの皆様
関係者各位
山田部長殿
鈴木課長様
引数5 ○○○○○○





 





 
著者


 
担当
著者
by
引数6
A
A
A
A
担当 やまだたろう
著者 やまだたろう
by 五十嵐一郎
引数6 ○○○○○○



 



 
連絡先

 
連絡先
TEL,Tel,tel
引数7
A
A
A
連絡先 foobar@foo.bar.baz.co.jp
TEL 03-5432-####
引数7 ○○○○○○


 


 
 引数8 A 引数8 ○○○○○○
 引数9 A 引数9 ○○○○○○
その他
 
option
comment

 
option -exam=70
comment this is a comment

 

 

次の3つは, タイトルの書き方のいくつかのバリエーションを示しています.

  1: 	『はじめてのplain2』
  2: 			by 三田 一郎
  3: 			フリーソフトウェア研究所
  4: 			1992/11/22
  5: 
  6: 1.  タイトルの書き方
  7: 
  8: タイトル部分には空白行を入れることはできません.
  9: タイトル部分と本文との間には一行以上の空白を置いてください.

  1: 題名		はじめてのplain2
  2: 著者		三田 一郎
  3: 日付		1992/11/22
  4: 所属		フリーソフトウェア研究所
  5: 
  6: 1.  タイトルの書き方
  7: 
  8: タイトル部分には空白行を入れることはできません.
  9: タイトル部分と本文との間には一行以上の空白を置いてください.

  1: [ 題名 ]	はじめてのplain2
  2: [ 著者 ]	三田 一郎
  3: [ 日付 ]	1992/11/22
  4: [ 所属 ]	フリーソフトウェア研究所
  5: 
  6: 1.  タイトルの書き方
  7: 
  8: タイトル部分には空白行を入れることはできません.
  9: タイトル部分と本文との間には一行以上の空白を置いてください.

これらの文書ファイルを plain2 に通して清書すると,下のような出力となります.

はじめてのplain2

1992/11/22
フリーソフトウェア研究所 三田 一郎

タイトルの書き方

タイトル部分には空白行を入れることはできません. タイトル部分と本文との間には一行以上の空白を置いてください.


形式Aのパターンでは, パターンの両側に括弧を付ける形式も許されます.半角/全角の括弧, 角括弧のいずれでも利用できます.

  1: [ 題名 ]	はじめての plain2
  2: [ 著者 ]	三田 一郎
  3: ( 日付 )	1992年 11月 22日
  4: [ 所属 ]	フリーソフトウェア 研究所
  5: 
  6: 1.  タイトルの書き方
  7: 
  8: このような形式も可能です.

はじめての plain2

1992年 11月 22日
フリーソフトウェア 研究所 三田 一郎

タイトルの書き方

このような形式も可能です.


タイトルのつもりで書いた領域の中に一行でもパターンにマッチしない行があると, タイトルとは解釈されません.次の例は著者名のつもりで書いた名前の行が, どのパターンにもマッチしないので,タイトルになりません.

  1: 	『タイトル解析失敗の例』
  2: 			plian2ユーザの皆様各位
  3: 			晴海次郎
  4: 			1992年11月22日
  5: 
  6: 著者名のパターンが正しくないので,タイトル
  7: として認識されません.

『タイトル解析失敗の例』

plian2 ユーザの皆様各位晴海次郎1992年11月 22日

著者名のパターンが正しくないので, タイトルとして認識されません.


タイトルのパターン を見ると, 一つの行が複数のパターンにマッチする可能性のあることに気が付きます. 例えば,"山田本部長様"という行は,配付先と所属部門の両方のパターンにマッチします. このような行に対しては,表の中で前の方に書いてあるパターンが優先されるので, この例は配布先と解釈されます.

題名が複数行にわたる場合や, 著者が二人以上いるような場合など,同一種類のパターンを複数行書くこともできます.

題名,著者名等の他に,オプションの設定と,コメント行を書くことができます. comment 機能は,RCS や SCCS を使って文書の版管理をする場合などに使ってください.

  1: 題名		タイトルの書き方
  2: 題名		--正しい例--
  3: 配布先		plain2ユーザ各位
  4: 担当		有明 太郎
  5: 日付		Tue Oct 11 1992
  6: comment $Id: title_cmplx.pln,v 2.1 1994/04/19 09:34:20 uchida Exp $
  7: option -table=0 -exam=60
  8: 
  9: 1. タイトル記述方法の例

タイトルの書き方 --正しい例--

Tue Oct 11 1992
有明 太郎plain2ユーザ各位

タイトル記述方法の例


タイトルの出力

標準のLaTeX出力では,"\title{}","\author{}", "\data{}","\maketitle", の機能を使ってタイトルを出力します.標準では,文書番号,配布先, 連絡先は出力されません.LaTeXで,配布先, 連絡先のフィールドをタイトルの一部に表示したい場合や, タイトルを好みの形に変えたい場合には,出力カスタマイズの機能を利用してください.

troffでは,LaTeX の jarticleスタイルのタイトル出力をまねた形式で出力します.

セクションタイトルの詳細

行の先頭にセクション番号があり, 行の前が空白行(あるいは,ファイル先頭)であると, その行はセクションタイトルであると推定されます.ただし,この条件は列挙型リストの判定条件と競合するときがあります.リストにもなりうる形式の場合には,さらにいくつかの判定条件を適用した後,最終的にセクションタイトル判断されます.

セクション番号は,"番号+ドット"の繰り返しという形をしています. 番号とドットは,全角/半角どちらでもかまいません.

セクション番号の深さが2以上であれば,最後のドットを省略することができます. セクション番号が全角で書かれていれば,深さ 1でもドットを省略することができます.ドットを省略した場合には, 番号とセクションタイトルの間には一個以上の空白が必要です.

  1: 1.はじめに
  2: 	全角数字+全角ドット
  3: 
  4: 2.  概要
  5: 	半角の数字.稀にリストと混同の危険がある
  6: 
  7: 2.3.サブセクション
  8: 	半角数字+半角ドットの繰り返し
  9: 
 10: 2.3. サブセクション
 11: 	ドットの後の空白はあってもなくても良い
 12: 
 13: 3 かんたんな使い方
 14: 	全角数字 + 空白.ドットなし
 15: 
 16: 3.1 サブセクション
 17: 	サブセクションであれば,
 18: 	最後のドットはあってもなくても良い
 19: 
 20: 3これ以降は不正なセクションです.
 21: 	これは不正.ドットがない場合,空白が必要
 22: 
 23: 3.3不正サブセクション
 24: 	これは不正.
 25: 	章番号の直後には空白かドットが必要
 26: 4.不正セクション
 27: 	これは不正.
 28: 	セクションタイルの前が空白でない
 29: 

はじめに

全角数字 +全角ドット

概要

半角の数字. 稀にリストと混同の危険がある

サブセクション

半角数字 +半角ドットの繰り返し

サブセクション

ドットの後の空白はあってもなくても良い

かんたんな使い方

全角数字 + 空白. ドットなし

サブセクション

サブセクションであれば, 最後のドットはあってもなくても良い

3これ以降は不正なセクションです.

これは不正.ドットがない場合, 空白が必要

3.3 不正サブセクション

これは不正. 章番号の直後には空白かドットが必要

4. 不正セクション

これは不正. セクションタイルの前が空白でない


セクションにならない場合の対処

セクションタイトルが思い通りの出力にならない場合, いくつかの原因が考えられます.

  1. セクションとしての基本条件を満たしていない
  2. 列挙型のリストになってしまう

    セクション番号が半角+半角ドットの場合, 列挙型リストとの判別に失敗することがあります.このような場合, やはり,セクションの前後に空白行を置くことでセクションと判断させることができます. また,セクション番号に全角を使えばリストと判定されることはありません.

  1: 1. はじめに
  2: 
  3: 半角数字を使ったセクションと,
  4: 列挙型のリストは同じ形式をしています.
  5: 
  6: 1. 番号が1から始まっていて
  7: 2. 空白行が間に無ければリストになります
  8: 
  9: 1. 前後に空白行があれば
 10: 
 11: 2. セクションとなります
 12: 
 13: 4. まとめ
 14: 
 15: セクション・リストの誤判定例でした.

はじめに

半角数字を使ったセクションと, 列挙型のリストは同じ形式をしています.

  1. 番号が 1から始まっていて
  2. 空白行が間に無ければリストになります

前後に空白行があれば

セクションとなります

まとめ

セクション・リストの誤判定例でした.


インデントされたセクションタイトル

セクションタイトルがインデントされた文書を外部から入手して, どうしてもplain2 に通して LaTeX に変換して使いたいということがあります. 通常,plain2 はインデントされたセクションタイトルをセクションタイトルとは解釈しませんが,"-indsec" オプションを利用することで,インデントされたセクションタイトルの使用を許すことができます.

  1: 1. はじめに
  2: 
  3: インデント付きセクションを許すのは
  4: 例外的なケースに限ってください
  5: 
  6:   1.1. インデントされたセクション
  7: 
  8:   1.2. おわり
  9: 

はじめに

インデント付きセクションを許すのは例外的なケースに限ってください

インデントされたセクション

おわり



セクション番号の出力への反映

plain2 はセクション番号の値そのものにはほとんど注意を払わず,セクションの深さ(ドットで区切られた並びの数)だけに注目しています.

例外として, 文書ファイルの先頭に表れるセクションが "1."以外のセクション番号を持つ場合,LaTeX や troff を通した出力も,入力と同じ番号から始まるように調整されます.これは,文書の途中から一部分だけを抜きだして清書する場合を考慮したものです.

  1: 3.2. 環境変数によるオプション指定
  2: 
  3: 3.3. 入力ファイル中の指定
  4: 
  5: 4. plain2 の扱う文書形式
  6: 
  7: 4.1. 明示的文章形式指定
  8: 

環境変数によるオプション指定

入力ファイル中の指定

plain2 の扱う文書形式

明示的文章形式指定


入力文書中のセクション番号の値をそのまま出力に反映させることも可能です. これには "-acursec" オプションを使用します.

  1: 2.  はじめに
  2: 
  3: 使い道がよくわからないですが.
  4: 強引にセクション番号を設定します.
  5: 
  6: 3.2.4. 不連続セクション番号
  7: 
  8: 不連続なセクション番号が
  9: そのままの値で出力されます.
 10: 
 11: 4.5. おわり
 12: 

はじめに

使い道がよくわからないですが. 強引にセクション番号を設定します.

不連続セクション番号

不連続なセクション番号がそのままの値で出力されます.

おわり


セクションの出力

LaTeXでは,"\section{}","\subsection{}",から "\subparagraph{}"までを使ってを出力します. 標準のLaTeX出力には,セクションタイトルの深さが 5レベルまでという制限があります.この制限を越えた場合,全て "\subparagraph{}"として出力します.

  1: 1. はじめに
  2: 
  3: 1.1. つぎに
  4: 
  5: 1.1.1. そのつぎに
  6: 
  7: 1.1.1.1. さらにそのつぎに
  8: 
  9: 1.1.1.1.1. まだそのつぎ
 10: 
 11: 1.1.1.1.1.1. これはLaTeXの限界を越える

はじめに

つぎに

そのつぎに

さらにそのつぎに
まだそのつぎ

セクション番号の付かないセクションタイトル "\section*{}" を使いたい場合,入力文書には適当なセクション番号を付けておいて, 出力のカスタマイズで対応します. (出力形式のカスタマイズ 章 )

troff出力のセクションタイトルは mm マクロの ".H" を使用します. troff ではセクション深さの制限は 7レベルまでです.この制限を越えた場合, troff の処理の段階でエラーとなります.

        % ditroff deepsec.pln
        ********************
        ERROR:(<deepsec.pln>)input line 5:H:bad arg:8
        ********************
        Processing has been terminated.

リストの詳細

行の先頭につけられたリストマークや記述リストのタイトル部分によって, その行がリストであることが推定されます. リストの中には,テーブルや平文, さらに別のリストをネストして置くこともできます.

行の先頭にビュレットやダッシュを持つ項目型のリストはリスト項目が一つでもリストと判定されます.ただし,同じリストに属するリストの項目の各行は, 全て先頭が同じ位置にインデントされていなればななりません.

  1: 次の例が列挙リストになっては困ります.
  2: 	皆さんもご存知のように,円周率は
  3: 	3.14159.....と無限に続く値です.
  4: 
  5: 次の例は列挙リストになりません.
  6: 	  i) 先頭が不揃い
  7: 	 ii) 一項目しない列挙リスト
  8: 	iii) 見だしの長過ぎる記述リスト
  9: 	 iv) その他
 10: 
 11: これは,項目が二つのリスト.
 12: 	  5行目:  セクションタイトル
 13: 	  19行目: 項目型リスト
 14: 
 15: 次の例は項目が一個のリストが二つと解釈されます.(行間があく)
 16: 	   5行目: セクションタイトル
 17: 	  19行目: 項目型リスト

次の例が列挙リストになっては困ります.

皆さんもご存知のように, 円周率は3.14159.....と無限に続く値です.

次の例は列挙リストになりません.

i) 先頭が不揃いii) 一項目しない列挙リストiii) 見だしの長過ぎる記述リスト

iv) その他

これは,項目が二つのリスト.

5行目: セクションタイトル
19行目: 項目型リスト

次の例は項目が一個のリストが二つと解釈されます. (行間があく)

5行目: セクションタイトル
19行目: 項目型リスト

項目型リスト

項目型リストには表項目型のリストマーク に示すリストマークのいずれかを使うことができます.

表 4.項目型のリストマーク
マーク 種別

*

+
ビュレット
半角アステリスク
全角アステリスク
半角プラス
ビュレット


 
-
半角ダッシュ
全角ダッシュ
ダッシュ
 

項目型リストは,一項目だけでも項目リストになるため, 行の先頭にたまたまビュレット("・")やダッシュ("-")があると, 項目型リストと誤解されることがあるので注意してください.

項目型リストの出力

LaTeX出力では入力文中でのどのリストマークが使われていても, itemize 環境を使ったリストとして出力します. 出力中ではネストのレベルに応じてリストマークが LaTeX によって, 自動的に決められます.またネストの深さには LaTeX の場合4レベルまで, troff の場合6レベルまでという制限があるので注意してください.

  1: ・LaTeXでの項目リストのマーク
  2:   - ダッシュ
  3:     - ダッシュ
  4:       - ダッシュ(LaTeXのネスト限界)
  5:   ・ビュレット
  6:     ・ビュレット
  7:       ・ビュレット(LaTeXのネスト限界)


troff出力では,ビュレットリストとダッシュリストを区別して, ".ML"を使って出力します.リストのネストに応じて,ビュレットに対しては "\(bu", "・", "◇",ダッシュに対しては "-", "−" をリストマークとして使います.

列挙型リスト

列挙型のリストマークは,リストの順序を表す順序番号と, 括弧やドットを使った番号の修飾とで構成されます.

順序番号には数字,アルファベット,ローマ数字のいずれかを使うことができます. 番号の修飾には,括弧やドットを使った各種の形式が用意されています.

順序番号:
数字番号:
  • 半角数字 (1,2,3,...)
  • 全角数字(1,2,3, ...)

アルファベット:
  • 半角小文字 (a,b,c,...)
  • 半角大文字 (A,B,C,...)
  • 全角は使えません

ローマ数字:
  • 半角小文字ローマ数字 (i,ii,iii,..,iv,v,..)
  • 半角大文字ローマ数字 (I,II,III,..,IV,V,..)
  • 全角小文字ローマ数字(i,ii,iii,..,iv ,v,..)
  • 全角大文字ローマ数字(I,II,III,..,IV,V ,..)

修飾:
順序番号とドット,括弧との間には空白を入れることはできません.
半角ドット:
        (".")
右側括弧:
半角/全角の,括弧(")")角括弧 ("]")
両側括弧:
半角/全角の,括弧("()")角括弧 ("[]")

また,英文文書では,半角アルファベット +ドットの形式のリストも使うことはできません.

以下のような入力は列挙型リストとは解釈されません.

  1: 不正なリストの例
  2: 
  3: A]	大文字全角アルファベット
  4: B]	大文字全角アルファベット
  5: 
  6: (1)	括弧の修飾が異なる項目がある
  7: 2)	括弧の修飾が異なる項目がある
  8: 3.	括弧の修飾が異なる項目がある
  9: 
 10: 	 i) 行の先頭が
 11: 	ii) 揃っていない
 12: 
 13: 	a) リスト自身よりインデントされていない行がはさまる
 14: ここで切れる
 15: 	b) リスト自身よりインデントされていない行がはさまる

不正なリストの例

A] 大文字全角アルファベットB] 大文字全角アルファベット

(1) 括弧の修飾が異なる項目がある2) 括弧の修飾が異なる項目がある3. 括弧の修飾が異なる項目がある

         i) 行の先頭が
        ii) 揃っていない

a) リスト自身よりインデントされていない行がはさまる

ここで切れる

b) リスト自身よりインデントされていない行がはさまる


入力文書中のリストの番号は適当に付けておけば,LaTeX や troff で清書するとリナンバリングされます.ただし,リストの途中に1 または A 等,リストの先頭項目であることを示す項目が現れた場合, そこがリストの切れ目となり,それ以降は別のリストとなります.

リストの番号を全部"1"や"A"にすると,リストと判断されません.

  1: 1) 番号を全部1にすると
  2: 1) リストになりません
  3: 
  4: 2. とりあえず,全部2にする
  5: 2. これで,うまくいきます
  6: 
  7: 1) リストの途中で
  8: 2) 番号が1になると....
  9: 1) そこから
 10: 2) 別のリストになります
 11: 

1) 番号を全部 1にすると1) リストになりません

  1. とりあえず,全部 2にする
  2. これで, うまくいきます

  1. リストの途中で
  2. 番号が1になると....
  1. そこから
  2. 別のリストになります


列挙型リストの出力

標準的な LaTeX の列挙型リスト出力環境である enumerate環境では, 順序番号の種類や修飾等の特徴を細かく指定することができません. plain2 は列挙型リストの特徴を, なるべく入力文書そのままの形で清書結果に反映させるように, リストマークを再定義して enumerate環境を使っています.

troff出力の場合には, 順序番号の種類によって数字リスト ".AL 1",アルファベットリスト ".AL i",ローマ数字リスト".AL I" を使い分け,".AL 1 ()" のように,n括弧の修飾も忠実に出力します.

  1: a.	小文字半角アルファベット+半角ドット
  2: b.	小文字半角アルファベット+半角ドット
  3: [1] 	半角数字+半角括弧
  4: [2]  	半角数字+半角括弧
  5: (1) 全角数字+全角括弧
  6: (2) 全角数字+全角括弧
  7: I)	全角大文字ローマ数字+全角括弧
  8: II)  ローマ数字+全角括弧
  9: 

  1. 小文字半角アルファベット +半角ドット
  2. 小文字半角アルファベット +半角ドット
  1. 半角数字 +半角括弧
  2. 半角数字 +半角括弧
  1. 全角数字+全角括弧
  2. 全角数字+全角括弧
  1. 全角大文字ローマ数字 +全角括弧
  2. ローマ数字 +全角括弧


plain2 起動時に,"-nolistd" オプションを指定すると,LaTeX出力では入力文書中でのリスト番号や修飾の種類とは関係なく, 単純な enumerate 環境のリストにとして出力されます. troff出力の場合にも括弧修飾の指定が出力されなくなります.

次の出力は"-nolistd"オプションを使ったものです.

  1. 小文字半角アルファベット +半角ドット
  2. 小文字半角アルファベット +半角ドット
  1. 半角数字 +半角括弧
  2. 半角数字 +半角括弧
  1. 全角数字+全角括弧
  2. 全角数字+全角括弧
  1. 全角大文字ローマ数字 +全角括弧
  2. ローマ数字 +全角括弧


plain2 自身には,ネストの制限がありませんが,LaTeX では4レベル, troff では6レベルまでというネストの制限があります. レベルの制限を超えた場合 plain2 は警告メッセージを表示します.

  1: 1) リストの多段ネスト
  2:   1) レベル2
  3:     1) レベル3
  4:       1) レベル4
  5: 		    ここが LaTeXの限界
  6:       2) レベル4-End
  7:     2) レベル3-End
  8:   2) レベル2-End
  9: 2) レベル1-End

  1. リストの多段ネスト
    1. レベル 2
      1. レベル 3
        1. レベル 4

          ここが LaTeXの限界
        2. レベル 4-End
      2. レベル 3-End
    2. レベル 2-End
  2. レベル 1-End

記述型リスト

記述型リストは行頭のタイトル部分が,"[]"で囲まれているか, 最後に半角コロン":"が付けられていることで識別されます.(全角コロン ":"は使えません)記述型リストのタイトル部分の長さには制限(全角 19文字まで)があり,長すぎる場合にはリストになりません.

  1: 記述型リストのタイトル部分の長さの制限について:
  2: 	タイトルが長過ぎる場合,記述リストとは認識されません.
  3: 
  4: 制限ぎりぎりに収まっているタイトル部分:
  5: 	このリストのタイトルが制限ぎりぎりの長さです.
  6: 
  7: 全角コロン:	全角のコロンではリストになりません.
  8: 

記述型リストのタイトル部分の長さの制限について :

タイトルが長過ぎる場合,記述リストとは認識されません .

制限ぎりぎりに収まっているタイトル部分: このリストのタイトルが制限ぎりぎりの長さです.

全角コロン: 全角のコロンではリストになりません.


記述リストを示すために使用したコロンや角括弧は, 清書済みのテキストにもそのまま出力されます. コロンや角括弧を省いた記述型リストを書く方法は用意されていません.

特別な場合として,以下の記号を先頭に付けたリストが, そのマークを使った記述型のリストとして出力されます.

"→←☆★▽▼△▲□■◇◆●◯○◎※ "

  1: ★ 特殊記号を使ったリスト(記述型リストとして扱う)
  2: 	← 星印や丸印を使ったリストを書きたいという声に応えました
  3: 	→ これが記述リストの一部になっているのは実現上の都合です
  4: 	※ 質問禁止

特殊記号を使ったリスト(記述型リストとして扱う )
星印や丸印を使ったリストを書きたいという声に応えました
これが記述リストの一部になっているのは実現上の都合です
質問禁止

記述型リストの出力

LaTeX出力では description環境を使ったリストとして出力します. troff 出力では ".VL 4 0" を使います.

リスト先頭行と継続行

項目型と列挙型のリストには,リストの題目と説明文が分かれた形のリストと, 説明文だけからなるリストとがあります

例えば,つぎに示すリストは, "troff" と "LaTeX" というリストの題目と,その説明文という構成になっています.

      ・troff
          UNIX標準の文書清書システム
      ・LaTeX
          Lamport による TeX の拡張

一方,次の例のリストは,二つの説明文だけからなります.

      ・本物のUNIXのドキュメントは troff
        で書かれています
      ・最近は LaTeX で書かれている本を
        多くみかけます

plain2は,ビュレットや番号を持つリスト先頭の行と, その次の行の間のインデント付け,リスト先頭の行の長さから, 題目と説明文の切れ目の有無を判定しています.

まず,リストの2行目以降のインデント位置が, リスト先頭行のリストマーク開始位置と説明文開始位置の間にあれば, その行は,リスト本文に継続する行と判定されます. 先頭の位置がリスト本文開始位置よりもインデントされている場合は,リストに含まれる別の文章と判定されます.

        A)  リスト本文
       ↑   ↑
       │   リスト本文開始位置
       リストマーク開始位置

例外として, リスト先頭行の長さがテキスト幅の半分より短いときには,無条件に切れ目があるものと判定されます.

また,一行だけからなるリストが連続する場合, リストの最後の行とその次の行は無条件に別々の文と判定されます.

  1: ・つぎの行のインデントは,先頭行の本文と同じなので
  2:   先頭行に連続するテキストです
  3: ・つぎの行のインデントは,先頭行のリストマーク位置と同じなので
  4: やはり先頭行に連続するテキストです
  5: ・つぎの行は先頭行よりもインデントされているので
  6:     べつのテキストとなります("『いるので』の直後で"で改行される)
  7: ・先頭の行が
  8:   短いときはいずれにしても改行されます.
  9: 
 10: 以下に挙げる名前をご存知だろうか
 11: minix:      mini size unix for PC
 12: xinu:       xinu is a reversed image of unix
 13: gnu:        gnu is not unix!
 14: これらはどれもUNIXに対しての...
 15: 

以下に挙げる名前をご存知だろうか

minix: mini size unix for PC
xinu: xinu is a reversed image of unix
gnu: gnu is not unix!

これらはどれもUNIXに対しての...


テーブルの詳細

以下に,テーブルの例を示します.

  1: 全く枠線のないテーブル
  2:     地区  最寄り駅    時間
  3:     本社  山の手線田町   0.2
  4:     我孫子 常磐線天王台   1.5
  5:     玉川  南部線向河原   1.0
  6:     府中  京王線分倍河原  1.0
  7: 
  8: 枠線の有るテーブル
  9:    +--------+---------------+-----+
 10:    | 地区  |最寄り駅    |時間 |
 11:    +========+===============+=====+
 12:    | 本社  |山の手線田町  | 0.2 |
 13:    | 我孫子 |常磐線天王台  | 1.5 |
 14:    | 玉川  |南部線向河原  | 1.0 |
 15:    | 府中  |京王線分倍河原 | 1.0 |
 16:    +--------+---------------+-----+
 17: 
 18: 交点の種類は任意
 19:    --------------------------------
 20:    | 地区  |最寄り駅    |時間 |
 21:    |==============================|
 22:    | 本社  |山の手線田町  | 0.2 |
 23:    | 我孫子 |常磐線天王台  | 1.5 |
 24:    | 玉川  |南部線向河原  | 1.0 |
 25:    | 府中  |京王線分倍河原 | 1.0 |
 26:    |--------|---------------|-----|
 27: 
 28: 両側に枠線がない.(明示的指定が必要)
 29: [[T
 30:     ------------------------------ 
 31:     地区  |最寄り駅    |時間 
 32:     ============================== 
 33:     本社  |山の手線田町  | 0.2 
 34:     我孫子 |常磐線天王台  | 1.5 
 35:     玉川  |南部線向河原  | 1.0 
 36:     府中  |京王線分倍河原 | 1.0 
 37:     ------------------------------ 
 38: ]]T
 39: 

全く枠線のないテーブル

地区 最寄り駅 時間
本社 山の手線田町 0.2
我孫子常磐線天王台 1.5
玉川 南部線向河原 1.0
府中 京王線分倍河原 1.0

枠線の有るテーブル

地区 最寄り駅 時間
本社
我孫子
玉川
府中
山の手線田町
常磐線天王台
南部線向河原
京王線分倍河原
0.2
1.5
1.0
1.0

交点の種類は任意

地区 最寄り駅 時間
本社
我孫子
玉川
府中
山の手線田町
常磐線天王台
南部線向河原
京王線分倍河原
0.2
1.5
1.0
1.0

両側に枠線がない.(明示的指定が必要 )

地区 最寄り駅 時間
本社
我孫子
玉川
府中
山の手線田町
常磐線天王台
南部線向河原
京王線分倍河原
0.2
1.5
1.0
1.0


テーブルは "-", "=", "|", "+" などの枠線を使って囲むのが基本ですが, 枠線のないテーブルを書くこともできます.ただし, 枠線のないテーブルに対しては厳しい判断基準が使われるので, 期待どおりにテーブルにならない場合は,オプションでテーブルの判定基準を調整するか, 明示的にテーブルと指定してください.

次に示す例では,標準の解析パラメータで plain2 を通すと,テーブルのつもりで書いた3行目から5行目が, 例示になってしまいます.

  1: 次のように枠のないテーブルは,
  2: 正しくテーブルと解釈されない場合があります.
  3: 	評価値を変える	       -table=60
  4: 	明示的に指定する       "[[T"と"]]T"
  5: 	そのまま我慢する       多分例示になる

% plain2 -tex -nopre table_adjust.pln
\par
次のように枠のないテーブルは,
正しくテーブルと解釈されない場合があります.
{\list{}{\leftmargin=8ex}\item[]
\par
評価値を変える         -table$=$60
明示的に指定する       "[[T"と"]]T"
そのまま我慢する       多分例示になる
\endlist}

テーブル判定の基準値を 60 に変更すると, テーブルとして解釈されます.

% plain2 -table=60 -tex -nopre table_adjust.pln
\par
次のように枠のないテーブルは,
正しくテーブルと解釈されない場合があります.
~\\
\mbox{}\begin{center}
\begin{tabular}{ll}
評価値を変える   & -table$=$60\\
明示的に指定する & "$[$$[$T"と"$]$$]$T"\\
そのまま我慢する & 多分例示になる\\
\end{tabular}\\
\end{center}

テーブルが正しく判定されるためには, plain2 が入力文書からテーブルのブロックを正しく抜き出せるように, テーブルの前後に空白行をいれるか,テーブル全体をインデントしておく必要があります.

ただし,テーブルの両サイドが罫線で囲まれていないと, インデントや空白行を入れても, テーブルの領域を文書から切りだすことに失敗することがあります.このような場合には,"[[T","]]T" を使ってテーブルの領域を明示的に指定してしまった方が良いでしょう.

JIS罫線テーブル

JIS罫線を使って書いたテーブルは,は線画として解釈されます. そのままでも,入力イメージに忠実に出力が得られますが,どうしても, LaTex や troff のテーブルとして出力させたい場合には, "-ktable"オプションを使います.線画の場合と同様, PC9800の罫線素片は使用できません.

また,"-ktable" オプションを指定した場合でも,下の例のように明示的にテーブルと指定しないと, 線画となってしまいますので注意してください.

  1: これはテーブルになる.
  2: [[T
  3: ┌───┬─────┬┬───┬────┐
  4: │ 鯣 │ するめ ││ 鯰 │ なまず│
  5: ├───┼─────┼┼───┼────┤
  6: │ 鯡 │ にしん ││ 鰡 │ ぼら │
  7: └───┴─────┴┴───┴────┘
  8: ]]T
  9: 
 10: これは線画になる.(ちょっと間延びする)
 11: ┌───┬─────┬┬───┬────┐
 12: │ 鯣 │ するめ ││ 鯰 │ なまず│
 13: ├───┼─────┼┼───┼────┤
 14: │ 鯡 │ にしん ││ 鰡 │ ぼら │
 15: └───┴─────┴┴───┴────┘

これはテーブルになる.

するめなまず
にしんぼら


フィールドのアラインメント

テーブル内の同じカラムに並ぶフィールドが全て右端または左端に揃っていれば, それぞれ右寄せ/左寄せのフォーマットで出力されます. また,全てのフィールドが揃っていなくとも, 同じカラムの中の半分以上のフィールドが右寄せまたは左寄せされていれば, そのカラムのディフォールトは右寄せ/左寄せとなります.

この条件に合わないフィールドはセンターリングされます.

  1:         +-------+-------+-------------+
  2:         |右寄せ |左寄せ |センタリング |
  3:         +-------+-------+-------------+
  4:         |  右 |左   |  中    |
  5:         |右右右 |左左左 |  中中   |
  6:         | 右右 |左   | 中中中中  |
  7:         +-------+-------+-------------+
  8: 
  9: 
 10: +----------------+------------+----------------+------------+
 11: |これも右寄せです|これは左寄せ|   右寄    |  左寄  |
 12: +----------------+------------+----------------+------------+
 13: |    右   |  左左左  |    右   |  左左左  |
 14: |   右右   |  左    |   右右   |  左    |
 15: |  右右右   |  左左   |  右右右   |  左左   |
 16: +----------------+------------+----------------+------------+
 17: 

右寄せ左寄せセンタリング

右右右
右右

左左左

中中
中中中中


これも右寄せですこれは左寄せ 右寄 左寄

右右
右右右
左左左

左左

右右
右右右
左左左

左左


テーブルの制限

テーブルが正しく解釈されるためには,罫線の行を含めて最低 3行のサイズが必要です. 罫線を使わずに,空白で区切られたテーブルの場合は,最低横2項目・縦 2行のサイズを必要とします.

テーブルの一行の長さは最大1024文字に制限されています.また, テーブルのカラム数も最大32に制限されています. (そんなに大きなテーブルを書くことがあるとは思えませんが)

plain2 は,極端に形が複雑なテーブルでも, 解析することができます.ただし,LaTeX出力では,次の例の7行目, 12行目のように,同じ行に文字フィールドと横線が書かれていると, 余分な空白や線のはみだしが生じることがあります.troff出力にはこのような問題はありません.

  1: -----------------------------------------
  2: |テーブル出力|             |
  3: | の -----------------------------------
  4: |限界 |   |テーブル| 線画 | 例示 |
  5: =========================================
  6: | La  |   |    |    |    |
  7: | TeX |----------------------------------
  8: |   |   | LaTeXのテーブル出力では |
  9: |   |   | 線がはみ出す問題がある |
 10: |----------------------------------------
 11: |   |   |    |    |    |
 12: |troff|----------------------------------
 13: |   |   |troffのテーブルは問題無い |
 14: |----------------------------------------

テーブル出力  

限界
 テーブル 線画 例示
La
TeX

 
       

 
LaTeXのテーブル出力では
線がはみ出す問題がある

troff
 
       
 troffのテーブルは問題無い

テーブルの枠線に使っている文字をテーブルのフィールドとして書くと出力が乱れることがあります.縦線"|"は,必ず枠線と判別されてしまうので,フィールド中に縦線"|"を置くことはできません.

また,フィールドに"-"が含まれていると, "-"が横の枠線と誤認されることがあります.

  1:    +--------+----------------+------+
  2:    | 文字 | 読み     |和名 |
  3:    +========+================+======+
  4:    |  *  | アステリスク |星  |
  5:    +--------+----------------+------+
  6:    |  |  | バー,パイプ |縦棒 |
  7:    +--------+----------------+------+
  8:    |  ~  | チルダ    |---- |
  9:    +--------+----------------+------+
 10:    |  ^  | ハット    | --- |
 11:    +--------+----------------+------+

文字読み 和名
* アステリスク
   バー,パイプ縦棒
~ チルダ
^ ハット ---

テーブルの出力

LaTeX 出力では tabular 環境を使ってテーブルを出力します. テーブルがテキスト幅に対して,ほぼ中央に位置していれば,テーブル全体を center環境で囲って出力します.それ以外の場合,テーブルは左端に出力されます.

plain2 起動時に "-ref" オプションを指定すると, テーブルは"\begin{table}[htbl]" で囲われ,必ずセンタリングして出力されます. また,表題を"\caption{}"と"\label{}"の両方に出力します. ( 図表・セクションの参照 章参照 )

troff 出力では ".TS",".TE"で囲われた tbl の形式で出力されます. さらに,テーブル全体を ".DS", ".DE" で囲みテーブルに適当なインデントが付けられます.テーブルがほぼ中央に位置していれば, ".DS CB"によりセンタリングされます.

線画の詳細

入力文書から切り出されたブロック中の図形文字の割合などの基準が以下の条件を全て満たすと,その領域は線画と判断されます.

図形文字として認識される文字を表線画で認識される図形文字 に示します. 線画として使える文字は,全て全角文字です.

表 5.線画で認識される図形文字
種別 図形文字 備考
罫線素片


 
─ ━ │ ┃ ┌ ┏ ┐ ┓
└ ┗ ┘ ┛ ├ ┝ ┠ ┣
┤ ┥ ┨ ┫ ┬ ┳ ┯ ┰
┴ ┻ ┷ ┸ ┼ ┿ ╂ ╋
PC9800の罫線文字は
使えません

 
矢印 ← → ↑ ↓  
斜線 / \ ×  
点線 … : 縦点線は全角のコロン
極太線 = ‖ 二重線で代用
楕円 _  ̄ 下線/上線で代用

線画として書いたつもりの領域が,期待どおり線画と判定されない場合, "[[P","]]P" を使って線画領域を明示的に指定してください.

線画の拡張技法

JIS罫線素片では太線と細線の交差を完全に表現することができません. また,点線も用意されておらず,矢印も一種類の太さしかありません. 限られた罫線文字を使って美しい出力を得るため,plain2 は線画に対して以下の拡張を行っています.

  1. 矢印付きの線

    JISの図形文字の矢印は細線の一種類しかありませんが, 太線や点線と接続する位置に書かれた矢印は隣接する線種と同じ線で出力されます.

  2. 太線, 点線と細線の交差

    JISの罫線文字には細線と太線の交差が完全には含まれていません. また,点線を表す文字もありません. そこで,片側が終端となっている細線("┌","┐ "のように文字の中央で線が終端している)に太線や点線が隣接している場合には, 細線の部分も隣接する線種で出力します.

      1:     ←──→     ↑↑↑↑
      2:     ←━━→     │┃‖:
      3:     ←==→     │┃‖:
      4:     ←……→     ↓↓↓↓
      5:      太線・点線と矢印の接続
      6: 
      7:    ┏━━┓        ‖ ┃ :
      8:    ┃  ┃        ‖ ┃ :
      9: ┌==┼━━┼……┐  ───┼─╂─┼───
     10: ‖  ‖  :  :     ‖ ┃ :
     11: └==┴──┴……┘     ‖ ┃ :
     12: 細線と細線の交差部分の表現
    


  3. 斜線と細線の接続

    テキストエディタ上で,斜線"/","\"と縦線, 横線を隣接させても,線を完全に接続するようには書けませんが, 次のルールを設けて斜線と横線を接続させて出力することとしています.
  4. 斜線の矢印

    斜線の末端に"×"記号を置くと,斜線に続く矢印となります. 2方向の斜線が同じ"×"記号を末端としている場合には, 二つの矢印となります.

      1:                     /
      2:        /──   /→    /→
      3: /──   /     /     /
      4: 接続しない 接続する  接続する  接続しない
      5: 斜線一文字 斜線連続  線の端   線の途中
      6: 
      7: ─────  ─────      │     │
      8:   /     /       /│    /│
      9:  /     /      延長 │   / │
     10: 延長する   延長する   しない│   延長│
     11:       (半角ずれ)   斜線一文字   する
     12: 
     13: 
     14:   /    \   /     ┌─┐
     15:  /      \ /    × │×│
     16: ×        ×       └─┘
     17: 斜線の矢印  二つの矢印  これは矢印ではない





  5. 丸い角

    縦線と横線の交差する部分に斜線が置くことで, 丸い角を書くことができます.接続する線が太線の場合,円弧も太線となります.

      1:     ────\   ラウンドショルダ/─\ /─\
      2:         │           │ぷ│ │れ│
      3:     /─\ │   /━\     \─/━\─/
      4:     │細│ │   ┃太┃       ┃2┃
      5:     \─/ │   \━/     /─\━/─\
      6:         │           │い│ │ん│
      7:         \───────────\─/ \─/
      8: 
    



  6. 楕円(ディスクの絵 )

    下線, 上線《_ ̄》を使ってコンピュータ関係の文書で頻繁に現れるディスクの絵を書くことができます.

  1: 
  2:    ┌ ̄ ̄ ̄ ̄┐  ┌ ̄ ̄┐
  3:    │    │  │  │  ┌ ̄┐
  4:    │ディスク│  └__┘  └_┘
  5:    │    │       小ディスク
  6:    └____┘


上線は完全な楕円,下線は下半分だけの楕円です. ただし,troff出力ではディスク下側も完全な楕円になります.また, LaTeX出力では楕円の代わりに折れ線で出力します.

文字サイズと図全体のサイズの調整

テキストエディタ上では,文字の幅は全角:半角=2:1 の固定比率ですが, 清書系の出力では文字ごとに幅の異なるプロポーショナルフォントが使われます. plain2は文字列が隣接する線と交錯しないように, プロポーショナルフォントでの文字列の幅を計算し, 適切な大きさのフォントを選択します.

また,図全体の大きさも A4版の紙に収まる大きさに調整します.

  1: ┌───────┐
  2: │ABCDEFGABC  │←枠に余裕のある場合
  3: │あいうえお  │
  4: │abcdefghij  │
  5: └───────┘
  6: ┌─────┐
  7: │ABCDEFGABC│←──サイズを小さくしないと
  8: │あいうえお│   枠に収まらない
  9: │abcdefghij│
 10: └─────┘


  1: ┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐
  2: │幅広線画││幅広線画││幅広線画││幅広線画││幅広線画││幅広線画││幅広線画│
  3: └────┘└────┘└────┘└────┘└────┘└────┘└────┘
  4: 
  5: ┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐
  6: │幅広線画││幅広線画││幅広線画││幅広線画││幅広線画││幅広線画││幅広線画││幅広線画│
  7: └────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘
  8: 
  9: ┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐
 10: │幅広線画││幅広線画││幅広線画││幅広線画││幅広線画││幅広線画││幅広線画││幅広線画││幅広線画│
 11: └────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘

このテキストを清書した結果は次のようになります. この例は幅が広すぎるので,全体を枠で囲うのを省略しています.




線画の出力

LaTeXでは picture 環境を使って線画を出力します.LaTeX には "\oval" という楕円を書く機能がありますが,角を円弧にした長方形の"\oval" は使わず,折れ線を使って楕円を表現しています.折れ線の形は, 楕円の大きさによって変化します.

troff では ".PS",".PE" を使った pic の機能で出力します.ディスクの絵に使う下半分の楕円が,troff 表示では完全な楕円として表示されてしまうという問題があります.

例示の詳細

入力文書から切り出されたブロックがつぎの条件を満たすと,例示と判定されます.

  1. 空白を多く含む

    簡単な図のような場合
  2. 短い行がつづく

    プログラム例など
  3. 半角アルファベット文字以外を含まない行が多い

    このルールは英文の入力文書に対しては無効です

  1: ・プログラムの引用
  2: 
  3: uchar	*
  4: listSecBody(textp)
  5: struct	text	*textp;
  6: {
  7: 	uchar	*s;
  8: 	s = textp-&gt;body + textp-&gt;indent + textp-&gt;headLen;
  9: 	while (*s != '\0') {
 10: 		if (*s != ' ')
 11: 			break;
 12: 		s++;
 13: 	}
 14: 	return s;
 15: }
 16: 
 17: ・図版
 18: 
 19:            XXNetへ
 20:             |
 21:         +---+---+                        +-------+
 22:         | CISCO |                        | CISCO |
 23:         +---+---+                        +---+---+
 24:             |                                |
 25:   ---+------+-------+----------------+-------+-------+---- 123.45.67
 26:      |              |                |               |
 27: +----++         +---+----+      +----+---+      +----+---+
 28: |ns-in|         |○host-A|      |●host-B|      |○host-C|
 29: +-----+         +--------+      +--------+      +--------+
 30: 

plain2 は各種のパラメータを使い, 例示を判定しますが,例示の判定は微妙な問題であり,どうしても, 思い通りにならない場合あります.

次の例では, 例示となってほしいプログラム実行例の部分が,各行が比較的の長いために,平文となってしまいます.

  1: 以下の部分は例示と解釈してもらいたいが..
  2:         % cd plain2/src
  3:         % make
  4:         cc -DKANJI -DPICTURE -DBSD -DDEBUG -target sun4 -c plain2.c
  5:         cc -DKANJI -DPICTURE -DBSD -DDEBUG -target sun4 -c readfile.c
  6:         cc -DKANJI -DPICTURE -DBSD -DDEBUG -target sun4 -c miscutil.c
  7:         cc -DKANJI -DPICTURE -DBSD -DDEBUG -target sun4 -c section.c
  8:         cc -DKANJI -DPICTURE -DBSD -DDEBUG -target sun4 -c example.c
  9:         cc -DKANJI -DPICTURE -DBSD -DDEBUG -target sun4 -c list.c
 10:         cc -DKANJI -DPICTURE -DBSD -DDEBUG -target sun4 -c plaintxt.c
 11:         cc -DKANJI -DPICTURE -DBSD -DDEBUG -target sun4 -c spacing.c
 12:         cc -DKANJI -DPICTURE -DBSD -DDEBUG -target sun4 -c headfoot.c
 13:         cc -DKANJI -DPICTURE -DBSD -DDEBUG -target sun4 -c hint.c
 14:         cc -DKANJI -DPICTURE -DBSD -DDEBUG -target sun4 -c justify.c
 15:         cc -DKANJI -DPICTURE -DBSD -DDEBUG -target sun4 -c texout.c

以下の部分は例示と解釈してもらいたいが..

% cd plain2/src % make cc -DKANJI -DPICTURE -DBSD -DDEBUG -target sun4 -c plain2.c cc -DKANJI -DPICTURE -DBSD -DDEBUG -target sun4 -c readfile.c cc -DKANJI -DPICTURE -DBSD -DDEBUG -target sun4 -c miscutil.c cc -DKANJI -DPICTURE -DBSD -DDEBUG -target sun4 -c section.c cc -DKANJI -DPICTURE -DBSD -DDEBUG -target sun4 -c example.c cc -DKANJI -DPICTURE -DBSD -DDEBUG -target sun4 -c list.c cc -DKANJI -DPICTURE -DBSD -DDEBUG -target sun4 -c plaintxt.c cc -DKANJI -DPICTURE -DBSD -DDEBUG -target sun4 -c spacing.c cc -DKANJI -DPICTURE -DBSD -DDEBUG -target sun4 -c headfoot.c cc -DKANJI -DPICTURE -DBSD -DDEBUG -target sun4 -c hint.c cc -DKANJI -DPICTURE -DBSD -DDEBUG -target sun4 -c justify.c cc -DKANJI -DPICTURE -DBSD -DDEBUG -target sun4 -c texout.c


例示判定の基準値を 60 に変更すると, うまく例示として解釈されます.


テーブルや線画の場合と同様, "[[E","]]E" を使って明示的に例示領域を指定する方法もあります.

例示の出力

LaTeX では verbatim 環境を使って出力します.さらに,verbatim 環境の中で行間のスペースを減らしています.

troff では CW (Constant Width)フォント,行詰めなし(".nf")で出力します. LaTeX 出力と同様に行間のスペースを減らしています.

引用

次の条件を満たすブロックは引用と判定されます.引用の出力は例示と同じです.

>> 内田です.
>>
>> 上流ゲートウェイの障害などのため,ニュース/メールの
>> トラフィックが滞っているようで,すっかり世の中から
>> 取り残されてしまいました.

改ページ,空白

行の先頭に"^L"がある行は("^"と"L"ではなく,CTRL-L一文字です ),改ページ指定とみなされ,行の残りの部分は無視されます.

plain2 は改ページ指定の行を,空白行とみなして解析します.従って, セクションタイトルの直前に"^L"の行を置くこともできます.

4行以下の空白行は,同じ数の空白行として出力しますが, 空白行が4行を越えて続く場合には, 相当する長さの空白ブロックとして出力します.

plain2 起動時に "-nospace" オプションを指定すると, 4 行以下の空白行に対応する改行コードの出力を停止しますが, 4行を越える空白ブロックの出力は変わりません.

  1: 改行は次のように CTRL-L で示します.
  2: ^L
  3: 2. セクション
  4: 
  5: 改ページを指定した行は,文書解析の上では空行とみなされます.
  6: 
  7: 
  8: 4行以下の空白行は,相当する数の改行として出力されます.
  9: 
 10: 
 11: 
 12: この下に,貼り込みのための空白を用意します.
 13: 
 14: 
 15: 
 16: 
 17: 
 18: 4行を越える空白ブロックは,"-nospace"を付けても,
 19: 空白として清書されます.

% plain2 -tex -nopre space_intro.pln
\par
改行は次のように CTRL-L で示します.
\newpage

\section{セクション}
\medskip
\par
改ページを指定した行は,文書解析の上では空行とみなされます.
\medskip
\medskip
\par
4行以下の空白行は,相当する数の改行として出力されます.
\medskip
\medskip
\medskip
\par
この下に,貼り込みのための空白を用意します.
~\\
\begin{picture}(100,75)
\end{picture}\\
\par
4行を越える空白ブロックは,"-nospace"を付けても,
空白として清書されます.

改ページ,空白の出力

LaTeX では改ページを "\newline",空白は picture 環境を使って出力します. troff では改ページを ".bp",空白は".sp"を使って出力します.

4行以下の空白行は,tex では "\medskip",troff では単なる改行として出力します. 4行を越える空白ブロックはは,tex では "\picture" 環境, troff では ".DS",".DE" を使って出力します.

テキストのアライメント

plain2 は,テキストのインデンテーション,右寄せなどの, 入力文書から抜き出されたアラインメント情報を,忠実に出力に反映させます.

インデンテーション

インデンテーションが付けられたテキストは別のテキストブロックであると判定されます.ただし,半角4文字未満のインデンテーションは出力には反映されません.出力にインデンテーションを反映させるためには半角4文字以上のインデンテーションが必要です.

  1: べた書き入力のオリジナルアイデアでは,
  2:   複雑なフォーマット指定を必要とする
  3:   文書は最初からターゲットとしないで,
  4: べた書きで書ける範囲の文書を完全に
  5: 	べた書きで済ませるという使い方
  6:         を期待していた.
  7: 社内利用者を対象に実際に利用してもらっ
  8: たところ,
  9:     マークアップとべた書きの組み合
 10:     わせ,入手した文書のTeX/troff
 11:     化で使われるケースも多かった.

べた書き入力のオリジナルアイデアでは,

複雑なフォーマット指定を必要とする文書は最初からターゲットとしないで, べた書きで書ける範囲の文書を完全に

べた書きで済ませるという使い方を期待していた.

社内利用者を対象に実際に利用してもらったところ,

マークアップとべた書きの組み合わせ,入手した文書の TeX/troff化で使われるケースも多かった.


右寄せ,センタリング

次の条件を満たすテキスト領域はセンタリングと判定されます.

また,次の条件を満たすテキスト領域は右端と判定されます.

  1: 画面に表示されたイメージから印字結果を簡単に予想でき
  2: ることから,べた書き入力による清書系はマークアップと
  3: WYSIWIGの中間的特徴を持つと言える.
  4: 
  5: 	         センタリングは行頭が
  6: 	  ばらばらで,適当な行の長さがある場合
  7: 	     に限って,稀に発生します.
  8: 
  9: べた書き入力を用いることで,文書作成効率の向上,
 10: オンラインでの文書交換の改善が実現できる.
 11: 
 12: 					         以上
 13: 					     おしまい

画面に表示されたイメージから印字結果を簡単に予想できることから, べた書き入力による清書系はマークアップとWYSIWIGの中間的特徴を持つと言える.

センタリングは行頭が
ばらばらで, 適当な行の長さがある場合
に限って,稀に発生します.

べた書き入力を用いることで,文書作成効率の向上, オンラインでの文書交換の改善が実現できる.

以上
おしまい

右寄せやセンタリングと判定されなくても, 適当なインデンテーション付けが行われるので,ほとんどの場合, 期待と大差ない出力が得られます.

テキストのアライメントの出力

LaTeX ではセンタリングを center 環境,右寄せを flushright で出力します.LaTeX の標準的な機能では, テキストの範囲をインデントさせる機能がないので,ブロック全体を list 環境で囲い,その中で leftmargin を調整する方法を用いています.

troff ではセンタリングを".ce 9999", ".ce 0", 右寄せを".ad r",".ad b" で出力します. インデントには ".in" を使います.

図題,表題

図やテーブルに付けられたタイトルを識別し,図題, 表題専用のレイアウトで出力します.図表のタイトルは, 表図題・表題のパターン に示すキーワードと, 図表の番号,そしてタイトルというパターンで書きます.

表 6.図題・表題のパターン
図のタイトル表のタイトル

Figure
Fig.
fig.

Table

 

図表の番号には,半角または全角の数字が使えます. 数字には,半角または全角のドットを付けることもできます.

図題と表題は,それぞれリナンバリングして出力されます. LaTeX出力を選択した場合, 図表のタイトルを使って図表番号を参照することができます.( 図表・セクションの参照 章参照 )

図表題の制限

インデントされていない行は,図表題とはなりません. 逆に,普通の文章中で,"図1."のようなパターンが行の先頭に表れると, 図表題と誤解されることがあります.このような場合, 改行位置を変えるなどの方法で対処してください.

  1: 表1.  行の先頭から始まってはならない.
  2:     +------------------------+
  3:     |    表題   |    図題    |
  4:     +------------------------+
  5:     | 表,Table | 図,Figure |
  6:     +------------------------+
  7: 
  8:     そのかわり,インデントされた行の先頭に
  9:     図表題と解釈されるパターンが
 10:     図1. に示すように.などと表れると,
 11:     誤解釈されてしまします.

表1. 行の先頭から始まってはならない.

表題 図題
表,Table図,Figure

そのかわり, インデントされた行の先頭に図表題と解釈されるパターンが

図 1.に示すように.などと表れると,

誤解釈されてしまします.



図表題の出力

LaTeX 出力では "-ref" オプションを使用した場合, "\caption{}"を使って出力します.

"-ref" オプションを指定しない場合,LaTeX 出力と troff 出力共に, "図xx.", "表xx."をボルドフォントで出力します.ただし, 入力文書が英文である場合は,"Figure xx.","Table xx."として出力します.

Appendix

セクションタイトルの拡張として,Appendix を扱うことができます. Appendix 行は,その行が Appendix であることを示す, 表Appendix のパターン のパターンとAppendix 番号,そして見だしからなります.

普通のテキストと Appendix 行が混同される危険を避けるため,Appendix 行の前後は必ず空白行である必要あります.

表 7.Appendixのパターン
付録
Appendix
APPENDIX
Appendix
APPENDIX

Appendix 番号には列挙型リスト同様,アルファベット,ローマ数字, 数字のいずれでも使うことができます. 半角/全角,数字のあとのドットの有無は自由です.

  1: Appendix A  アペンディクスの書き方
  2: 
  3: 付録 IV  べた書き文書作例
  4: 
  5: APPENDIX 7 漢字コード表
  6: 

Appendixの出力

LaTeX 出力では "\appendix" を使っています.Appendix のタイトル自体はセクションタイトルと同様,"\section{}"で出力します.

troff 出力の場合は,対応する mm マクロの機能がないので,単純に "Appendix見だし" というタイトルをボルドフォントで出力することで対応しています.


plain2の出力とカスタマイズ

plain2は解析結果を LaTeX と troff のいずれかの形式で出力します. また,セクション,リスト,図表のリナンバリングだけを行って, べた書きのまま出力する機能も備えています.

テーブル,線画,リスト出力等は LaTeX , troff それぞれの出力に固定です.




LaTeX出力

LaTeX 出力は jarticle スタイルを使っています.

\documentstyle[]{jarticle}

jarticle以外のスタイルファイルを使いたい場合, またポイントサイズを変えたい場合などは,次のいずれかの方法を使います.

jbookスタイルなどを使うためには,章番号の付け方にも変更が必要です. jbookスタイルを使うための,出力カスタマイズの方法を付録に示しておきます.

troff出力

troff 出力は,標準で mm マクロを使った出力を生成します.ms マクロを選択することも可能ですが,plain2 の機能を十分に生かすためには mmマクロ の使用をお勧めします.

べた書きのまま(リナンバリング)

文書ファイルに何度も手を加えているうちに, 文書中のセクション番号や表番号などが, 次のようにばらばらになってしまうことがあります.

  1: 1.  ようこそ plain2 の世界へ
  2: 	TeXなんて書けない,読めない.
  3: 
  4: 2.3. リストのリナンバリング
  5:     2) 項目型リスト
  6:     2) 列挙型リスト
  7:         B] 数字
  8:         D] アルファベット
  9:         C] ローマ数字
 10:     2) 記述型リスト
 11: 
 12: 3.1. 表題のリナンバリング
 13: 	表3.  へんとつくり
 14:     -----------
 15:     | 辺 | 旁 |
 16:     ===========
 17:     | 金 | 錫 |
 18:     -----------
 19: 
 20: 3. おわりに
 21: 	   表2. 字の読み
 22:     -----------------
 23:     | 字 | 読み |
 24:     ================|
 25:     | 錫 | すず |
 26:     -----------------

"-renum" オプションを使用すると,べた書きのまま,リナンバー処理のみを行なった結果を出力します.リナンバの対象は,リスト番号,セクション番号,そして,図表番号です.

前の文書を "plain2 -renum" に通すと,次のように, きちんとリンナンバリングされたべた書き文書にすることができます.

  1: 1. ようこそ plain2 の世界へ
  2:         TeXなんて書けない,読めない.
  3: 
  4: 1.1. リストのリナンバリング
  5:     1) 項目型リスト
  6:     2) 列挙型リスト
  7:         A] 数字
  8:         B] アルファベット
  9:         C] ローマ数字
 10:     3) 記述型リスト
 11: 
 12: 1.2. 表題のリナンバリング
 13:         表 1. へんとつくり
 14:         -----------
 15:         | 辺 | 旁 |
 16:         ===========
 17:         | 金 | 錫 |
 18:         -----------
 19: 
 20: 2. おわりに
 21:            表 2. 字の読み
 22:         -----------------
 23:         |  字  |  読み  |
 24:         ================|
 25:         |  錫  |  すず  |
 26:         -----------------

ただし,plain2 を通すと, 入力中のタブおよび全角スペースは全て半角スペースに置き換えられます. 必要ならば,Emacs の tabify や UNIX の unexpand コマンドで, 再度タブに置き換えてください.

% plain2 -reum foo.pln | unexpand > foo_renum.pln


特殊文字のクォート

plain2 は LaTeX出力 troff出力のそれぞれについて, バックスラッシュなどの特殊文字をクォートする方法を2種類用意しています.

LaTeX出力では,次のように, 通常の文章の中で使うクォートの形式と"\section{}"のようなマクロ内で使うクォートの形式があります.

表 8.LaTeX出力での特殊文字クォート
文字通常 マクロ内
-
=

<
>
#
$
%
&
*
~
_
^
{
}
\
$-$
$=$
$|$
$<$
$>$
\#
\$
\%
\&
*
\verb+~+
\_
\verb+^+
\{
\}
$\backslash$









$*$
{\tt \symbol{126}}

{\tt \symbol{94}}



troff 出力にも,通常の文書の中で使うクォートと,".H" のようなマクロ内で使うクォートの形式があります.

表 9.troff出力での特殊文字クォート
文字通常 マクロ内
\
'
"
.
\e
\'
そのまま
&\. (行頭のみ)


\"
そのまま

出力形式のカスタマイズ

plain2 の出力を,ユーザ自身の好みに応じて,また, 文書形式に応じてカスタマイズすることが可能です.

出力フォーマットを定義したカスタマイズファイルを用意します.

例えば,次に示すカスタマイズファイルを使うことで,plain2 標準の LaTeX 出力では, "\section{}" で出力される章番号を, セクション番号の付かない"\section*{}" に変えることができます.

                % cat supsnum.p2
                SECTION_1       "\n\\section*{@1}\n"
                SECTION_2       "\n\\subsection*{@1}\n"
                SECTION_3       "\n\\subsubsection*{@1}\n"
                SECTION_4       "\n\\paragraph*{@1}~\\\\\n"
                SECTION_5       "\n\\subparagraph*{@1}~\\\\\n"

行の先頭に "#" を書くとその行はコメントとなります.また,行末に "\"をつけることで複数行にまたがったフォーマットを書くことができます.

カスタマイズファイルには,".p2"というサフィックスを付けてください. このカスタマイズファイルを使ってべた書き文書を plain2 に通した結果を示しておきます.

  1: 1. はじめに
  2: 
  3: セクション番号のない出力
  4: 
  5: 1.1. 入力は番号付き
  6: 
  7: べた書き入力の方は,セクション識別のための
  8: セクション番号がhtuyouです.
  9: 
 10: 1.2. 出力は番号なし
 11: 
 12: 清書された出力からは番号が消えます

% plain2 -fsupsnum -tex -nopre table_adjust.pln
\par
次のように枠のないテーブルは,
正しくテーブルと解釈されない場合があります.
{\list{}{\leftmargin=8ex}\item[]
\par
評価値を変える         -table$=$60
明示的に指定する       "[[T"と"]]T"
そのまま我慢する       多分例示になる
\endlist}

これを清書すると,次のようにセクション番号のない出力が得られます.

はじめに

セクション番号のない出力

入力は番号付き

べた書き入力の方は, セクション識別のためのセクション番号がhtuyouです.

出力は番号なし

清書された出力からは番号が消えます


以下のディレクトリに置かれたカスタマイズファイルが自動的に検索されます.

  1. カレントディレクトリ
  2. 環境変数 PLAIN2_LIB に設定されたパス(単一のディレクトリのみ指定可能 )
  3. plain2 インストール時に指定されたディフォールトパス(通常は /usr/local/lib/plain2)

現在の版では, 複数の定義ファイルを同時に利用することはできません.

カスタマイズ可能なもの

ユーザ定義可能な出力形式 にカスタマイズ可能な出力形式の名称と, その意味,引数の数を挙げます.ここに挙げた以外のリスト,テーブル, 線画などの出力は変更することができません.

表 10.ユーザ定義可能な出力形式
名称 意味 引数 形式 引数の内容
DOC_BEGIN 文書の始め 1フォントサイズ
DOC_END 文書の終り - -  
PLAIN_BEGIN 平文の始め - -  
PLAIN_END 平文の終り - -  
EXAM_BEGIN 例示の始め 1フォントサイズ
EXAM_END 例示の終り - -  
BLANK 空白行 - -  
PAGE 改ページ - -  
NEWLINE 改行 - -  
SPACE 複数空白行 1空ける行数
CENTER_BEGINセンタリング始め - -  
CENTER_END センタリング終り - -  
RIGHT_BEGIN 右寄せ始め - -  
RIGHT_END 右寄せ終り - -  
INDENT インデント 1インデント量
INDENT0 インデント終り - -  
FOOTN_BEGIN フットノート - -  
FOOTN_END フットノート終り - -  
REFER_BEGIN 図表参照 - -  
REFER_END 図表参照終り - -  
BOLD_BEGIN ボルド - -  
BOLD_END ボルド終り - -  
INDEX_BEGIN インデックス - -  
INDEX_END インデックス終り - -  
SECTION
 
セクション(一括)
 
1
2

文字列
セクションの深さ
セクションタイトル
SECTION_1
..
SECTION_6
セクション(第一レベル)
..
セクション(第五レベル)
1
..
1
文字列
..
文字列
セクションタイトル
..
セクションタイトル
SETSEC
 
セクション(一括)
 
1
2

セクションの深さ
セクション番号
SETSEC_1
..
SETSEC_6
セクション(第一レベル)
..
セクション(第五レベル)
1
..
1

..
セクション番号
..
セクション番号
APDX_BEGIN 付録の始め - -  
APPENDIX 付録 1文字列セクションタイトル
TITLE







 
タイトル







 
1
2
3
4
5
6
7
8
9
複数行
複数行
複数行
複数行
複数行
複数行
複数行
複数行
複数行
題名(引数1)
文書番号(引数2)
日付(引数3)
所属部門(引数4)
配付先(引数5)
著者(引数6)
連絡先(引数7)
(引数8)
(引数9)

章番号の定義には二つの方式があります.一つはセクションの深さごとに, 別々の定義を利用する SECTION_X の形式,もう一つは, セクションの深さと章題を引数にする SECTION 形式です.

両方が定義されている場合には,SECTION_X の定義が優先的に利用されます.

カスタマイズ定義中での引数の指定

出力形式定義の引数は表出力定義の引数フォーマット に示す形式で指定します.

表 11.出力定義の引数フォーマット
記法対応する形式
#n 数字
$n
@n
通常のクォート
マクロ内用クォート
&n 複数行

SECTION_1 を単に "@1" または "$1" と定義したとき, どのように変換されて出力されるかを表出力変換の例 に示しておきます.

表 12.出力変換の例
入力  1. plain2 ~ べた書き - 入門
LaTeX
出力
 
"@1"plain2 \verb+~+ "べた書き" $-$ 入門
"$1"plain2 {\tt \symbol{126}} "べた書き" $-$ 入門
troff
出力
 
"@1"plain2 ~ \"べた書き\" - 入門
"$1"plain2 ~ "べた書き" - 入門

標準出力フォーマット

plain2 内部に組み込まれている標準出力フォーマットを表mmマクロ roff標準フォーマット , 表msマクロ roff標準フォーマットの差分 , 表LaTeX 標準フォーマット に示します.

ここに示した以外の出力フォーマットは変更できません.

表 13.mmマクロroff標準フォーマット
機能名 定義
DOC_BEGIN
DOC_END
PLAIN_BEGIN
PLAIN_END
EXAM_BEGIN
EXAM_END
APPENDIX
BLANK
PAGE
NEWLINE
SPACE
CENTER_BEGIN
CENTER_END
RIGHT_BEGIN
RIGHT_END
INDENT
INDENT0
FOOTN_BEGIN
FOOTN_END
BOLD_BEGIN
BOLD_END
SECTION
SETSEC
TITLE

 
".nr Ls 0\n.S #1 #1+2\n"
""
".P\n"
""
".ft CW\n.vs -2\n.nf\n"
".fi\n.vs +2\n.ft\n"
"\\fBAppendix $1\\fP\n"
"\n"
".bp\n"
".br\n"
".DS I\n.vs 13\n.sp #1\n.vs\n.DE\n"
".ce 9999\n"
".ce 0\n"
".ad r\n"
".ad b\n"
".in #1/2u\n"
".in 0\n"
"\\*F\n.FS\n"
".FE\n"
"\\fB"
"\\fP"
".H #1 \"@2\"\n"
".nr H#1 #2\n"
"&1\n.ce 999\n\\fB\\s+4&2\n\\fP\\s-4\n.ce 0\n\
.ad r\n&3\n.br\n&4\n.br\n&5\n.br\n&6\n.br\n&7\n\
.br\n.ad b\n.br 2\n"

表 14.msマクロroff標準フォーマットの差分
機能名 定義
DOC_BEGIN
PLAIN_BEGIN
SECTION
SECTION_1
".nr PI 2n\n.ps #1\n.vs #1+2\n"
".PP\n"
".NH #1\n @2\n"
".NH\n @1\n"


表 15.LaTeX標準フォーマット
機能名 定義
DOC_BEGIN






DOC_END
PLAIN_BEGIN
PLAIN_END
EXAM_BEGIN
EXAM_END
APDX_BEGIN
APPENDIX
BLANK
PAGE
NEWLINE
SPACE

CENTER_BEGIN
CENTER_END
RIGHT_BEGIN
RIGHT_END
INDENT
INDENT0
FOOTN_BEGIN
FOOTN_END
REFER_BEGIN
REFER_END
BOLD_BEGIN
BOLD_END
INDEX_BEGIN
INDEX_END
SECTION_1
SECTION_2
SECTION_3
SECTION_4
SECTION_5
SECTION_6
SETSEC_1
SETSEC_2
SETSEC_3
SETSEC_4
SETSEC_5
TITLE
 
"\\documentstyle[$2]{jarticle}\n\
\\setcounter{secnumdepth}{6}\n\
\\setcounter{tocdepth}{6}\n\
\\topsep=0.1cm\n\
\\parsep=0.1cm\n\
\\itemsep=0.0cm\n\
\\begin{document}\n"
"\\end{document}\n"
"\\par\n"
""
"\\baselineskip=#1pt\n\\begin{verbatim}\n"
"\\end{verbatim}\n"
"\\appendix\n"
"\\section{@1}\n"
"\\medskip\n"
"\\newpage\n"
"\\\\\n"
"~\\\\\n\\begin{picture}(100,#1*15)\n\
\\end{picture}\\\\\n"
"\\begin{center}\n"
"\\end{center}\n"
"\\begin{flushright}\n"
"\\end{flushright}\n"
"{\\list{}{\\leftmargin=#1ex}\\item[]\n"
"\\endlist}\n"
"\\footnote{"
"}\n"
"\\ref{"
"}\n"
"{\\bf\\dg "
"}\n"
"\\index{
"}\n"
"\n\\section{@1}\n"
"\n\\subsection{@1}\n"
"\n\\subsubsection{@1}\n"
"\n\\paragraph{@1}~\\\\\n"
"\n\\subparagraph{@1}~\\\\\n"
"\n\\subparagraph{@1}~\\\\\n"
"\n\\setcounter{section}{#1}\n",
"\n\\setcounter{subsection}{#1}\n",
"\n\\setcounter{subsubsection}{#1}\n",
"\n\\setcounter{paragraph}{#1}\n",
"\n\\setcounter{subparagraph}{#1}\n",
"\\title{\n&1\\\\\n}\n\\author{\n&6\\\\\n&4\n}
\n\\date{\n&3}\n\\maketitle\n"

表 16.NTT_TEX 定義時の差分
機能名 定義
DOC_BEGIN






 
"\\documentstyle[$2]{jarticle}\n\
\\setcounter{secnumdepth}{6}\n\
\\setcounter{tocdepth}{6}\n\
\\topsep=0.1cm\n\
\\parsep=0.1cm\n\
\\itemsep=0.0cm\n\
\\renewcommand{\\bf}{\\protect\\pbf\\protect\\pdg}\n\
\\begin{document}\n"


より高度な使い方

図表・セクションの参照

LaTeX 出力を選択した場合に限り,図表の参照機能(LaTeXの \ref)を利用することができます.

図表を参照するためには,次の例のように, 図表の見だしに使った文字列全部をコピーして,インラインの"x"機能で囲みます. この文書を"-ref" オプションを付けた plain2 に通すと,"\ref" と "\label" を使って図表の参照を行うLaTeX文書が出力されます.

  1: 1.1. セクションの参照
  2: 
  3: セクションタイトルを使って参照します.(((x図表の参照))章)
  4: 
  5: 1.2. 図表の参照
  6: 
  7: 最近の推移を表((xファイル転送利用量の増大))に示します.
  8: 
  9:         表3. ファイル転送利用量の増大
 10:     --------------------------------------------------------
 11:     | 項目          |   91年9月 |   92年6月 |
 12:     ========================================================
 13:     | 転送ファイル数     |    660216 |   1375872 |
 14:     | 転送バイト数      | 76306048821 |165355265839 |
 15:     | 接続ホスト数      |    16218 |    32788 |
 16:     | 平均転送ファイル数/日  |    22007 |    45862 |
 17:     | 平均転送バイト数/日    |  2543534961 | 5511842195 |
 18:     --------------------------------------------------------
 19: 
 20: 図((x丸みをつけた角))のような表現も可能です.
 21: 
 22:     /──\    /──\    /──\
 23:     │端末│━━━→│PC│━━━→│WS│━……→?
 24:     \──/    \──/    \──/ 
 25:         図2. 丸みをつけた角
 26: 
 27: 

tgif+の絵の取り込み

べた書き文書以外にLaTeX の機能を使わなければならない代表的な例として, tgif+ で書いた絵を文書中に取り込む方法を説明します.

  1. tgif+ で絵を書く

    tgif+ を起動し絵を書きます.これを,eps 形式でセーブ, または .objファイルを"prtgif+ -eps" で eps に変換します. このファイル名を"tgif_fig.eps"とします.

  2. べた書き文書の作成

    raw モードの明示的指定を使って,べた書き文書に tgif+ の絵を取り込みます.ファイル名を tgif_doc.pln とします.
      1: 1. tgif+ の利用
      2: 
      3: tgif+ で書いた絵を次のようにして
      4: べた書き文書に取り込みます.
      5: 
      6: [[MT
      7: \begin{figure}[h]
      8: \begin{center}
      9: \epsfile{file=tgif_fig.eps}
     10: \end{center}
     11: \end{figure}
     12: ]]M
     13: 
     14: うまくできたでしょうか?
    

  3. plain2 を通す

    "-tstyle=" オプションで "epsf.sty" スタイルファイルを指定します.
                    % plain2 -tex -tstyle=epsf tgif_doc.pln > tgif_doc.tex
    

  4. LaTeX にかける
                    % jlatex tgif_doc.tex
                            ...
                            ...
    
  5. dvi2ps を通す

    dvi2p2 を通すことで,tgif+ で書いた絵が PostScript 形式の文書中に取り込まれます.
                    % dvi2ps tgif_doc.tex > tgif_doc.ps
                     [/usr/local/lib/dvi2ps/tex.ps]
                    Prescanning .
                    Reading font info ...........
                    [1 [tgif_fig.eps]]
    

    このファイルを PostScript プリンタに出力すると, 次のように,tgif+での絵がはいった文書ができます.


ヘッダ・フッタ

標準の plain2 には,文書のヘッダ・フッタを指定する機能は含まれていませんが, 出力カスタマイズ機能を利用して,タイトル部分に書かれた,題名, 日付等を使ったへッダとフッタを付けることができます.

まず,付録Bのヘッダ・フッタ定義ファイル"header.p2"を用意します. この定義を使って次の文書を plain2 に通すと,ヘッダに,題名と日付, フッタに,章番号,章題,ページ番号が入った出力が得られます.

  1: 	『plain2ユーザガイド』
  2: 			by A.Uchida
  3: 			フリーソフトウェア研究所
  4: 			92/12
  5: 
  6: 1. はじめに
  7: 		・
  8: 		・
  9: 
 10: 7. 高度な使い方
 11: 


LaTeX用とtroff用両方のヘッダ・フッタ定義を付録に載せてありますので, 各人の好みに合わせて変更して利用してください.


インストール

内部漢字コードの選択

plain2 のソースファイルのいくつかは, EUC漢字コードの日本語ストリング定数を使っています. 入出力に使用する漢字コードは,コマンドラインオプションによって切り替えて利用することができますが,MS-DOS のように,シフトJIS を標準の漢字コードとしている環境でのプログラムの再編集/コンパイルを容易にするため,内部漢字コードをシフトJIS に変更してコンパイルすることもできます.以下に,この手順を示します.

  1. 全てのファイルの漢字コードをシフトJIS に変換する
  2. plain2.h に定義されている INTERNAL_CODE を CODE_SJIS に設定する

ただし,シフトJIS 環境を選択した場合,入出力は シフト JIS に固定され,JISコード,EUCコードを選択することはできなくなります.

OS依存部の変更

plain2 は,比較的機種依存性が少いことが確認されていますが, OSの種類によって,多少の変更が必要な場合もあります.System V のマシンでコンパイルする際には Makefile においてCFLAGS の -DBSDフラグを削除してください.

変更前:
        CFLAGS= -DBSD -DDEBUG
変更後:
        CFLAGS= -DDEBUG

NTT TeX, ASCII TeX

plain2 は NTT版の TeX 環境を標準としています. ASCII版 TeX 環境で利用するためには,plain2.h の NTT_TEX フラグをundef してください.

        #define NTT_TEX         /* NTT jlatex   */

カスタマイズファイルの例


LaTeXセクション番号なし (subsnum.p2)

        #
        # Suppress section numbers
        #       (Use \section* rather than \section)
        #
        SECTION_1       "\n\\section*{@1}\n"
        SECTION_2       "\n\\subsection*{@1}\n"
        SECTION_3       "\n\\subsubsection*{@1}\n"
        SECTION_4       "\n\\paragraph*{@1}~\\\\\n"
        SECTION_5       "\n\\subparagraph*{@1}~\\\\\n"

jbookスタイル (jbook.p2)

        #
        # jbookスタイルを使うための定義
        #
        DOC_BEGIN       "\\documentstyle[]{jbook}\n\
        \\setcounter{secnumdepth}{6}\n\
        \\setcounter{tocdepth}{6}\n\
        \\topsep=0.1cm\n\
        \\parsep=0.1cm\n\
        \\itemsep=0.0cm\n\
        \\begin{document}\n",
        SECTION_1       "\n\\chapter{@1}\n",
        SECTION_2       "\n\\section{@1}\n",
        SECTION_3       "\n\\subsection{@1}\n",
        SECTION_4       "\n\\subsubsection{@1}\n",
        SECTION_5       "\n\\paragraph{@1}~\\\\\n",
        SETSEC_2        "\n\\setcounter{section}{#1}\n",
        SETSEC_3        "\n\\setcounter{subsection}{#1}\n",
        SETSEC_4        "\n\\setcounter{subsubsection}{#1}\n",
        SETSEC_5        "\n\\setcounter{paragraph}{#1}\n",
        TITLE   "\\title{\n&2}\n\\author{\n&6\\\\\n&3}\n\\date{\n&5}\n\\maketitle\n",

LaTeXヘッダ・フッタ (header.p2)

        #
        # 題名,日付,章番号を使ったヘッダ・フッタ(LaTeX)
        #
        TITLE   "\\title{\n&2}\n\\author{\n&6\\\\\n&3}\n\\date{\n&5}\n\\maketitle\n\
        \\makeatletter\n\
        \\def\\ps@mypage{%\n\
          \\let\\@mkboth=\\@gobbletwo\n\
          \\def\\@evenhead{}\\def\\@evenfoot{}%\n\
          \\def\\@oddhead{\\makebox[\\textwidth]%\n\
                {\\ &2\\hfill\\ &5}}%\n\
          \\def\\@oddfoot{\\makebox[\\textwidth]%\n\
                {\\thesection\\ 章\\hfill\\rightmark\\hfill\\thepage}}}\n\
        \\makeatother\n\
        \\thispagestyle{mypage}\n\
        \\pagestyle{mypage}\n"
        SECTION_1       "\n\\markright{@1}\\section{@1}\n"

troffヘッダ・フッタ (header_t.p2)

        #
        # 題名,日付,章番号を使ったヘッダ・フッタ(troff)
        #
        TITLE   "&1\n.ce 999\n\\fB\\s+4&2\n\\fP\\s-4\n.ce 0\n\
        .ad r\n&3\n.br\n&4\n.br\n&5\n.br\n&6\n.br\n&7\n.br\n.ad b\n.br 2\n\
        .PH \"'&2''&5'\"\n\
        .PF \"''ro'%'\"\n"
        SECTION_1       ".H 1 \"@1\"\n\
        .PF \"'\\n(H1 章'@1'%'\"\n"