『べた書き入力による文書清書の試み』
		1990/01/09
		by 内田昭宏,佐野晋
		日本電気(株) C&C共通ソフトウェア開発本部
comment $Id: prosym90.pln,v 2.5 1992/12/02 07:01:51 uchida Exp $
comment		Copyright (C) 1991, NEC Corporation.

概要:
  我々が普段書く技術文書やメモには，章・リスト・表などの
基本的な文書構造が多く使われ，
細かいレイアウト調整が必要とされることは少ない．
これら基本的な文書構造は，
空白の配置やインデント・簡単な記号を使って
べた書きテキストでも書き表すことができるにもかかわらず，
多くの場合，高い品質の印字を得るために，
TeXやtroffのマークアップ言語で文書構造を指定している．
また，いわゆるWYSIWYGの文書作成ツールを使った場合にも入力速度，
文書の交換性などに問題がある．
  筆者らは，べた書きの文書の外観からその構造を解析し，
TeX/troffのコマンドに変換するプログラムを作成した．
本報告では，TeX/troffのようなマークアップ言語による
文書処理系の問題を指摘し，
べた書き文書をTeX/troffに変換するプログラムの実現と効果について述べる．
  なお，本論文も文字サイズ調整と変換例表示のために一部修正をしてはいるが，
テーブル・図の部分を含めて基本的にべた書きによって記述し，
本論文で述べる変換プログラムを使用して出力したものである．

1. はじめに
  ワークステーション上で各種ドキュメントを作る場合，
最近はマークアップ言語を用いた清書系である
TeXやtroffを用いることが多い．
これらが普及している理由として，
比較的安価なレーザビームプリンタが入手可能になったこと，
日本語化されたソフトウエアが容易に入手可能になったこと，
比較的高品質の印字結果が手軽に得られること，
UNIXの技術者間で交換される文書の多くがTeXまたはtroffで書かれていること
などがあげられる．
  ワークステーションやパーソナルコンピュータ上では，
ビットマップディスプレイ機能を利用した
いわゆるWYSIWYGの文書作成ツールがある．
このシステムでは印字結果とほぼ同等なイメージが画面上に表示され，
その表示内容を直接編集することによって図を含んだ文章を作成する．
しかし，WYSIWYGにも，高速な入力ができない，使える端末が限られる，
作成された文書の交換性がないなどの問題がある．

  一方，パーソナルコンピュータ上のワードプロセッサソフトウエアや
専用のワードプロセッサの利用者も多いが，
このようなワードプロセッサの多くは，字幅を全角/半角のいずれかに
分類し固定ピッチで表示/印字する．この場合
ディスプレイ上に表示される画面とプリンタによって印字
される結果はほぼ一致する．
  一方，TeX/troffでは多くのコマンドを覚える必要があるうえ，
入力時に表示される画面と印刷結果が全く異なる．そのため
ワードプロセッサを用いている利用者にとって
TeXやtroffは非常に複雑で
とっつきにくいシステムであると感じられることが多い．

  筆者らが書く文章のほとんどは技術文書やメモが中心ある．
これはテキスト情報と簡単な図や表を少し含むもので，
印字する際も高度な書式制御は必要としない，
いわゆる軽印刷の範疇にはいる．
この種の文書作成に対する要求をまとめると次のようになる．

	 - 文書入力の効率化と簡素化が可能なこと
	 - 文書交換，特にオンラインでの文書交換が容易であること
	 - 字組/段組などの書式にはこだわらないが，
	   そこそこの印字品質が得られること
	 - 報告書や社内技術文書として必要十分な印字品質を得ること

そこで筆者らは，べた書き入力による清書系を作成し，
この問題を解決することにした．

べた書き入力による清書系とは
マークアップ言語のようにコマンドによる明示的な書式の指示
を使わず，構造がわかるように書かれた文書の外観の情報からコンテ
キストを抽出し，それに基づいて適当な解釈をおこないながら清書をおこなう清書
系である．
画面に表示されたイメージから印字結果を簡単に予想できることから，
べた書き入力による清書系は
マークアップとWYSIWIGの中間的特徴を持つと言える．

