[Back]

LinuxDoc+Emacs+Ispell-HOWTO

Author: Philippe MARTIN ( feloy@wanadoo.fr)
Translator: Sébastien Blondeel ( Sebastien.Blondeel@lifl.fr)

v0.4, 27 February 1998

早川 仁 ( cz8cb01@linux.or.jp)

v0.00, 1999年 2月27日


このドキュメントは Linux HOWTO、もしくは他の Linux Documentation Project の ドキュメントの著者及び翻訳者を対象としています。この文章の目的は そのような方達に、Emacs や Ispell などと言ったツールの使い方のヒントを 与えることです。 (訳注: 原文では "Emacs 上" という意味を表す場合に、under Emacs や upon Emacs と表記が統一されていませんが意味が同じ場合、訳はすべて "Emacs 上" に統一してあります。またこの文書はもともとフランス語で 書かれ、それを英語に翻訳した物をさらに日本語に翻訳したものです。 ですから、欧文フォント(ISO-8859-1)が含まれていましたが、recode という ソフトで "recode latin1:texte ファイル名" と指定して疑似表現に変換を しています。(例: cafe' など)なおこのソフトのソース自体は ftp://prep.ai.mit.edu/pub/gnu/recode/ などから 入手することができます)

1. 序文

2. イントロダクション

3. はじめてのドキュメント

4. Emacs の設定

5. Ispell

6. 力技

Appendix

7. insert-sgml-header 関数

8. 訳者あとがき


1. 序文

1.1 Copyright

Copyright Philippe Martin 1998
You may redistribute and/or modify this document as long as you comply with the terms of the GNU General Public Licence, version 2 or later.

このドキュメントは GNU General Public Licnce(GPL) Version 2 以降に 従う限り再配布や修正を行ってもかまいません。

1.2 クレジット

Se'bastien Blondeelに感謝します。彼は意地悪で、何度も Emacs の セットアップについて質問してきました。彼のするどい質問によって Emacs についてより知る事ができ、そしてその知識はこのドキュメントと してあなたに伝える事ができます。

1.3 コメント

このドキュメントをより良くするための物であれば、どんなことでも私に聞い てください。あなたの意見全てに目を通します。同じくこのドキュメントの トピックについての質問にも躊躇しないでください。このドキュメントをより 良くするための質問に答える事は嬉しい事です。

(フランス語から英語の翻訳者注:英語に自信が無ければ、私に送ってください!)
(英語から日本語の翻訳者注:英語に自信が無くても、私に送らないで下さい :)

1.4 Versions

この文書は以下のバージョンのソフトを対象としています。

(訳注: 訳者である私自身は、Windows NT Ver.4.0 上の Mule for Win 32 Version 1.22 (紅葉) (Emacs version 19.28.31ベース)で確認しましたが、 他のバージョンでも(必要なフォント等をお持ちな限り)特に問題は無いかと 思われます。Emacs 自体について書かれている場所では、可能な限り Mule でも 確認して補足してあります)


2. イントロダクション

2.1 SGML

SGML(Standard Generalised Mark-up Language) は 文書の型を定義する言語です。

例えば文書の型をレシピと定義すると、一番目の部分で材料、二番目で付属品、 三番目でケーキの焼き方の手順を、そして最後に素敵な絵で出来上がりを示します。

これは文書型定義(Document Type Definition 又はDTD)と 呼ばれます。これは最終的にどのように見えるかと言うことを定義するのではなく、 何を含んでいるかということだけを表現します。

同じ例をもう一度使ってみましょう。私のレシピのアイデアを読むと、あなたは 自分が書いたレシピやあなたの好きな料理とそっくり、あるいはアイデアを盗用 されたと思うかもしれませんが、実際には私のアイデアとあなたのアイデアは違っ たことから思いついたものです。私のレシピは浴室の戸棚の左上のすみっこを見 ていて思いついたもので、材料は、プールとバーベキュー調理台の間にある裏庭 を歩いている時にみつけたものです。あなたの場合はどうでしょうか?

標準化定義(SGML)によって、最終的に読者にどのように見えるかということを意識 せずにドキュメントを書くことができます。

2.2 LinuxDoc 型定義

この型はあなたの想像通り、Linux に関係するドキュメントを書くために 使用されます。

そのようなドキュメントは通常以下のように構成されます。−タイトルで 始まり、著者名、(翻訳者名)、バージョン、そして日付です。 次に概要(ですから、自分が探している情報が含まれているかどうかを判断す る為にすべてを読む必要はありません)それから目次が来ますので、急いでい る場合には直接読みたい部分へと飛べます。

つぎに章、節(セクション)、段落(パラグラフ)のリストが来ます。これら の中にプログラムやリストの挿入を行ったり、フォントを変更して単語や文 (センテンス)を強調したり、ドキュメント中の他の部分を参照する事などが 可能です。

そのようなドキュメントを書く為に必要なのは単に、タイトル、著者名、日付、 ドキュメントのバージョン、章、節などを正しく指定することとその要素は 何であるかといった事です。

2.3 SGML-Tools

SGML-Tools は、ドキュメント内の指示(タグ)をあなたが目的とする最終的な 形に変換するものです。もしあなたがそのドキュメントを個人用のライブラリ とするのであれば、PostScript を選択するでしょうし、世界中と Web で共有 したいのであれば HTML になるでしょう。もし Windows 上でも読まなければ ならないのであれば(どうしてもそうしたいのであれば)RTF 形式に変換して、 どんなワープロソフトからでも読めるようにすることもできますし、もしくは 気分を変えるために上記の3つのフォーマットすべてを使うこともあるでしょう。

SGML-Toolは anonymous FTP で ftp://ftp.lip6.fr/pub/sgml-tools/ より入手できます。


3. はじめてのドキュメント

3.1 テキスト形式のドキュメント

テキスト形式のドキュメントを、(他のフォーマットにする為に)SGML 形式に 変換したい場合、このように行います。

  1. 先頭に次のような行を追加します。
        <!doctype linuxdoc system>
             <article>
              <title>ここにタイトルを入れます</title>
              <author>著者名、著者のe-maiアドレスなどです</author>
              <date>バージョンと日付です</date>
           
    
  2. ドキュメントの概要を書く場合、そのパラグラフを <abstract></abstract> タグで囲んでください。
  3. それから <toc> タグを挿入して下さい。これは Table Of Contents(目次)の略です。
  4. 各章の始めの、章の番号及びタイトルをこのように置き換えてください。
           <sect>章のタイトル
           
    
    そして、</sect> タグを章の最後に追加して下さい。

    注意:自動的に行われますので、章番号を付ける必要はありません。

  5. セクションについても、同様に行ってください。番号を削除して、 タイトルを <sect1></sect1> で タグ付けする必要があります。
  6. 同じく <sectn></sectn> (n=2,3,4) を 使う事によって、セクション内で4レベルのネストを定義出来ます。
  7. 各パラグラフの始めには、<p> タグを挿入して下さい。
  8. 強調したい部分には、 <it></it>(イタリック)、 <bf></bf>(ボールド)、 <tt></tt>(タイプライタースタイル) といったタグを使って下さい。
  9. リストを挿入するためには、このようにします。
       これは4行のリストです:
    
             - ここは1行目です
             - 2行目です
             - 3行目です
             - 最後の行です
           
    
    これはこのように表示します。
       これは4行のリストです:
    
           <itemize>
           <item>ここは1行目です
           <item>2行目です
           <item>3行目です
           <item>最後の行です
           </itemize>
           
    
  10. ブロック内全てがプログラム(の一部)、もしくは目立たせる必要がある場合は、
        <verb>
        10 REM おぉ神よ、この言語はいったい何なんでしょうか?
        20 REM 永く失われし物のように見受けられますが
        30 PRINT "私は戻ってきた";
        40 PRINT "世界を救う為に。"
        50 INPUT "あなたはその時誰を頼りますか? ",M$
        60 IF M$="Bill" THEN PRINT "汝は賢人である。":GOTO PARADISE
        70 ELSE PRINT "汝は何も分かっておらぬ…":GOTO RICHMOND
        </verb>
    
  11. これまでの所で、あなたの SGML フォーマットにするスキルは見違えるように 向上しました。もしもあなたのドキュメントに磨きをかけたいのでしたら、 User's guide for SGML-Tools を参照してください。 LinuxDoc ドキュメント型について、より詳しく書かれています。

4. Emacs の設定

4.1 アクセント付きの文字

もしドキュメントをフランス語や他の西ヨーロッパの言語で書きたい場合、 8-bit 文字が必要になります。ここではそのような文字を扱うには どのように Emacs をセットアップするかについて説明します。

8-bit 文字の表示

Emacs に 8-bit 文字を表示させるためには、以下のような行が .emacs ファイルの中に必要となります。

       (standard-display-european 1)
       (load-library "iso-syntax")
       

(訳注: mule も同様です。ただし対応するフォントが必要になります)

Emacs を使用しているターミナルが 8-bit をサポートしていない場合、 iso-ascii ライブラリーを使用することができます。これは Emacs に 8-bit 文字を表示させる為の最も近い指定です。 iso-ascii ライブラリーを使う場合、

        (load-library "iso-ascii")

8-bit 文字の入力

使っているキーボードでアクセント付き記号の入力が入力できる場合、 何の問題もありません。もしそうでない場合は以下が助けになるでしょう。

iso-acc ライブラリー

Emacs の iso-acc ライブラリーは、7-bit キーボードから 8-bit 文字を入力 できるようにします。

使用するには、次の行を .emacs ファイルに入れてください。

      (load-library "iso-acc")
      

それからエディットしたいファイルを実行中の Emacs 上でオープンし、 Meta-x iso-accents-mode を入力してください。

そうすれば、例えばフランス語の単語である caféé を、' に続けて e をタイプすることにより、 入力することができます。 一般的にはアクセント付き文字は、はじめにアクセント記号(')を、 次にアクセントの付けられる文字(大文字、小文字)を入力することに よって行えます。以下にアクセントの例を挙げます。

  • ' : Acute
  • ` : Grave グラーブ
  • ^ : Circumflex シルコンフレックス
  • " : Dieresis ディエレーズ
  • ~ : Tilde ティルデ, cedilla セディーユ, およびその他の特定の記号 (iso-acc.el を参照)
  • / : 文字に斜線を引く、など。
  • アクセント付き記号ではなく、上記の記号自体を入力したい場合、 記号の次にスペースを押してください。例えば、l'éléphantl ' spc ' e l ' e ... と入力します。

    全ての使用可能なコンビネーションは iso-acc.el ファイルの 中で見つける事ができます。

    メタキー

    いくつかのターミナルでは、Meta (もしくは Alt)キーで 8-bit 文字を 入力できます。例えば、Meta-ié 文字を 入力できます。

    しかし Emacs では Meta キーは他の機能で使われています。また、アクセント 付き記号の入力を<Meta>キーで行うライブラリーを私は知りません。

    このような解決方法があります。

          (global-set-key "\ei" '(lambda () (interactive) (insert ?\351)))
                             _                                      ___
          
    

    (訳注:上記の意味は、次のようになります。

    このような行を .emacs ファイルに入れると、éMeta-i で入力できるようになります。同じようにして必要な キーコンビネーションを、i351 を変更することによって 再定義することができます。(コードは ISO-8859-1 キャラクターセットのものです)

    注意! いくつかのローカルモードでキーコンビネーションを 再定義しているかもしれません。

    8-bit SGML 文字の表示

    SGML では、アクセント付き記号をマクロで入力できます。例えば、é&eacute; です。− 一般的には、SGML を読む必要のあるアプリケーションは 8-bit 文字を読む事ができますので、このようなマクロを使用する必要はありませんが、 読むことのできないものもあるかもしれません。その場合はマクロを使うことによって、 この問題を解決することができます。

    iso-sgml ライブラリーもおなじように Emacs 上でアクセント付き記号の入力を 可能にしますが、これはファイルをディスクにセーブするときに、これらの 8-bit 文字を SGML の相当するものに変換します。

    このライブラリーのおかげでEmacs 上でのドキュメントの入力や編集作業は 簡単です、また 8-bit 対応ではないアプリケーションでもあなたのドキュメントを 扱う事ができるようになります。

    このライブラリーを使う為には、次の行を .emacs に追加するだけです。

          (setq sgml-mode-hook
          '(lambda () "Defaults for SGML mode."
           (load-library "iso-sgml")))
          
    

    (訳注: hook については、 auto-fill modeの訳注 でメジャー/マイナーモードと共に説明しています)

    4.2 SGML モード

    .sgml という拡張子を持ったファイルをロードすると、Emacs は自動的に sgml モードになります。もし自動でならなかった場合、 Meta-x sgml-mode として手動で行えます。その場合、次の行を .emacs ファイルに追加することによって、自動的にモードが 切り変わるようにできます。

          (setq auto-mode-alist
          (append '(("\.sgml$"  . sgml-mode))
                    auto-mode-alist))
         
    

    (訳注:autoc-mode-alist 変数には、読みこんだ拡張子によって自動的に変更 するモードがリスト形式で入っています。上記の例では .sgml という 拡張子のファイルを読みこんだ場合、sgml-mode というモードに自動的に 変わるように設定しています。同様にして他の拡張子の他のモードも追加できます)

    このモードは、例えばどのように 8-bit 文字を入力するかを選択できるように します。Meta-x sgml-name-8bit-mode (またはメニューの SGML/Toggle 8-bit insertion)で、8-bit 文字をいつものように入力するか、 または SGML フォームで、\マクロ を記述します。

    このモードでは、sgml-tags-invisible(またはメニューから SGML/Toggle Tag Visibility)で SGML タグの表示/非表示を行えます。

    4.3 PSGML モード

    PSGML モードは、Emacs 上での SGML ドキュメントの編集を楽にしてくれます。

    psgml-linuxdoc ドキュメントに、このモードのインストール方法と LinuxDoc での使い方についてが説明されています。

    4.4 その他

    auto-fill モード

    通常のモードでは、パラグラフの入力時には行の最後で Return キーを 押して改行する必要があります。改行をしなかった場合、パラグラフの全体が一つ に(一行)になってしまいます。改行するために Return を使用した場合、 右マージンがでこぼこなパラグラフになってしまうでしょう。

    適切な長さ以上の行は、エディターによっては見えなくなってしまうかも しれません。

    auto-fill モードは、このような面倒な作業を自動化してくれます。 指定のカラム(デフォルトでは 70)を越えた場合、自動的に改行されます。

    このモードを使用するには、このように行います。例ではカラムを80に設定しています。

           (setq sgml-mode-hook
                   '(lambda () "SGML モードのデフォルト"
                     (auto-fill-mode)   
                     (setq fill-column 80)))
           
    

    (訳注:Emacs/Mule には、メジャーモードとマイナーモードの2つがあり、 sgml-mode はメジャーモード、auto-fill-mode はマイナーモードです。 マイナーモードはどのメジャーモードとも同時に設定できます(できるはずです)。 ですから、上記の例だと sgml-mode になった時に同時に auto-fill-mode マイナーモードにもなるように指定していますが、他のモード (例えば text-mode など)で auto-fill-mode を指定することも 可能です。hook は、(通常)そのモードになる直前に実行されるルーチンの 事です。上記では sgml-mode-hook で記述してる為、sgml-mode に なった時のみ80カラムの auto-fill-mode になるようになっていますが、 コマンドとして実行したり .emacs などに記述する事によって 全モード共通/標準の設定を行う事も可能です)


    5. Ispell

    Emacs上でドキュメントのスペルチェックを行いたい場合、 Ispell パッケージ自身とそれの Emacs モードを使用する事ができます。

    5.1 デフォルト辞書の選択

    ファイルの読み込み時に、辞書を自動的に選択するように(複数の辞書も可能) Emacs をセットアップすることができます。まず一番目の、最も重要なものは Ispell と同時に配布されているメイン辞書です。複数の言語(の辞書)を選択 することもできます。二番目はあなた個人用の辞書で、メイン辞書になく、 あなたが登録した単語の格納先です。

    Ispell と同時に配布されているフランス語の辞書をデフォルト辞書、 ホームディレクトリの .ispell-dico-perso ファイルを個人用辞書として 使用したい場合、.emacs ファイルに以下の行を追加してください。

    (訳注:この文書のオリジナルはフランス語で書かれています。dicodictionnaire(辞書)、persopersonnel(個人)の 略です。ですから、dico-perso は、個人用辞書という意味になります)

           (setq sgml-mode-hook
             '(lambda () "SGML モードのデフォルト"
           (setq ispell-personal-dictionary "~/.ispell-dico-perso")
           (ispell-change-dictionary "francais")
           ))
           
    

    5.2 ファイルの言語に対応した辞書の選択

    複数の言語でのスペルチェックを行う場合、多少の問題があるかもしれません。 例えばドキュメントの翻訳など、言語(及び辞書)を頻繁に切り替える時などです。

    私には Lisp で自動的に、もしくはマウスクリック一回で、使用中の言語の メイン辞書・個人辞書を切り替える方法はわかりません(もし御存じでしたら ぜひ教えて下さい!)

    けれども、現在のファイルでどの辞書を使用するか(またその辞書のみ使用す ること)をファイルの末尾で指示する事が可能です。コメントとして指定を 追加する事によって、spell-check の起動時に Ispell はそれを読みこむ事が できます。

          <!-- Local IspellDict: english -->
          <!-- Local IspellPersDict: ~/emacs/.ispell-english -->
         
    

    例えば .emacs ファイルにデフォルトの辞書としてフランス語の辞書を 指定している場合に、英語で書かれたファイルの末尾にこの行を追加する事が できます。(追加することによって、英語の辞書を使用することができます)

    5.3 文書のスペルチェック

    文書全体をスペルチェックする場合、文書のどこからでも Meta-x ispell-buffer コマンドを使用できます。また次のようにして、文書のリージョンのみを チェックすることも可能です。

    (訳注:リージョンとは、指定された範囲全体のことです)

    そうすると Emacs は Ispell を起動します。未知の単語を見つけた時、 (通常ハイライト表示で)その単語を表示し、以下のようなキー入力を待ちます。

    ispell が未知の単語に近い単語を見つけた場合、小さなウィンドウを開いて そこに通番を付けて表示します。ミススペルした単語を置き換えるには その番号を単に押すだけでできます。

    5.4 個人用辞書 vs ローカルファイル辞書

    i キーは単語を個人用辞書に、対して A は単語を ローカルファイル辞書に登録します。

    ローカルファイル辞書は、ファイルの末尾にコメントとして挿入された単語の 集まりで、そのファイルを扱う時に Ispell により再度読みこまれます。 これにより、このファイルでのみその単語を既知とする事ができます。

    私自身の考えでは個人用辞書には、使用している言語のメイン辞書に無く(例 えばハイフンのついた単語など)、Linux のような固有名詞や造語のような 単語を登録すべきだと思います。ミススペルした単語を既知の単語として扱って しまうかもしれないので、名前などを個人用辞書に大量に登録することは危険 かもしれません。例えば、次のような場合、Ispell は惑わされてしまいます (訳注:未知の単語を既知と扱ってしまいます)。 `When the going gets tof, the tof get going'

    Tof は、名字(フランス語)を略したものです)

    5.5 スペルチェック入力

    Ispell は入力と同時にスペルチェックすることができます。そのためには、 ispell-minor-mode を使用します。モードの開始終了は、 Meta-x ispell-minor-mode コマンドを実行します。Ispell は未知の単語が 入力されるとビープ音を鳴らします。

    もしビープ音がわずらわしい(うたた寝しているルームメイトがいる時とか) 場合、Meta-x set-variable リターン visible-bell リターン t リターン を 入力して、ビープを鳴らす代わりに画面をフラッシュさせることができます。 次の行を .emacs に記述する事によって、常にビープ音を鳴らさないように することもできます。

           (setq visible-bell t)
          
    


    6. 力技

    6.1 ヘッダーの自動挿入

    Emacs ではファイルのオープン、セーブ、新しいモードの起動など、 イベントに対するアクションをフックすることができます。

    autoinsert ライブラリーはこの機能を使用します。たとえば Emacs 上で ファイルを起動した場合、ファイルのタイプによりこのライブラリーは 標準のヘッダーを挿入します。

    私たちのケースの場合、この標準のヘッダーとは LinuxDoc 型のタイトル、 著者、日付のことです。

    ここではヘッダーを挿入する方法を、2つ解説します。挿入する情報を含んだ テンプレートファイルを追加する方法と、elisp のルーチンを 実行する方法の2つです。

    ファイルを挿入する場合

    ファイルをオープンしてまず始めに、Emacs 上で auto-insert を実行する 必要があります。それから、auto-insert-alist リストを持っている autoinsert ライブラリを読みこみます。このリストはファイルの種類別の ヘッダーを定義していますので、これを修正する必要があります。 デフォルトでは ~/insert/ ディレクトリに、挿入するヘッダーの含まれた ファイルがありますが、auto-insert-directory 変数を変更することによって ファイルの場所を再定義することができます。

    SGML ファイルをオープンする度に ~/emacs/sgml-insert.sgml ファイルを 挿入するには、次の行を .emacs ファイルに追加してください。

          (add-hook 'find-file-hooks 'auto-insert)
          (load-library "autoinsert")
          (setq auto-insert-directory "~/emacs/")
          (setq auto-insert-alist
                (append '((sgml-mode .  "sgml-insert.sgml"))
                        auto-insert-alist))
          
    

    (訳注: alist は連想リストの事です。例えば、 '(pine . cones) の場合、pine というキーは cones と いう値に関連づけられます(真ん中の . を忘れずに!)。 またリストの先頭に ' が付いてない場合、リストの初めの 要素は関数名を表します。(foo bar)foo 関数に bar という引数を渡しています。'(foo bar) は単に foobar という要素の入ったリストです)

    これで ~/emacs/sgml-insert.sgml に好きなヘッダーを記述できます。 Emacs を再起動して(訳注:.emacs を開いて Meta-x eval-current-buffer でもよい)適当な .sgml ファイルを 起動してみてください。すると Emacs は自動挿入の確認を表示します。 yes と答えるとあなたの作成したヘッダーが挿入されます。

    ルーチンを実行する場合

    これはファイルを挿入する場合と同じように動作しますが、 auto-insert-alist に挿入するヘッダーのファイルを追加する代りに、 実行する関数を追加します。 ここではどのように準備するかという事のみを扱います。当然この関数の名前は ~/emacs/sgml-header.el にしたい事でしょう。(非常に 長くなってしまうと思われる、関数の定義は .emacs ファイルの中に 記述する必要はありません)

          (add-hook 'find-file-hooks 'auto-insert)
          (load-library "autoinsert")
          (add-to-list 'load-path "~/emacs")
          (load-library "sgml-header")
          (setq auto-insert-alist
                (append '(((sgml-mode .  "SGML Mode") . insert-sgml-header))
                    auto-insert-alist))
          
    

    insert-sgml-header 関数の例は、 appendix にあります。


    7. insert-sgml-header 関数

    この関数は、ユーザーの利便の為に Linux Documentation Projetct ドキュメ ントをファイルに挿入します。この関数はファイルをオープンした時に自動的、 もしくはユーザーが明示的に指定する事によって呼び出されます。

    この関数は mini-buffer からユーザーにいくつかの情報の入力を促しますが、 入力必須の物と、そうでないものがあります。

    始めにタイトルの入力を促します。何も入力されなかった場合、何も挿入せずに 関数の実行を終了します。次に日付、著者、著者の e-mail、そして ホームページです(e-mail と home page の入力はオプションです)。

    その次は翻訳者の名前の入力ですが、関係が無い場合は単に Return を押せば、翻訳者に関係する情報の入力はこれ以上促されません。 名前を入力した場合、e-mail と home page の入力をするように表示されます (同様にこの2つはオプションです)。

    入力が終わるとカレントのバッファに、入力した情報と abstract, toc, sect タグが挿入されます。最後にカーソルを、概要を入力する場所(訳注:つまり <abstract></abstract> の間)に 移動して実行を終了します。

    (defun insert-sgml-header ()
      "Inserts the header for a LinuxDoc document"
      (interactive)
      (let (title author email home translator email-translator home-translator date 
              starting-point)
        (setq title (read-from-minibuffer "Title: "))
        (if (> (length title) 0)
        (progn 
          (setq date (read-from-minibuffer "Date: ")
            author (read-from-minibuffer "Author: ")
            email (read-from-minibuffer "Author e-mail: ")
            home (read-from-minibuffer "Author home page: http://")
            translator (read-from-minibuffer "Translator: "))
          (insert "<!doctype linuxdoc system>\n<article>\n<title>")
          (insert title)
          (insert "</title>\n<author>\nAuthor: ") (insert author) (insert "<newline>\n")
          (if (> (length email) 0)
              (progn
            (insert "<htmlurl url=\"mailto:")
            (insert email) (insert "\" name=\"") (insert email)
            (insert "\"><newline>\n")))
          (if (> (length home) 0)
              (progn
            (insert "<htmlurl url=\"http://")
            (insert home) (insert "\" name=\"") (insert home)
            (insert "\">\n<newline>")))
          (if (> (length translator) 0)
              (progn
            (setq email-translator (read-from-minibuffer "Translator e-mail: ")
                  home-translator (read-from-minibuffer "Translator home page: http://"))
            (insert "Translator : ") 
            (insert translator) 
            (insert "<newline>\n")
            (if (> (length email-translator) 0)
                (progn 
                  (insert "<htmlurl url=\"mailto:") 
                  (insert email-translator) (insert "\" name=\"") 
                  (insert email-translator)
                  (insert "\"><newline>\n")))
            (if (> (length home-translator) 0)
                (progn 
                  (insert "<htmlurl url=\"http://") 
                  (insert home-translator) (insert "\" name=\"")
                  (insert home-translator)
                  (insert "\"><newline>\n")))))
          (insert "</author>\n<date>\n")
          (insert date)
          (insert "\n</date>\n\n<abstract>\n")
          (setq point-beginning (point))
          (insert "\n</abstract>\n<toc>\n\n<sect>\n<p>\n\n\n</sect>\n\n</article>\n")
          (goto-char point-beginning)
          ))))
     
    


    8. 訳者あとがき

    日本語訳は Linux-JF プロジェクトの方々から多くのご助言を頂きました。 ありがとうございます。

    日本語訳:早川 仁

    1999年 2月27日


    sgml21html conversion date: Mon Nov 29 06:16:08 JST 1999