  LinuxDoc+Emacs+Ispell-HOWTO
  Author: Philippe MARTIN (feloy@wanadoo.fr)
  Translator: Sebastien Blondeel (Sebastien.Blondeel@lifl.fr)

  v0.4, 27 February 1998
  早川 仁 (cz8cb01@linux.or.jp)

  v0.00, 1999年 2月27日

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

  ______________________________________________________________________

  目次

  1. 序文
     1.1 Copyright
     1.2 クレジット
     1.3 コメント
     1.4 Versions

  2. イントロダクション
     2.1 SGML
     2.2 LinuxDoc 型定義
     2.3 SGML-Tools

  3. はじめてのドキュメント
     3.1 テキスト形式のドキュメント

  4. Emacs の設定
     4.1 アクセント付きの文字
        4.1.1 8-bit 文字の表示
        4.1.2 8-bit 文字の入力
           4.1.2.1 iso-acc ライブラリー
           4.1.2.2 メタキー
        4.1.3 8-bit SGML 文字の表示
     4.2 SGML モード
     4.3 PSGML モード
     4.4 その他
        4.4.1 auto-fill モード

  5. Ispell
     5.1 デフォルト辞書の選択
     5.2 ファイルの言語に対応した辞書の選択
     5.3 文書のスペルチェック
     5.4 個人用辞書 vs ローカルファイル辞書
     5.5 スペルチェック入力

  6. 力技
     6.1 ヘッダーの自動挿入
        6.1.1 ファイルを挿入する場合
        6.1.2 ルーチンを実行する場合

  A. insert-sgml-header 関数
  B. 訳者あとがき

  ______________________________________________________________________

  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

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

  o  Sgml-tools version 0.99,

  o  Emacs version 19.34,

  o  Ispell version 3.1,

  o  この文書の中で参照されている全ての Emacs ライブラリは、新しいバー
     ジョンの Emacs と一緒に配布されているものです。ただし、XEmacs と一
     緒に配布されている iso-sgml 及び単体のライブラリーである psgml は除
     きます。

     （訳注： 訳者である私自身は、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 形式に変換し
  て、どんなワープロソフトからでも読めるようにすることもできますし、もし
  くは気分を変えるために上記の３つのフォーマットすべてを使うこともあるで
  しょう。

  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) を使う事によって、セクション内
     で４レベルのネストを定義出来ます。

  7. 各パラグラフの始めには、<p> タグを挿入して下さい。

  8. 強調したい部分には、 <it> と </it>(イタリック）、 <bf> と </bf>（ボ
     ールド）、 <tt> と </tt>（タイプライタースタイル）といったタグを
     使って下さい。

  9. リストを挿入するためには、このようにします。

        これは４行のリストです:

              - ここは１行目です
              - ２行目です
              - ３行目です
              - 最後の行です

  これはこのように表示します。

     これは４行のリストです:

         <itemize>
         <item>ここは１行目です
         <item>２行目です
         <item>３行目です
         <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 をセットアップするかについて説明します。

  4.1.1.  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")

  4.1.2.  8-bit 文字の入力

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

  4.1.2.1.  iso-acc ライブラリー

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

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

        (load-library "iso-acc")

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

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

  ` : Grave グラーブ

  ^ : Circumflex  シルコンフレックス

  " : Dieresis ディエレーズ

  ~ : Tilde ティルデ, cedilla セディーユ, およびその他の特定の記号 (iso-
  acc.el を参照)

  / : 文字に斜線を引く、など。

  アクセント付き記号ではなく、上記の記号自体を入力したい場合、記号の次に
  スペースを押してください。例えば、l'elephant は l ' <spc> ' e l ' e
  ... と入力します。

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

  4.1.2.2.  メタキー

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

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

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

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

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

  o  global-set-key : 全てのモードで共通のキーバインドを定義

  o  \e は ESC キーを表わしますので、 \ei は <ESC>+i の事です。

  o  lambda : リストはラムダ式です。ラムダ式のリストはコマンドとして扱わ
     れます。

  o  リスト : ()で囲まれた中身と()自身の事をリストと呼びます。

  o  (interactive) : コマンドであり、対話的に（キー入力から）関数を実行
     するという事を表します。

  o  (insert ?\351) : 文字コード \351 を（キー）入力したのと同じ事になり
     ます）

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

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

  4.1.3.  8-bit SGML 文字の表示

  SGML では、アクセント付き記号をマクロで入力できます。例えば、e は
  &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.  その他

  4.4.1.  auto-fill モード

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

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

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

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

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

  （訳注：Emacs/Mule には、メジャーモードとマイナーモードの２つがあり、
  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 ファイルに以下の行を追加してください。
  （訳注：この文書のオリジナルはフランス語で書かれています。dico は
  dictionnaire（辞書）、perso は personnel（個人）の略です。ですか
  ら、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 コマンドを使用できます。また次のようにして、文書のリージョンの
  みをチェックすることも可能です。

  （訳注：リージョンとは、指定された範囲全体のことです）

  o  リージョンの先頭を Ctrl-Spc（mark-set-command）で指定

  o  スペルチェックする範囲の最後へカーソルを移動

  o  Meta-x ispell-region コマンドを実行

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

  o  spc は今回のみ単語を正しいものとします

  o  i は単語を正しいものとし、個人用辞書に単語登録をします

  o  a は単語を今回のセッションの間、正しいものとします

  o  A は単語を正しいものとし、ローカルファイル辞書に登録します

  o  r は手動で、正しい単語の入力を行います

  o  R は以後のミススペルの単語すべてを、手動で入力した正しい単語で置換
     します

  o  x はスペルチェックを終了し、カーソルをチェックを開始した位置に戻し
     ます。

  o  X はスペルチェックを終了しますが、カーソルは現在の位置のままです。
     これによりその場からファイルの修正を行うことができます。 Meta-x
     ispell-continue コマンドを実行することによって、スペルチェックを続
     行することもできます。

  o  ? はオンラインヘルプの表示を行います

  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 型のタイトル、著
  者、日付のことです。

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

  6.1.1.  ファイルを挿入する場合

  ファイルをオープンしてまず始めに、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 は連想リストの事です。例えば、いう値に関連づけられます
  （真ん中の . を忘れずに！）。またリストの先頭に ' が付いてない場合、リ
  ストの初めの要素は関数名を表します。(foo bar) は foo 関数に bar という
  引数を渡しています。'(foo bar) は単に foo と bar という要素の入ったリ
  ストです）

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

  6.1.2.  ルーチンを実行する場合

  これはファイルを挿入する場合と同じように動作しますが、 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'' にあります。

  A.  insert-sgml-header 関数

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

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

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

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

  入力が終わるとカレントのバッファに、入力した情報と 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)
        ))))

  B.  訳者あとがき

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

  日本語訳：早川 仁

  1999年 2月27日