べた書き入力を用いることで，つぎの効果が得られる．
	- 文書作成に特別な端末を必要としない
	        自宅や出張先からラップトップでログインした環境でも
		最終イメージを確認しながら入力できる．
		また，入力編集のための特別な端末を必要としない．
	- 清書用の原稿をそのままメール/ニュースに流すことができる
	- 入手した文書の TeX/troff化ができる
		ワープロやパーソナルコンピュータで作成された
		文書をTeX/troff化して再利用することができる
	- 文書作成の効率の向上
		マークアップの入力を伴わないうえ，
		入力した文書の可読性も高いので，
		文書の入力速度が早い．

べた書き入力と，マークアップ，ワープロ，WYSIWYGの比較を以下に示す．
ハンドあん
2. プロトタイプの実現

  筆者らはべた書き入力による清書方式実証のため，
プロトタイププログラム
plain2 ((fplain text to(2) TeX/troffのつもり))を作成した．
plain2 はべた書き文書をTeX(LaTeX)またはtroff(mmマクロ)の形で出力するフィルタ
である．
							     troff
	                                               ┏━━━━━━━━━┓			~
	                                               ┃.H 1 "はじめに"   ┃
	                                               ┃.P                ┃
	                                               ┃本報告では，      ┃
	┌───────┐                             ┃.ML \(bu          ┃
	│1. はじめに   │  ／━━━━━━━━━＼     ┃.LI
	│              │  ┃            troff ┃     ┃TeXの問題        LaTeX
	│本報告では，  │  ┃        ┌→出力  ┠─→ ┃.LI     ┏━━━━━━━━━┓
	│  ・TeXの問題 ├→┃べた書き┤        ┃     ┃べた書き┃\section{はじめに}┃
	│  ・べた書きの│  ┃解析    └→LaTeX ┠─＼ ┃.LE     ┃\par              ┃
	│について      │  ┃            出力  ┃  │ ┃.P      ┃本報告では，      ┃
	└───────┘  ＼━━━━━━━━━／  │ ┃について┃\begin{itemize}   ┃
	  べた書き文          べた書き変換処理系    │ ┗━━━━┃\item TeXの問題   ┃
	                                            │      	 ┃\item べた書きの  ┃
	    					    ＼────→ ┃\end{itemize}     ┃
	                                                         ┃\par              ┃
	                                                         ┃について          ┃
			  			                 ┗━━━━━━━━━┛

		 図1. べた書きからTeX/troffへの変換          

Tex/troff 両方の出力を可能とすることで次のメリットが得られる．

	・TeXコミュニティとtroffコミュニティの，
	  どちらにも参加可能．TeX/troffいずれの利用者も手軽に利用できる
	・TeX/troffどちらかの処理系があれば利用可能である

2.1 べた書文書のスタイル
  メール/ニュースで交わされる文書，
マニュアルに代表される各種オンライン文書など数多くの文書が
べた書きで記述されている．
  印刷用にページバウンダリが設けられている特殊な場合を除いて，
べた書きの文書にはページという単位がないため，
ヘッダ・フッタやフットノートを表現することが困難であったり，
フォントのサイズ/種類の選択などができないなどの制限はあるが，
べた書きの文書でも章・リストなどの文書構造を記述することができる．
べた書きの文書で記述可能な文書構造を以下に挙げる．

	a) セクションタイトル
	b) リスト
	c) 例示(プログラム例など)
	d) 平文(普通の文章)
	e) ジャスティフィケーション(センタリング，右寄せ)
	f) テーブル
	g) 図(線画)
	h) 引用(メール/ニュースに見られる)
	h)タイトル
	j) 改ページ/スペース空け

2.2 べた書き文書の解析
  明確に定義された構文規則に基づいて解析可能なプログラミング
言語などとは異なり，
べた書きの文書は書き手の個性によるスタイルの差がおおきい．
  厳格なルールを定めて，それに従った文書だけを入力として
受け付けることにより確実な解析をおこなうというアプローチもあるが，

	・既存のべた書き文書のTeX/troff化に使いたい
	・文書のスタイルに口を挟んでも利用者は受けいれてくれない

という要請があるため，少なくとも
読んで分かりやすいように書かれた文書であれば，どのような
スタイルでも受け付けることを目標とした．
  文書解析を実現するために，
べた書きされた文書の構造はどのように理解されるのかを考える．
これには二つの情報が使われている．

	1) 文書の外見的情報
		おおざっぱに文書をながめる．
		空白行やインデントによるおおきな区切り．
		リスト・セクションタイトル・テーブルなどの
		文書構造がわかる．
	2) 文章の内容(意味)
		外見的情報を補足する情報として文章の内容が必要な
		ことがある．たとえば，二つの行がつながるのか
		切れるのかの判断には文章の内容が役に立つことが多い．

つぎの図に示すように，
べた書き文書から，文書の内容を取り除いても
容易に文書の構造を理解することができる．
そこで，プロトタイプでは(1)の外見情報
を使って解析を行なうことにした．

[[E
	3.2 リストの種類			3.2 ◯◯◯◯◯◯  
						                  
	 リストには，項目型，記述		  ◯◯◯◯◯◯◯◯◯◯◯◯
	型，列挙型の三種類がある．		◯◯◯◯◯◯◯◯◯◯◯◯◯
						                  
	    a) 項目型				    a) ◯◯◯     
	    b) 記述型				    b) ◯◯◯     
		- ブラケット			        - ◯◯◯◯◯
		- コロン			        - ◯◯◯  
	    c) 列挙型				    c) ◯◯◯     
						                  
	  リストはネストすることも		  ◯◯◯◯◯◯◯◯◯◯◯◯
	できる．				◯◯◯◯
]]E

		図2. べた書き文書とその外見情報

2.3 解析手順

plain2 は以下の手順でべた書き文書の解析を行なう


				      (3)
                                      ／─────────＼
                                      │セクションタイトル│
                                   × │リスト構造 	  │─────＼
                                 ／   ＼─────────／            ＼
┌￣￣￣┐    (1)           (2)／               (4)             (5)       ＼      (6)               ┌￣￣￣┐
│    	│    ┏━━━━┓  ┏━━━━━┓      ┏━━━━┓    ／───＼  ＼    ┌─────┐    │      │
│ べた	│    ┃タイトル┃  ┃行単位での┃      ┃ブロック┃    │構造の│OK  ×  │TeX/troff │    │ TeX  │
│ 書き	│━→┃抜きだし┣→┃特徴抽出  ┃━━→┃切りだし┃─→│判定  │───→│ドライバ  │─→│troff │
└＿＿＿┘    ┗━━━━┛  ┗━━━━━┛  ↑  ┗━━━━┛    ＼─┬─／    ×  └─────┘    └＿＿＿┘
                      ＼                    │        条件みたさない│      ／
                        ＼                  └───────────┘    ／
                          ＼    ／────＼                            ／
                            ＼─│タイトル│─────────────／
                                ＼────／

				図3. べた書き文解析


	1) タイトルの抜きだし
	     文書の先頭からタイトルを探して抜きだす．
	     タイトル部分だけは特別の構文規則により解析する
	2) 行単位での特徴抽出
		セクションタイトル，リストの候補を探す
	3) セクションタイトル・リスト構造の発見
	4) テキストブロックの切りだし
		- 空白行，他の構造によって区切られたブロック
		- インデントされたブロック
	5) ブロックごとに特徴を判定し構造を決定
		切り出されたブロックの特徴から構造を決定
	6) (4)で確実な判断が得られなかった場合，ブロックを切り直して
	   構造の判定を繰り返す
	7) 判定されと構造を TeX/troff のコマンドとして出力

2.3.1 ブロック切りだしのルール

べた書きされた文書から，文書構造候補として
ブロックを切り出す．
ブロック切りだしはつぎのルールで行なう．

	1) 先のセクション・リスト，そして空白行にはさまれた範囲
	2) インデントされた範囲

(1)については最小の範囲を選択すれば良いが，
インデントされた範囲の決定には曖昧さがある．
  はじめは，なるべく広い範囲のブロックを切りだし，
文書構造の判定に合格するまでブロックを細分化することで対応している．

      ┌…………………………┐
      ：○○○○○○○○○  ：  	
      ：		    ： 3← 2← 1
      ：○○○○○○○○○○：─┐─┐─┐
      ：○○○○○○○○    ：─┘─┘  │
      ：    ○○○○○○○○：─┐─┐  │
      ：    ○○○○○	    ：─┘  │ 	│
      ：	○○○○○  ：─┐  │  │
      ：	○○○○○  ：─┘─┘  │
      ：○○○○○○○○○○：─┐─┐  │
      ：○○○○○	    ：─┘─┘─┘
      ：		    ：
      ：○○○○○○○	    ：
      └…………………………┘

	 図4. ブロックの切りだし順序

以下，各文書構造の特徴と判定条件を述べる．

2.3.2 タイトル
  TeXが標準的に提供するタイトルの他に，いくつかの社内標準文書ヘッダ書式を提供している．

- 判定条件
	文書の先頭から，タイトル専用の構文規則にマッチする領域を探す
	構文規則に一致しないときは，タイトルがないもの判断する．

2.3.3 セクションタイトル
- 判定条件
	1) セクション番号を行の先頭に持つ
		セクション番号はドット(全角《．》または半角《.》)で区切ら
                れた数字の列．数字には全角/半角のいずれを使うこともできる．
	2) インデントされていない(optionで変更可能)
	3) 少なくとも直前が空白行である．
	   直後も空白行であればなお良い
	4) 列挙型リスト("1."，"2."，…)にはならない

2.3.4 リスト
リストはべた書き文書の中で唯一階層的な構造をつくるものである．
文書中でリストの使われる機会は多く，またその書き方の個人差が
特に顕著となる部分でもある．

- リストの種類
	- 項目型リスト
	- 列挙型リスト
	- 記述型リスト

- 判定条件
	以下に挙げる，同一種類リストの特徴を持つ行が，
	同一インデント位置に並んでいること．
	途中にインデントの少ない(左によった)行のないこと
	    項目型リスト: 先頭が次のいずれかマークで始まる
				"o "，"◇"，"●"，"○"，"◎"，"◯"，"・"，
                                "* ",	"＊", "+ " "-"，"−"
	    列挙型リスト: 英数字またはローマ数字により番号付けされた行．
                        英字/ローマ数字は全角/半角のいずれでもよい
			全角/半角の括弧/ドットを伴うか，または括弧で囲ま
                        れる，
	    記述型リスト: ブラケット"[ ]"で囲まれる．あるいは":"を付けられたタ
                        イトルのある行

- リストの例
	以下にべた書きされたリストと，その清書イメージを示す．

>> ● 一行の項目が連続するリスト
>>     ・べた書き入力
>>     ・マークアップ言語
>>     ・WYSIWYG
>>     この行は，リストには含まれない
>> ● 多段にネストしたリスト
>>     項目型: 
>> 	・ビュレット
>> 	・ダッシュ
>> 	・その他
>>     列挙型: 1，2，3やa,b,c，ローマ数字
>> 	I. 第二レベル，ローマンリスト
>> 	    (a) 第三レベル
>> 	    (b) ネストの深さはTeX/troffに
>> 	    の制限により限度がある
>> 	II. 第二レベル，ローマンリスト
>>     記述型: このリストのようなもの

		    図5. べた書きされたリスト

● 一行の項目が連続するリスト
    ・べた書き入力
    ・マークアップ言語
    ・WYSIWYG
    この行は，リストには含まれない
● 多段にネストしたリスト
    項目型: 
	・ビュレット
	・ダッシュ
	・その他
    列挙型: 1，2，3やa,b,c，ローマ数字
	I. 第二レベル，ローマンリスト
	    (a) 第三レベル
	    (b) ネストの深さはTeX/troffに
	    の制限により限度がある
	II. 第二レベル，ローマンリスト
    記述型: このリストのようなもの

		  図6. 変換後清書されたリスト

2.3.5 例示
  例示ブロックは，プログラムの引用や
コマンドの実行例のように，
フィルなし，コンスタント幅フォントで出力すべき領域である．
  他のべた書き文書の構造のいずれにもマッチしないような
ランダムなレイアウトをされた部分
また，メール/ニュースに見られる">>"などの記号をつかった
引用も例示として出力する．

- 判定条件
    テキストブロックから以下の特徴を調べこれが一定の基準を満たすとき例示ブ
    ロックとする．
	1) 空白の量
	2) 行の長さ
	3) 日本語/アルファベットの比率
	4) 前後ブロックに対してのインデントされているか否か
この判定は非常に微妙である．
過大な評価をすると，本来平文となるべき短い行が例示となってしまったり，
過小な評価をすると，フィルすべきでない領域をフィルしてしまうことになる．

2.3.6 平文

- 判定条件
	空白をあまり含まず，ライトマージンに近い長さを持つこと．

2.3.7 ジャスティフィケーション

- 判定条件
	右寄せ: 行が短く，右端がライトマージン付近にある
	センタリング:	行が中央に寄っている(インデント量と行の右端，ライ
                        トマージン間がほぼ等しい)

2.3.8 テーブル
  べた書きされたテーブルを TeX/troff の tabular/tbl
に変換する機能を用意している．

- 判定条件
	テキストブロックをテーブルとして解析可能か否かにより判定する．
	  枠線で囲まれたテーブルであればかなり複雑な形状のテーブルでも解釈
        可能である．枠線文字としては，"+-=|"の他にJISの罫線素片も受け付
        ける．

- テーブルの例
>> 	----------------------------------------------------
>> 	|                      | べた |マーク| ワー | WYSI |
>> 	|                      | 書き |アップ| プロ |  WYG |
>> 	====================================================
>> 	|覚えやすさ            |  ○  |  ×  |  ◎  |  ○  |
>> 	|データ変換            |  ◎  |  △  |  △  |  ×  |
>> 	|入力済み文章の流用    |  ◎  |  △  |  △  |  △  |
>> 	|文章入力速度          |  ◎  |  △  |  ○  |  △  |
>> 	----------------------------------------------------

		図7. べた書きで書かれたテーブル(表1の部分)

2.3.9 線画
  JIS罫線素片を用いた線画をpicture環境/pic
に変換する機能をサポートする．
この機能を利用するためには，エディタが罫線素片による作図を
サポートしていないと不便である．
罫線素片による線画では表現力に限界があるので，
ディスクの絵のような特殊記法の導入を試みている．
  特殊記法のために表現力は増しているが，もとの文書のままで読みやすいという
べた書き本来の特質が多少損なわれる．

- 判定条件
	図形構成要素となる文字(罫線素片など)が多く含まれていること．
	
- 線画の例

>>   ┌￣￣￣┐    (1)           (2)                 (4)
>>   │      │    ┌────┐  ┏━━━━━┓      ┏━━━━┓
>>   │ べた │    │タイトル│  ┃行単位での┃      ┃ブロック┃
>>   │ 書き │━→│抜きだし┝→┃特徴抽出  ┃━━→┃切りだし┃
>>   └＿＿＿┘    └────┘  ┗━━━━━┛      ┗━━━━┛

		図8. べた書きで書かれた線画(図2の部分)

罫線の接続の乱れはtroff出力のため．エディタ上では揃っている．

2.3.10 改ページ/スペース空け

べた書き文書中の連続した空白行，"^L"文字はそれぞれ
対応する量の空白，また改ページとして出力する．

3. 評価

3.1 どのように使われたか

べた書き入力のオリジナルアイデアでは，
複雑なフォーマット指定を必要とする文書は最初からターゲットとしないで，
べた書きで書ける範囲の文書を完全にべた書きで済ませるという
使い方を期待していた．

社内利用者を対象に実際に利用してもらったところ，
マークアップとべた書きの組み合わせ，
入手した文書のTeX/troff化で使われるケースも多かった．

	・TeX/troffに習熟していない利用者にとって，TeX/troff
	  を使い始めるきっかけ
	・べた書き + TeX/troffコマンド
		セクション，リスト等の文書構造，そしてテーブル・線画は
		べた書きで入力するが，特殊文字のクォート，
		フォントの指定などに TeX/troff のコマンドを併用する．
		従来から TeX/troffでの文書作成になれている利用者に多い．
	・入手した文書の TeX/troff化
		ワープロで書かれた文書を，TeX/troff化して
		再利用するケース．
		特に外部から入手した文書をTeX/troffに変換して利用
		する需要が多い．
	・TeX/troff変換
		troff文書を一度nroffを通した後，plain2により逆変換
		する．

これらの要求に応えるため，以下の機能をオプションとして提供した．

	a) ページブレークの切りだし
		RFCのようにページ番号，ヘッダフッタのはいった文書を
		TeX/troff化する．
	b) 出力スタイルの選択
		- インデント・リストマーク・改行など，なるべくべた書き入
                  力のイメージに合わせた出力
		- 文書構造以外の情報を省いたシンプルな出力
	c) TeX/troff コマンドの混在を許すモード
		特殊文字のクォートを行なわな

4. 今後の課題

  実際に多くの人に使ってもらうことで，べた書き入力のメリットを確認する
ことができた．今回のシステムは，マークアップ言語のコマンドに相当する付
加情報は一切必要とせず，清書に必要な情報はすべて入力されたべた書き文章中
より抽出する．抽出方法が発見的なものであるために，時々利用者の意図しない
変換結果をあたえることがある．変換をより正確におこなうためには，いくつか
の工夫が必要である．

	・利用者による解析パラメータ/ルールの変更
	・ユーザの癖をプロファイルに登録可能とする
	・文書解析による学習
	・文書中の「ヒント情報」の埋め込み
		コンテキスト自動判定のためのヒントとなる情報を
		利用者が与えることで，解析の精度を挙げる．
		ただし，ヒントを使いすぎるとマークアップと変わらなく
		なる危険がある．
		
以下に今後の課題を挙げる．

 (1) 字種，字体の指定

 (2) 印字結果に対する利用者によるカスタマイゼーション
	  べた書き変換系の出力に手を加えることで細かい出力フォーマット
        を指定している．しかし，変換後の文書に手を加えると，べた書きレベル
        での文章の変更が不可能になってしまう．
	現在のオプションによるパラメタ変更に加え，必要とする文章のスタ
        イルのパラメタライズをすすめることで，ある程度は印字結果にバリエー
        ションをもたせることが可能である．

 (3) ハイパーテキストやアウトラインエディタなど文書構成サポート機能との協調
        大きな文章を作成する場合は，上述のようなサポート機能とべた書きを協
        調させることで，より効率よく大量の文章の作成が可能となる．

 (4) パーソナルコンピュータ等のスモールシステムでも利用可能な簡易版清書系
     の作成と本システムとのリンク
	  この処理系の出力は文書処理シ
        ステム(TeX/troff)の機能のごく一部分のみを利用している．
        必要な機能のみを実現した簡易処理系を作成することで，PCなどでも手軽
        にべた書き入力による清書が利用可能となる．

 (5) 文書構成の取り込み
	目次，表/図番号，文献参照など，
	この論文のようにまとまった文書を書くための機能が不足している．

 (6) 非日本語文書での精度向上
	文書解析のための情報として，日本語/アルファベットの比率，日本語文
        字セット("●"，"・"のようなマークや罫線素片)を利用している．入力が
        英文の場合は自動的に解析パラメータの変更を行なうが，それでも限界が
        あり，日本語文書に比べると解析精度が落ちる．

 (7) 文章の内容の利用
	文章の内容に関する知識を利用することで，文書構造解釈の精度が
	大きく向上する可能性がある．
