  This file documents about T-Code driver for Emacs which can deal
with Japanese characters.

  Copyright (C) 1997-2000 Kaoru Maeda, Yasushi Saito, KITAJIMA Akira

Tコード入力環境tc2
******************

  このマニュアルでは、日本語の扱いが可能なEmacsでTコード文字入力を行う
ためのパッケージを解説します。ここで対象としているパッケージのバージョ
ンは2.3です。

  このマニュアルは2003年3月17日に改訂されました。

Tコードとは
***********

  "Tコード"は東京大学理学部情報科学科山田研究室で開発された"無連想2ス
トローク漢字入力方式"です。ここでは、Tコードについて、日本語の扱いが可
能なEmacs(以降では単にEmacsと呼びます。)用のTコード入力環境tc2を使用す
るにあたって必要最小限の紹介をします。

2ストローク入力とは
===================

  "2ストローク入力"はキー2打鍵の組み合わせで漢字1文字を表すことによっ
て漢字入力を行う入力方式です。漢字入力は現在「かな漢字変換入力」が主流
であると思われます。しかし、かな漢字変換は判断を必要とする作業であり、
大量の文書を入力するのには向きません。一方、2ストローク入力では、キー
ボードから直接漢字を入力できるので、変換の必要はありません。キーの2打
鍵で常に一つの文字を入力することになるので、文章の入力はリズムをくずす
ことなく行えます。

     ■ただし、2ストロークで表せる文字の種類には限りがあります。2スト
     ロークで直接入力できない文字のことをTコードでは"外字"と呼びます。
     外字の入力にはかな漢字変換を使うこともあります。Emacs用のTコード
     入力環境tc2では、外字入力用に、部首合成変換(see 部首合成変換.)
     ・交ぜ書き変換(see 交ぜ書き変換.)
     ・JISコード表(see Tコードを使う.)などの
     補助入力手段を提供しています。□

  漢字に対するキーの割り当てには"連想式"と"無連想式"があります。連想式
というのはキーの組み合わせと文字の間に連想があるものを言います。たとえ
ば「トキ」で「時」を表すなどの方法です。一方無連想式というのはそれらの
間に連想関係がないものを言います。

  一般に連想式は習熟にかかる時間は短くてすみますが、ある程度上達してし
まうと打鍵速度が上がらなくなります。その理由は文字と打鍵位置の間に関係
があるために入力が思考によって邪魔されてしまうためと、もともと入力する
時のことは考えられていないために"awkward sequence"(複雑な指の運びを強
いられる打鍵列のこと)が多くなり指に負担がかかってしまうためです。

  無連想式では入力時のawkward sequenceが小さくなるように打鍵位置を決め
られるため、習熟すればするだけいくらでも速く入力できるようになります。
しかも変に思考に邪魔されることがないため、英文タイピストのようにおしゃ
べりをしながら文書の入力ができるようになるといわれています。そのかわり
打鍵位置を覚えるまでは、何の手がかりもないのですから長い時間をかけてひ
たすら覚えることになります。

  2ストローク入力方式はたとえば手書きの文書を計算機に入力する時に最大
の効果が期待できます。目から入ってきた文字を言語中枢を経由することなく
手で打つことができるからです。しかし、頭で考えながら文章を入力するとき
には必ずしも最善の方法ではないかもしれません。

Tコードで使用するキーボード
===========================

  Tコードでは片手あたり5列4段20個、計40個のキーを使います。40個のキー
を2打鍵することで1文字の入力を行います。人指し指は2列分を受け持ちます。
Tコードでは40個のキーの2打鍵、計1600通りの打鍵位置のうち現在約1300に文
字を割り当てています。新聞などの記事を入力する際には、入力するべき文字
の約95--98%がTコードの二打鍵で入力できるといわれています。

  普通のキーボードでTコードを利用する場合、次の図のような配列を用いま
す。このマニュアルでは、いわゆるQWERTY配列のキーボードを想定しています。
以降の説明でも、特に断らない場合はこの配列に基づき説明します。なお、T
コード入力環境tc2では、Dvorak配列用などにカスタマイズすることができま
す(see 入力文字と仮想鍵盤との対応.)
。実際のキーボードでは、キーは下図のような長方形ではなく、一列
毎にずれた配列になっていることが多いのですが、そこはがまんして使うこと
にします。

      左手用          右手用

     1 2 3 4 5      6 7 8 9 0
     Q W E R T      Y U I O P
     A S D F G      H J K L ;
     Z X C V B      N M , . /

     ■Tコード専用のキーボードも存在します。Tコード用のキーボードを見
     ると、その第一印象は真っ白なことです。真っ白なのはキートップに書
     くべき情報が何もないことから納得できます。次にもっとよく見るとキー
     が長方形に並んでいることに気づきます。キーの配置が長方形だという
     のは、「上段が左に、下段が右にずれて」いないということです。タイ
     プライターに由来するこの「ずれ」は電子化された今のキーボードには
     必要ないからです。□

ストローク表の見方
==================

  Tコードの打鍵位置の割り当てを表にまとめたものが"ストローク表"です。T
コード入力環境上で`11', `10', `01', `00'を入力すればこの表を表示させる
ことができます(see Tコードを使う.)。この表は大きく四つの
部分に分かれています。それぞれ、5×4の文字の長方形が5×4個並んでいます。
そのうちの一つを見てみましょう。

     RL

       ■■■■*   ■■■■■  ■■■■■  ■■■■■  ■■■■■
       請境系探象  尚賀岸責漁  舎喜幹丘糖  布苦圧恵固  姿絶密秘押
       盛革突温捕  益援周域荒  康徒景処ぜ  邦舞雑漢緊  衆節杉肉除
       依繊借須訳  織父枚乱香  譲ヘ模降走  激干彦均又  測血散笑弁

       酸昼炭稲湯  貿捜異隣旧  攻焼闘奈夕  盤帯易速拡  汽換延雪互
       歩回務島開  キせ区百木  や出タ手保  コ山者発立  ナ金マ和女
       給員ど代レ  分よル千ア  7 か( トれ  きっ日国二  上く8 え年
       相家的対歴  付プばュ作  内工八テ見  九名川機チ  サ建パ第入

       桜瀬鳥催障  典博筋忠乳  採謡希仏察  君純副盟標  犯余堀肩療
       中スもお定  わラ東生ろ  う4 ) 十リ  あこ6 学月  本さら高シ
       3 と〇てる  ーした一が  い、の5 1   。* 0 ・2   ではになを
       ッ人三京ち  ロク万方フ  んまンつ四  けイす電地  業時「長み

       呼幅歓功盗  紀破郡抗幡  房績識属衣  去疑ぢ綿離  秒範核影麻
       店持町所ほ  全じ自議明  バ部六経動  後間場ニ産  問ム七住北
       行ド円小ジ  通カ社野同  だり―め大  新」9 子五  事田会前そ
       海道ず西げ  当理メウグ  不合面政オ  委化ビ目市  気売下都株

  表の左上に`RL'と書いてあるのは、この表が1打鍵目は右手、2打鍵目は左手
で打つ文字の表であることを示しています。小さなブロック内での文字の位置
が1打鍵目の打鍵位置を、そのブロックが全体の中でどこにあるかが2打鍵目の
打鍵位置を表しています。たとえば`円'という字は左下のブロックの中にあり、
その中で中央中段にありますから、1打鍵目は右手中指のホームポジション、2
打鍵目は左手小指の下段(`Z'のキー)ということになります。この表現形式を"
木を見て森を見る方式"と評した人がいます。

  この表の中で`■'で表された打鍵位置には現在文字が割り当てられていませ
ん。また、`*'で表された打鍵位置は、機能または3ストローク以上のキースト
ロークを表しており、文字は割り当てられていません。ここで、機能とは、た
とえば部首合成変換入力(see 部首合成変換.)の開始、
交ぜ書き変換入力(see 交ぜ書き変換.)の開始などを
指します。また、3ストローク以上のキーストロークはTUTコード (see TUT コードで入力するには.)
で使用します。

Tコード情報の入手方法
=====================

WWW
---

  Tコードオープンラボ`http://openlab.ring.gr.jp/tcode/'でTコード関連の
情報を公開しています。

  Emacs用のTコード入力環境tc2のサポートページは
`http://openlab.ring.gr.jp/tcode/tc2/'です。

Tコードメーリングリスト
-----------------------

  Tコード のメーリングリストが運営されています。Tコードに興味を持つ人
であれば、誰でも入会できます。内容、あるいは参加方法について知りたい人
は、`tcode-ml@is.s.u-tokyo.ac.jp'宛に`# guide'という内容のメールを送っ
てください。下はその例です。

     % echo '# guide' | mail tcode-ml@is.s.u-tokyo.ac.jp

  ニフティサーブからメーリングリストに参加したい場合には、
`INET:tcode-ml@is.s.u-tokyo.ac.jp'あてに`# guide'の1行からなるメールを
送ってください。

ニフティサーブ
--------------

  ニフティサーブのFKBOARDでは、Tコード等の直接入力方式に関する会議室が
開かれています。この会議室の最初の方には直接入力入門者のための非常に分
かりやすい説明が多数登録されています。

  また、次のPatioが直接入力に関するものです。

  1. ID: NBH00475 (情報のやりとり)

     管理人: かぜはるか (email: `nbh00475@nifterserve.or.jp')

  2. ID: GGB03565 (関連データの登録)

     管理人: m(as)m (email: `ggb03565@nifterserve.or.jp')

いちおうクローズドな形態になっていますので、参加を希望する方は、それぞ
れの管理人にメールして下さい。Passwordを教えてくれます。

個人環境の構築
**************

  ここでは、個人環境の構築方法について説明します。パッケージのインストー
ルが正しく行われていることを前提にしています。パッケージのインストール
の方法については、パッケージに付属の`INSTALL'を見てください。

`.emacs'での設定
================

  まず、`.emacs'での設定を行います。

  Emacs のバージョンが20以上か、XEmacsの場合は、次の記述が`.emacs'にあ
るか確認して、なければ追加してください。

     (set-language-environment "Japanese")

これにより、Emacsが、日本語文字コードで記述されたファイルの読み書きに
適した環境になります。

  インストールされた場所がEmacsに分かるように、load-pathを設定すること
が必要な場合があります。`*scratch*'バッファで (require 'tc-setup) C-j
と入力してみてください。エラーメッセージが表示された場合は、load-path
の設定が必要です。`tc.el'などがどこにインストールされているか確かめて、
次の記述を`.emacs'に追加してください。

     (setq load-path (cons "/PATH/TO/TC" load-path))

上の例の中の/PATH/TO/TCの部分に、`tc.el'などがインストールされているディ
レクトリを記述します。

  最後に、次の行を`.emacs'に追加してください。

     (require 'tc-setup)

  ここまでで、`.emacs'での設定は完了です。設定を反映させるため、Emacs
を再起動してください。

`.tc'での設定
=============

  tc2の設定は、設定ファイル`.tc'に記述します。ここでは、その作成方法を
示します。

  Emacs を起動し、`C-u C-\'を入力します。そして、`japanese-T-Code'と入
力します。ここで、TUTコードを使いたい場合は`japanese-TUT-Code'と入力し
ます。すると、「設定ファイル~/.tcがありません。作成しますか?(y or n)」
というメッセージが表示されます。ここで`y'と押すと、データを置くディレ
クトリとキー配置を聞かれますので、適切に入力します。

  データを置くディレクトリには、辞書などのデータが置かれます。最初の状
態は空ですが、必要に応じてファイルが置かれます。また、EELLLの練習テキ
ストを自分用に作りたい場合などは、ここで指定したディレクトリに置いてく
ださい。なお、もとのデータは変数`tcode-site-data-directory'で示される
ディレクトリにあります。

  キー配置については、使用するキー配置を選びます。大きく分けて、qwerty
とdvorakがあります。通常のキーボードをそのまま使用する場合は、qwertyを
選択してください。また、入力時にシフトを用いるかどうかという選択肢があ
ります。これは、キー配置名の次に-shiftが付いているかいないかで区別でき
ます。どちらにすればよいか分からない場合は、シフトは用いないでください。

  上記の操作を行うと、`~/.tc'が作成されます。あとは、必要に応じて`.tc'
を編集してください(see カスタマイズ.)。

Tコードの練習
*************

  Tコードで普通に入力できるようになるためには練習が必要です。実際の生
活で使い始める前に、十分練習をすることが理想です。ただ、職業的に使用す
るのでなければ、ある程度修得したら、交ぜ書き変換などを用いて、そこそこ
入力できるようにはなります。

  練習には、EELLLを用いるとよいでしょう。

  EELLLでは、TUTコードの練習もできます。TUTコードの練習については、
TUT-Code Home Pageの、習得と練習テキスト
(`http://www.crew.sfc.keio.ac.jp/~chk/shutoku.html')も参照してください。
TUT コード用のEELLLのテキストは、このウェブページにある練習テキストを
採用しています。

Tコード練習プログラム EELLL
===========================

  "EELLL"はTコードやTUTコードの練習プログラムです。`EELLL' (「うなぎぎ
ぎ」と読みます :-)は、山田研にかって存在したタイピング練習ソフト
`Computer Aided Touch Type Trainer CATTT' (「きゃっととと」) のEmacs
Lisp版であるということにちなんで名付けられました。端末を使って直接練習
するプログラムとしては、`DOGGG'が用意されています(see Tコード練習プ ログラム DOGGG.)
。

  EELLLは`M-x eelll'で起動します。ミニバッファから練習テキストの番号を
入力します。前回練習したレッスン番号がミニバッファにあらかじめ入力され
ています。基本的に、番号の順に練習を進めていってください。

  練習テキストが1行ずつ出てきます。それをTコードを使って入力して下さい。
入力はエコーバックされません。また、入力の際には部首合成変換や交ぜ書き
変換を使うことはできません。

  ビットマップを表示できる環境では、ビットマップによりヘルプが表示され
ます。うまく表示されない場合、変数`eelll-use-image'を`t'に設定すること
で、ビットマップ表示されることもあります。

  通常はテキストを順番に入力するだけですが、`M-x eelll-ramdom'で起動す
ることにより、指定したレッスンの中からランダムに何行か選択して表示され
ます。1回の練習で選択される行数は、変数`eelll-random-max-line'で指定し
ます。

  EELLLに用意されているテキストを用いずに、練習する文を自分で作成した
り何らかの文章を利用して練習したい場合、リージョンを指定して`M-x
eelll-region'を実行すると、そのテキストの練習ができます。

練習のヒント
============

  練習は基本的にはテキストの順に行えばよいのですが、ひらがなをだいたい
覚えたら、数字やカタカナなどは後まわしにして、漢字に進んでも構いません。
漢字が簡単に入力できることを早目に体験しておくと、練習意欲が増すかもし
れません。

  さて、練習にあたって心がけておくとよい点をあげておきましょう。

*指の動きでコード(キーの入力順)を覚える。*
     例えば「kd」で「の」という覚え方ではなく、「右手中指→左手中指」
     の動きで「の」というように覚えましょう。

*入力はリズムよく。*
     正確に打つことも大事ですが、一定のリズムで入力することがもっと重
     要です。EELLLでは、1行の入力が終わるまで入力した文字列が画面上に
     現れないようになっていますが、それはリズムを重視した練習を行いや
     すくするためです。

*練習は継続的に。*
     毎日決まった量(時間)を練習しましょう。なお、1日に2時間以上練習し
     ても効果は上がらないそうです。30分とか1時間とか、時間を決めて効率
     的に練習しましょう。

*覚えたはずの字のコードを忘れても気にしない。*
     人間誰でも忘れるもの。忘れたらまた覚えればいいだけのことです。

Tコードを使う
*************

使用法
======

  `C-\' (`toggle-input-method'がマップされているキー、see Tコードモー ド切り替えキーの変更.)
で、Tコードを入力するモードに
入ります。モード行が`[TC]'と変わります。

  この状態で、たとえば`jg'と打つと、`は'が挿入されます。2打鍵目にスペー
スを入力すると1打鍵目の文字がそのまま挿入されます。英小文字を少しだけ
挿入したい場合に便利です。

  シフトキーを押しながら入力すると、設定により動作が異なります。具体的
には、キー配置名の設定で、末尾が`-shift'の配置を使うようにした場合、シ
フト機能が有効になります。シフト機能が有効な場合、デフォールトでは、ひ
らがなからカタカナへの変換が行われます。つまり、「の」を入力するための
ストロークをシフトキーを押しながら行うと、「ノ」が入力されます。また、
シフト機能が無効で、変数`tcode-shift-lowercase'がtに設定されていた場合、
その英字の小文字が直ちに挿入されます。たとえば、`A'と入力すると、`a'が
挿入されます。シフト機能が無効で、`tcode-shift-lowercase'がnilの場合、
入力した文字がそのまま入力されます。シフトを有効にしたい場合は、`.tc'
で`tcode-set-key-layout'の配置の部分を、`-shift'の付いている分に変更し
てください。どのような配置があるのかは、変数`tcode-key-layout-list'の
値を参照してください。

  1打鍵目を打った直後にその1打鍵目を取り消すには、`DEL'(バックスペース)
を入力します。

  Emacsのコマンド引数も使用できます。文字を挿入するストロークの前に
`C-u'と入力すれば、次に入力した文字が二つ挿入されます(挿入される文字の
数が非Tコードモードの場合と異なります)。整数を指定した場合(`C-u 3'など)
はその数だけ挿入されます。

  もう一度`C-\'を打つと、非Tコードモードに戻ります。

  ミニバッファでも、`C-\'を入力することで、Tコードを使うことができます。
ミニバッファでTコードモードになっているときは、ミニバッファの左端に
`[TC]'と表示されます。

  Tコードモードでは、2ストロークで漢字を入力する以外に、いろいろな機能
が用意されています。これらの機能は、Tコードコード表の空の所に割り当て
られています。次に列挙します。

`jf'
     前置型の部首合成変換を開始します(see 部首合成変換.)
     。

     ただし、変数`tcode-use-postfix-bushu-as-default' を`t'にすると、
     `77'と`jf'の機能が入れ換わります。

`fj'
     交ぜ書き変換を行います(see 交ぜ書き変換.)。

`55'
     現在のカーソル位置にある文字の打ち方(ヘルプ表)を表示します(see
     様々なヘルプ機能.)。

`44'
     ヘルプ表で表示された打ち方で最も新しい分を再度`55'と同様に表示し
     ます。

`11'
     `LL' (第1ストローク:左、第2ストローク:左)のストローク表(see ス トローク表の見方.)
     を表示します。なお、ストローク表
     を表示するためのキーストロークは、`1'が左、`0'が右に対応していま
     す(最上段の、Tコードで用いるキーの左端と右端)。

`10'
     `LR' (第1ストローク:左、第2ストローク:右)のストローク表を表示しま
     す。

`01'
     `RL' (第1ストローク:右、第2ストローク:左)のストローク表を表示しま
     す。

`00'
     `RR' (第1ストローク:右、第2ストローク:右)のストローク表を表示しま
     す。

`32'
     句読点セットを「、。」と「, . 」の間で切り替えます。デフォールト
     は「、。」です。変数`tcode-switch-table-list'を使うと、自分の好み
     の句読点セットを利用することもできます(see 個人用設定ファイルの 見本.)
     。

`77'
     カーソル直前の2文字を部首合成変換によって合成した文字で置きかえま
     す(see 部首合成変換.)。`jf'が前置型の部首合成
     変換であるのに対して、`77'は後置型の部首合成変換です。

`88'
     現在のカーソル位置にある文字を、1打鍵目と2打鍵目を入れかえて打っ
     たときの文字で置きかえます。たとえば、`味'の上にカーソルを置いて
     `88'を打てば、`味'が`の'に変わります。行末にカーソルがある場合に
     は、その直前の文字に対してこの処理を行います。

`99'
     現在実行途中の部首合成変換・交ぜ書き変換を中断します。また、ヘル
     プ用のウインドウを消します。

`22'
     別バッファ(`*jis-code*')にJISの全文字をコード順に表示します。この
     バッファ上で適当な文字の上にカーソルを合わせて`RET'を押すと、その
     文字が、直前にいたバッファに挿入されます。`q'を押すと、直前にいた
     バッファに戻ります。

`33'
     英数字の文字コードを2バイト・1バイトの間で切り替えます。

`58'
     活用語を優先して交ぜ書き変換を行います(see 活用する語を変換する 際の注意点.)
     。

`[1-4]8, [2-5]9'
     文字数を指定して後置型交ぜ書き変換を行います(see 文字数を指定し た交ぜ書き変換.)
     。

  なお、Tコードモードで`?'を押すと、以上の、キーと機能との関係の要約が
表示されます。

部首合成変換
============

  外字を入力するための補助入力機構の一つに部首合成変換があります。

部首合成変換とは
----------------

  外字の入力をするのに、Tコードに割り当てられている文字の部首を組み合
わせる方法があります。これを"部首合成変換"と呼んでいます。

  Tコードの部首合成変換で使用する部首は、実際には漢和辞典にのっている
部首ほど正確ではなく、文字の形を元にかなりいいかげんにできています。以
下に主な部首を代表する文字を示します。

     ア、院→こざとへん　　イ→にんべん　　　　　ウ→うかんむり
     エ→工　　　　　　　　オ→てへん　　　　　　サ→くさがんむり
     シ→さんずい　　　　　ヌ→又　　　　　　　　ネ→しめすへん
     リ→りっとう　　　　　レ→礼のつくり　　　　ロ→口(くち)
     ワ→わかんむり　　　　ン→にすい　　　　　　部→おおざと
     性→りっしんべん　　　独→けものへん　　　　四→あみがしら
     図→くにがまえ　　　　之→しんにょう

  これらの文字だけでなく、部首を構成要素として含んでいる文字で代用する
こともできます。

  以下に、部首合成変換のいくつかの例を示します。

     ロ + ル→兄      日 + 生→星      シ + 談→淡      点 + 重→薫
     病 + 波→疲      図 + 木→困      国 + 木→椢      頭 + 川→順
     石 + 白→碧      言 + 売→読      ア + 良→限      水 + う→永

  また、部首の引き算もできます。

     　頭 - 豆→頁　　　例 - イ→列　　　列 - リ→歹　　　麻 - 木→床
      (頭 = 豆 + 頁)　 (例 = イ + 列)　 (列 = 歹 + リ)　 (麻 = 床 + 木)

  また、共通の部首を取り出す場合もあります。

     題 + 題→頁      進 + 進→之

  いくつかの記号は、意味を表す文字で入力します。

     た + す→＋      ひ + く→−      か + け→×      わ + る→÷
     等 + 号→＝      不 + 等→≠      矢 + 上→↑      、 + 、→，

ただし、記号はデフォールトの辞書には登録されていません。この変換を行い
たい場合は、辞書に登録してください(see 部首合成変換辞書.)
。

  2文字の組み合わせで入力できない文字は、3文字以上の組み合わせで入力で
きる場合があります。

     劇 = (七 + 上→虍) + リ

  まれに、組み合わされる2文字の順序が関係ある場合があります。

     門 + オ→閉      オ + 門→捫      足 + 戔→践      戔 + 足→踐

  部首合成変換は部首合成変換辞書に基づき行われます(see 部首合成変換 辞書.)
。tc2での部首合成変換アルゴリズムはちょっと変
わっています。実際にどの文字が入力されるのかは、一般に、組み合わせる2
文字を打鍵してみるまでわかりません。

tc2での部首合成変換
-------------------

  Tコードモードで`jf'と打つと部首合成変換モードに入ります。画面には`▲'
と表示されます。この状態で、Tコード文字を二つ入力すると、その2文字を合
成してできる文字にそれらが置きかえられます。合成してできる文字がないと、
beep音がなります。

  部首合成変換は再帰的に使うこともできます。たとえば、`劇[(七+上→虍)+
リ]' という文字を入力したい時には、

       キー                          画面
     ---------------------------------------
       jf (部首合成変換に入る)       ▲
       jf (さらに部首合成変換に入る) ▲▲
       ib (七)                       ▲▲七
       ht (上)                       ▲虍
       pd (リ)                       劇

のようにして入力することができます。

  また、Tコードモードで`77'と打つと、カーソルの直前の2文字を合成して、
その2文字を合成結果の文字に置きかえます(後置型部首合成変換)。こちらの
方が分かりやすいかもしれません。

       キー                          画面
     ---------------------------------------
       ib (七)                       七
       ht (上)                       七上
       77 (合成)                     虍
       pd (リ)                       虍リ
       77 (合成)                     劇

     ■あまりに複雑な合成が必要な文字については交ぜ書き変換を使う方が
     よいでしょう(see 交ぜ書き変換.)。□

  部首合成変換辞書の初期化(辞書の読み出し)は、処理能力の低い計算機では
時間がかかることもあります。このため、必要となるまで初期化を行わないよ
うにしたいと思うかもしれません。Emacsの変数`tcode-bushu-on-demand'を
`0'以外の値に設定すると、その値に応じて辞書初期化のタイミングが変わり
ます。See ユーザ変数.

  なお、辞書の初期化がされないうちは部首合成変換は使用できません。

対話的な部首合成変換
--------------------

  コマンド`tcode-bushu-convert-preceding-char-interactively'を使えば、
部首を順次入力して、インクリメンタルに文字を選択することができます。こ
のコマンドは、デフォールトではキーに割り当てられていません。使いたい場
合は、次のように設定してください。

     (add-hook 'tcode-ready-hook
     	  (function
     	   (lambda ()
     	     (tcode-set-action-to-table '(5 5) ; 66で対話的な部首変換
     					'tcode-bushu-convert-preceding-char-interactively))))

  このコマンドは、入力された1文字に対し、対話的に変換候補を表示します。
例えば、「山」と入力し、変換すると、エコーエリアに次のように表示されま
す。

     山 => 岡 [岳岩岸端缶嵩仙岨辿……

この例では、`=>'の左側にある`山'の部分が現在の対象部首の集合で、`=>'の
右側にある`岡'が変換候補です。`['以降が他の候補を表しています。この状
態で使用できるキーは次のとおりです。

`SPC'
`>'
     変換候補を次の字へ移す。

`<'
     変換候補を前の字へ移す。

`RET'
     先頭の候補を確定する。

`文字'
     文字を対象部首に追加して変換候補を絞る。

`Backspace'
     対象部首を1文字し、一段階前の状態に戻る。対象部首がなくなる場合は
     変換自体を中断する。

部首合成変換辞書
----------------

  部首合成変換辞書`bushu.rev'には、1行に1文字分のエントリがあります。

     唖口亜

  上の行は、`唖'という見出しの文字は`口'と`亜'の2文字から成ることを意
味します。現在の辞書では、過去の経緯から、見出しの文字を構成している文
字は1文字または2文字で構成されていますが、何文字でも構いません。

     院ア

  上のように、1文字で構成されている場合、その文字と見出しの文字は等価
である、ということを定義しています。つまり、`院'はこざとへんを代表する
文字ですが、`院'の代わりに`ア'を使っても、こざとへんを入力できるのです。
ここで、`院'と`ア'の順番に注意してください。見出しの文字の方が代表する
文字です。

  部首合成変換辞書への登録や削除は`bushu.rev'を編集することにより行い
ます。ここで、辞書はEUCコードでソートされていなければなりません。登録
したときは、忘れずにソートしてください。

  標準辞書`bushu.rev'とは別に、記号類を登録してある`symbol.rev' があり
ます。この辞書を使いたい場合は、その内容を`bushu.rev'に追加して、ソー
トしてください。Emacsを用いてソートする場合は、`bushu.rev'に`C-x i'な
どで`symbol.rev'追加して、`C-x h M-x sort-lines'の後`bushu.rev'を保存
してください。

交ぜ書き変換
============

  Tコードで外字を入力するには、部首合成変換のほかに交ぜ書き変換という
方法もあります。

交ぜ書き変換とは
----------------

  Tコードを使って熟語変換のようなことをすることも考えられます。この場
合、Tコードで入力できる漢字を直接入力することで同音異義語が減り、通常
のかな漢字変換よりも効率のよい変換をすることができます。

     き社のき者がき車でき社した
     き社→帰社、貴社  き者→記者  き車→汽車

このような変換を、読みとして漢字とひらがなを交ぜ書きして指定できること
から、"交ぜ書き変換"と呼びます (1) (see What is mazegaki conversion-Footnotes)
。

  交ぜ書き変換では、接頭語・接尾語はTコードで入力できることが多いので
いちいち接頭語つきの複合語として辞書に登録する必要はありません。そのか
わり、一つの単語について「読み」の組み合わせが増えるため、辞書が大きく
なってしまいます。

     郵便　　ゆうびん、ゆう便、郵びん
     方程式　ほうていしき、方ていしき、ほう程しき、ほうてい式、
     　　　　方程しき、方てい式、ほう程式

  一方、直接入力できる漢字のみからなる候補は、辞書に登録されていてもま
ず使用しないので、削除した方がよいかもしれません。その方が、同音異義語
が減り、選択がしやすくなるからです。See 交ぜ書き変換辞書の作り方.
また、see 交ぜ書き変換辞 書からの削除.

(1) 読みをひらがなだけで指定した場合でも、ここでは交ぜ書き変換と読んで
います。「交ぜ書きが可能な変換」というくらいの意味です。

tc2での交ぜ書き変換--後置型
---------------------------

  tc2標準の交ぜ書き変換は、この「後置型」です。

  この後置型交ぜ書き変換では、変換の前に特にモードに入ることなく適当に
読みを入力して、最後に`fj'と打つと、カーソル直前の文字列の中で辞書に登
録されている最も長い読みを使って(いわゆる最長一致)漢字変換が行われます。

候補の選択法
............

  候補の選択法は、入力した読みに対する辞書中の候補の数によって異なりま
す。

読みに対し、候補が一つの場合
     その候補に変換されますので、その候補を選択するためには、次の入力
     を始めるか、または`RET'により明示的にその候補を確定します。

     なお、前置型の変換(see tc2での交ぜ書き変換--前置型.)
     で、活用する語の変換をしないように設定している場合
     (see ユーザ変数.)は、自動的に確定します。

候補がちょうど二つの場合
     たとえば、読み「かん定」に対する漢字として、「勘定」「鑑定」の二
     つだけが辞書に登録されているとします。このとき、「かん定`fj'」(後
     置型の場合)と入力すると、次のように候補が表示されます。

          △{勘定,鑑定}

     ここで左側に表示されている候補を選ぶには、第1候補を選択するキー
     (デフォールトでは`d')を押します。右側の候補を選ぶには、同様に、第
     2候補を選択するキー(デフォールトでは`f')を押します。

     選択に用いるキーは、変数
     `tcode-mazegaki-alternative-select-first-keys' と変数
     `tcode-mazegaki-alternative-select-second-keys'の値を変えることで
     変更できます。いずれかの変数の値がnilの場合は、この選択法は用いず、
     候補が10個までの場合と同じになります。

候補が10個までの場合
     たとえば、「あわ`fj'」(後置型の場合)と入力すると、ミニバッファに
     一覧が次のように表示されます。

          [- 泡 阿波 粟] -  - [- - - -]

     これは、Tコードで使用するキーの、上から3段目を表しています。候補
     を選択するときは、選びたい候補に対応しているキーを押します。上の
     例では、「泡」を選択したいときは、Tコードで使用するキーの、上から
     3段目、左から2番目のキー(sのキー)を押します。

候補が10個を超える場合
     たとえば、「こう`fj'」と入力すると、ウインドウに次のように表示さ
     れます。

           -    -    -    -     -        -     -    -    -    -
          [孔   幸   厚   黄  ] 逅      鈎 [  肛   浩   袷   恰]
          [頁   煌   候   稿  ] 項      耕 [  膠   淆   功   侯]
          [-    -    -    -   ] -        - [   -    -    -    -]     (1/5)

     この表はTコードで使用するキーを表しています。候補を選択するときは、
     選びたい候補に対応しているキーを押します。なお、候補の優先度と入
     力するキーとの対応は、変数`tcode-mazegaki-stroke-priority-list'で
     指定できます(see ユーザ変数.)。

     表の右端の`(1/5)'は、候補の数が表三つ分あり、その表のうちの1番目
     を表示していることを示しています。表を切り替えるには、次の表に切
     り替える場合は`SPC'を、前の表に切り替える場合は`DEL'を押します。

  確定前の状態(交ぜ書き変換候補選択モード)で利用可能なキーは次のとおり
です。

`SPC'
     次の表または候補を表示する。

`DEL'
     前の表を表示する。

`RET'
     候補を確定して、候補選択モードを抜ける。

`<'
     読みを伸ばす。

`>'
     読みを縮める。

`C-u'
     候補を読みの状態にもどして、候補選択モードを抜ける。

`|'
     漢字を登録して、その後変換する。

`!'
     現在の読みの漢字を(一つ選んで)削除する。

`C-b'
     現在の区切りの先頭部分にカーソルを移動して、そこから後置型変換を
     行う(読みをさかのぼって変換する)。確定したら、その前の候補選択に
     戻る。

`C-f'
     さかのぼった変換を一つ分取り消す。

  上に挙げた以外のキーを入力すると、現在の候補を確定して、候補選択モー
ドを抜けた後、入力されたキーを再実行します。

  候補の先頭4個を超えた候補を確定すると、その候補は5番目の候補になり、
次回の出現順(一覧表での並び方)が変わります(先頭4個の候補の出現順には影
響を与えません)。一方、候補の先頭4個までを確定したときは、次回同じ読み
を変換しても、その出現順は変わりません。候補入れ替えの対象とならない候
補の数は、変数`tcode-mazegaki-fixed-priority-count'で指定できます
(see ユーザ変数.)。

活用する語に対する変換候補の検索法
..................................

  交ぜ書き変換モジュールでは、活用する語に対する変換候補の検索は、文法
の情報を用いず、パターンマッチングのみにより行います。辞書には、読みと
して、たとえば「ながめ―」のように、語幹`ながめ'と活用する語であること
の印`―'をつなげたものを登録します。

  パターンマッチングによる変換は次のように行われます。たとえば、「なが
めて」と入力して変換した場合には、「ながめ」と「て」とに分割すれば「な
がめ」が辞書の読みの「ながめ」と一致しますので、「ながめ」の部分を「眺
め」にし、語尾「て」をつなげたものに変換します。

  パターンマッチングのみによる変換の問題点としては、文法に合わない語尾
でも変換候補になることが挙げられます。この問題点に対し、交ぜ書き変換モ
ジュールでは、「人が選ぶので、おかしな候補があってもよい」という立場で、
これ以上の自動的な候補削減を行わないことにしています。

  逆に、パターンマッチングのみによる変換の長所は、古文や方言に柔軟に対
応できることです。

活用する語を変換する際の注意点
..............................

  活用する語は、以下の各項目に注意すれば、活用しない語と同様に変換でき
ます。

   * 活用しない語と活用する語は、異なる読みとして扱われます。

     たとえば、「葵」と「蒼い」は、両方とも読み方は「あおい」ですが、
     「葵」は活用しない語、「蒼い」は活用する語です。ですから、変換の
     際に表示される読みの一覧の中に、これらの候補が同時に現れることは
     ありません(「蒼い」が活用しない語として登録されている場合を除く)。

   * 活用しない語は、通常、活用する語よりも優先されます。

     上の「あおい」の例では、まず「葵」が表示され、読みを縮める(`>' を
     入力する)と、活用しない語として読みを縮めて区切り直します。つまり、
     この場合では、読みを縮めていくと、「おい」、「い」の順に活用しな
     い語の候補一覧が(もしあれば)表示されます。その後、更に読みを縮め
     る (1) (see Notice of inflection in mazegaki conversion-Footnotes)
     と、読みを、活用する語として区切り直し、
     「蒼い」が候補となります。

     活用する語であることを明示して変換すれば、活用する語である「蒼い」
     をすぐに選択できるようになります。これは、`fj'の代わりに`58' (ま
     たは`C-u fj')を入力することにより行えます。

   * 活用する語の区切り直しは、語幹の長さに基づいて行われます。

     活用する語は『語幹』と『語尾』に分かれますが、区切り直しは、縮め
     る方向の場合では、語幹の長い候補が優先され、また、その中で語尾の
     長い候補が優先されます。

   * 活用語尾にはひらがな・カタカナしか使えません。

     たとえば、読み「お―」・漢字「押」が登録されていても、「押し通す」
     を入力しようとして、「おし通す」という読みで変換することはできま
     せん。この場合は、「おし」という読みで変換し、その後、「通す」を
     入力してください(または、「おし通―」という読みを登録してください)。

(1) 『縮める』という語を使っていますが、この例のように、実際には
長くなることもあります。

文字数を指定した交ぜ書き変換
............................

  以下のキーストロークにより、後置型で変換対象(読み)の文字数を指定して
交ぜ書き変換ができます。

活用しない語
          キーストローク  読みの長さ
                18          1
                28          2
                38          3
                48          4

活用する語
          キーストローク  読みの長さ
                29          2
                39          3
                49          4
                59          5

  ここで、活用する語の読みの長さには、活用語尾の長さも含みます。

  また、`fj'のコマンド引数として文字数を指定することができます。`C-u
fj'の場合は活用する語(長さは自由)、正の整数(たとえば`C-u 3 fj')の場合
は活用しない語で文字数を指定、負の整数(たとえば`C-u - 3 fj')の場合は活
用する語で文字数を指定、というようになっています。

  文字数を指定した場合、活用しない語では、指定した読みに対し候補が一つ
しかない場合は、変換後ただちに確定します。

tc2での交ぜ書き変換--前置型
---------------------------

  変数`tcode-use-prefix-mazegaki'を`t'にすると、前置型の交ぜ書き変換を
使うことができます。Tコードモードで`fj'と打つと"交ぜ書き入力モード"に
入ります。このモードから抜けるときは、`99'を押します。このモードで読み
を入力し、`SPC'を押すと、交ぜ書き変換候補選択モードに入ります。候補選
択の方法は後置型の場合と同じです(see 候補の選択法.)
。

読みの補完
----------

  交ぜ書き変換辞書の読みから、入力途中の文字列を補完する(未入力の部分
を補う)ことができます。「読み」といっても、交ぜ書きですから、すべて漢
字でも構いませんし、カタカナでも英単語でも構いません。

  使用法を例で説明します。ここでは、辞書に読み「アルゴリズム」、漢字
「アルゴリズム」が登録してあるとします。

  「アル」と入力し、`='を押すと、「アル」で始まる読みが他にない場合で
は、「アルゴリズム」と補完され、その読みで変換されます。また、「アルゴ
リズム」の他に「アルゴン」という読みがあった場合では、「アルゴ」まで補
完され、ミニバッファに

     アルゴ{リズム, ン}

と表示されます。`{}'の中が候補です。この候補に対し、次の操作ができます。

`SPC'
     次の候補を先頭へ

`DEL'
     最後の候補を先頭へ

`='
`TAB'
`LFD'
     先頭の候補を選択し、それを読みとして交ぜ書き変換

`RET'
     補完をそこまでで中断

交ぜ書き変換辞書の管理
----------------------

  交ぜ書き変換辞書への漢字の登録および辞書からの削除の方法を説明します。

交ぜ書き変換辞書への登録
........................

  交ぜ書き変換辞書への登録の方法には、一つの漢字を登録する場合と、複数
の漢字をまとめて登録する場合の2通りあります。

一つの漢字を登録する場合
     Tコードモードで`|'を押します。その後、読み・漢字を順に入力してい
     けば登録できます。

     ここで、交ぜ書き変換の場合、同じ漢字に対して複数の読みを登録した
     い場合があります。たとえば、「春夏秋冬」という漢字に対して、「春」
     だけ入力法を知っている場合には、「春夏秋とう」「春夏しゅう冬」
     「春夏しゅうとう」「春か秋冬」「春か秋とう」「春かしゅう冬」「春
     かしゅうとう」という7通りの読みがあります。これは、読みを「春|か|
     しゅう|とう」、漢字を「春|夏|秋|冬」と入力することで、一度に登録
     できます。

複数の漢字を登録する場合
     まず、次の形式のデータを用意します。

          読み1 /漢字1-1/漢字1-2/.../漢字1-M/
           :
          読みN /漢字N-1/漢字N-2/.../漢字N-L/

     次に、このデータがあるバッファ上で`M-x
     tcode-mazegaki-make-entries-buffer'とします。なお、すでに登録され
     ている読みと漢字との組み合わせについては、二重登録はしないように
     なっています。

交ぜ書き変換辞書からの削除
..........................

  交ぜ書き変換辞書からの削除の方法には、一つの漢字を削除する場合と、複
数の漢字をまとめて削除する場合、入力法を覚えた漢字一字について不要な漢
字をまとめて削除する場合の3通りあります。

一つの漢字を削除する場合
     Tコードモードで`C-u !'を押し、読みを入力します。変換中や変換中断
     直後なら`!'だけで構いません。続いて、もしその読みに対して漢字が複
     数ある場合には、どれを削除するか選びます。

複数の漢字をまとめて削除する場合
     まず削除する漢字のデータを用意します。データの形式は、まとめて登
     録する場合と同じです(see 交ぜ書き変換辞書への登録.)
     。次に、そのデータがあるバッファで
     `M-x tcode-mazegaki-delete-entries-buffer'とします。なお、辞書に
     登録されていない読みと漢字との組み合わせに関しては無視します。

入力法を覚えた漢字一字について不要な漢字をまとめて削除する場合
     `M-x tcode-mazegaki-delete-kanji-from-dictionary'とし、漢字を1字
     指定します。こうすると、その漢字が読みに含まれず、漢字に含まれる
     ものを削除します。削除する前に、確認のため、漢字一覧が表示されま
     すが、このうち、実際に削除されるのは、指定した漢字を含む候補だけ
     です。なお、このときに表示される漢字一覧はコマンド
     `tcode-mazegaki-make-entries-region'で登録可能な形式です。部分的
     に登録し直したい場合に使うとよいでしょう。

     ここで、次のことに注意してください。たとえば、「花」を指定した場
     合、読み「あじさい」・漢字「紫陽花」というように、特殊な読みを持
     つものも削除されます。このような特殊な読みを辞書に残しておきたい
     のなら、新たに登録し直さなければなりません。

tc2での交ぜ書き変換--LEIMを使用する場合
---------------------------------------

 -- Function: tcode-kkc-region
     リージョンで囲んだ平仮名を漢字に変換する。

  `M-x tcode-kkc-region'とする事で、リージョンで囲んだ平仮名を漢字に変
換します。この時リージョン内は文章ではなく、単語を含めるようにして下さ
い。通常の交ぜ書き変換辞書に載っていないものを変換するのが主な目的です。
変数`tcode-kkc-toroku'で、変換した漢字を交ぜ書き変換辞書に追加するか制
御できます。

  適当なキーにバインドしておくと便利です。例えば`C-SPC'で変換をしたい
場合は、次のコードを`.tc' に書いておきます。

     (define-key ctl-x-map " " 'tcode-kkc-region)

  Emacs 20以降では、Mule機能が本家Emacsに統合されました。同時に英語以
外の言語の入力方法として"LEIM"と呼ばれるパッケージが提供されるようにな
りました。LEIMは日本語用の変換方法に、`kkc-region'(kkc: Kana Kanji
Converter)を採用しています。

  `tcode-kkc-region'はLEIM付属の日本語辞書を使って変換を行います。LEIM
付属辞書の実体は、SKK ver. 8.1付属の`SKK-JISYO.L'ですが、変換エンジン
はSKKではありません。Emacs 21では、混乱を排す為、ファイル名が
`ja-dic.el'に変わっています。

交ぜ書き変換辞書の作成
----------------------

  この章では、新たに交ぜ書き変換辞書を作成するための手順を簡単に説明し
ます。

  ただし、通常は、これから説明する方法は使う必要がありません。交ぜ書き
変換辞書は、初期設定を行えば自動的に作成されるからです。自動的に作成さ
れる辞書は、「Tコードで入力できる漢字がない」という前提のもとで作成さ
れたものです。この辞書をもとにして、登録や削除を行ってください。

交ぜ書き辞書の作成に必要なファイル
..................................

  交ぜ書き変換辞書を作るために必要なファイルは、パッケージインストール
時に、様々なファイルと共に一つのディレクトリに置かれます。そのディレク
トリは、`tcode-site-data-directory'の値を調べれば分かります。

  以下のファイルが交ぜ書き変換辞書の作成に用いるファイルです。

`pd_kihon.yom'
     元となる辞書ファイル。

`t225.dat'
`t300.dat'
`t400.dat'
`t450.dat'
`t575.dat'
`t675.dat'
`t900.dat'
`t1200.dat'

     `t'の後ろの数字は、漢字を大体何文字位覚えたかを示しています。

交ぜ書き変換辞書の作り方
........................

  1. 「完全に打ち方を覚えた漢字の表」(`certain')と、「まだ完全には覚え
     ていない漢字の表」(`uncertain')の二つのファイルを作ります。

     これは、`t*.dat'ファイルを適当につなぎ合わせて作ればよいでしょう。
     `t*.dat'の内容をざっと見て、「大体この中にある漢字は全部覚えたな」
     と思ったファイルを`cat'などでつなぎ合わせて、`certain'ファイルを
     作ります。同様に、「今練習中だけど、まだ完全には覚えていないな」
     という漢字の含まれるファイル群をつなぎ合わせて、`uncertain'ファイ
     ルを作ります。

          ■ただし、`t*.dat'はTコード用のデータですので、TUTコードを利
          用する場合では、`certain'、`uncertain'を、`t*.dat'を使わず自
          分で用意しなければなりません。書き方は`t*.dat'を参考にしてく
          ださい。□

     たとえば、`t225.dat'と`t300.dat'中の漢字は全部覚えたが、
     `t400.dat'と`t450.dat'中の漢字はまだ不完全、それ以外の漢字は全然
     打てない、という場合には、次のように`certain'と`uncertain'ファイ
     ルを作ることになります。`certain'と`uncertain'は、
     `tcode-data-directory'で指定されたディレクトリに置きます。(例では~
     /TCODE/になっています。)

          % cd `tcode-site-data-directory'で指定されたディレクトリ
          % cat t225.dat t300.dat > ~/TCODE/certain
          % cat t400.dat t450.dat > ~/TCODE/uncertain

     Perl5を持っている場合には、`mkcertain.pl'というプログラムを使って、
     この作業を対話的に行うことができます。

          ■生成される辞書が、`certain'、`uncertain'で指定した文字およ
          び指定しなかった文字によってどう違ってくるのかを簡単に補足し
          ます。交ぜ書き変換辞書では、ある漢字(変換候補)に対して、漢字
          を含む読みがあり得ます。`certain'、`uncertain'の指定の仕方に
          よって、読み中に現れる漢字が変わります。次の対応になっていま
          す。

                           読み中にその字が現れる 読み中にその字の読みが現れる
               certain              ○                         ×
               uncertain            ○                         ○
               どちらでもない       ×                         ○

          たとえば、「茶飯事」という漢字について、「茶」を`uncertain'
          に含め、「事」を`certain'に含め、「飯」はどちらにも含めない
          とすると、読みは「さはん事」、「茶はん事」になります。□

  2. `M-x tcode-make-mazegaki-dictionary'を実行します。

インクリメンタルサーチ
======================

  Tコードで文字の入力ができるようになると、インクリメンタルサーチのと
きにも文字をTコードで入力したくなるのは当然です。tc2では、`isearch'を
再定義して、インクリメンタルサーチ時にTコードで文字を入力できるように
しています。

  `C-s' (`isearch-forward')と打つと、元のバッファがTコードモードだった
時にはインクリメンタルサーチのプロンプトに`I-Search [TC]'と表示されま
す。このときキー入力をすると、それをTコードストロークと解釈してサーチ
文字列に加えます。

  また、インクリメンタルサーチ機能を日本語用に拡張しています。具体的に
は、以下の点です。

   * 行の折り返しも含めた検索

     文中で、語の途中で改行している場合でも、検索することができます。

   * `C-w'の拡張

     もともとのインクリメンタルサーチでは、`C-w'で、現在のカーソル位置
     から1語を検索文字列として取り出すという機能がありますが、日本語に
     対しては、1文字を対象にします。この主な理由は、日本語では単語の区
     切りを構文的に判断しにくいためです。けれども、`C-w'を繰り返し用い
     ることで、入力の手間を削減することができます。

     また、英単語の場合は、そのまま単語が検索文字列に追加され、さらに、
     語と語の間に改行が入っていても検索できます(ハイフネーションには対
     応していません)。

  ただし、上述の拡張は、インクリメンタルサーチ中でTコードモードになっ
ている場合でのみ有効です。そうでない場合は、期待する動作を行わない場合
があります。

  インクリメンタルサーチ時の文字入力でも、部首合成変換や交ぜ書き変換が
使用できます。ただし、交ぜ書き変換の場合は、一旦文字入力モードに入りま
すので、変換後、RETを入力してください。

  サーチを開始してからTコードモードを切り替えるには、
`isearch-toggle-tcode'コマンドを実行します。デフォールトでは`C-\' になっ
ています。このとき、元のバッファのTコードモードも連動して切り替わりま
す。モード切り替えキーはカスタマイズすることができます(see Tコードモー ド切り替えキーの変更.)
。

  Cプログラムを書いていて、コメントに日本語をTコードで入力したい場合が
あります。ところが、コメントを記述している途中で関数名や変数名などを探
そうとすると、モードの切り替えを行わなければなりません。このように、元
バッファのTコードモードに関係なく非Tコードサーチをしたい場合があります。
ユーザ変数`tcode-isearch-start-state'を`0'に設定するとサーチは常に非T
コードサーチから開始されます(see ユーザ変数.)。

補完機能
========

  tc2には、入力の補完機能があります。補完機能とは、入力に応じて、その
入力した文字列で始まる単語の残りの部分を補う機能です。実際には、補完で
きる候補がある場合は自動的に表示されますので、その候補でよければそれを
選択することになります。

  補完機能はデフォールトでは使わないようになっています。使えるようにす
るには、`.tc'に次のコードを追加します。

     (add-hook 'tcode-ready-hook
               (function
                (lambda ()
                  (require 'tc-complete))))

  補完機能では、補完用の辞書を用います。この辞書に語を登録しておくこと
で、先頭の何文字かを入力すると、登録してある語が補完できるようになりま
す。辞書は`tcode-data-directory'に`complete.dic' という名前で作成しま
す。

  辞書の形式は次のとおりです。1行に一つの候補を記述します。また、ファ
イルの先頭に近い方が優先度が高くなります。記述の仕方は2通りあります。
一つ目は、候補をそのまま記述する方法です。二つ目は、補完の際にマッチす
るときに使う文字列と補完した後の文字列の両方を空白で区切って記述する方
法です。記述例を次に示します。

     シミュレーション
     シミュレータ
     四じょうなわて 四條畷

  上の例で、1行目と2行目は候補をそのまま記述しています。1行目と2行目は、
「シミュレー」まで同じ文字列ですが、この場合、「シミュレーション」の方
がファイルの先頭に近いので、優先度が高くなります。また、3行目では、
「四じょ……」と入力して補完すると「四條畷」が挿入されます。補完という
よりは変換かもしれません。

  交ぜ書き変換用辞書も補完に利用できます。ただし、交ぜ書き変換用辞書は
補完候補を探すのには向いていない形式ですので、
`tcode-complete-mazegaki-prefix-length'で指定された文字数(デフォールト
では3)の文字列に対してのみ候補を表示します。一度補完すると自動的に補完
用辞書にその候補を登録しますので、次回以降は、その候補については入力文
字数の制約はなくなります。

  さて、準備が整ったところで、補完機能を使って実際に補完する方法を説明
します。例えば、上に挙げた辞書を使うとします。「シミュ」と入力すると、
その続きに、`>シミュレーション [2) シミュレータ]<'と表示されます。これ
は、第1候補として「シミュレーション」があり、第2候補として「シミュレー
タ」があることを示しています。「シミュレーション」を選択する場合は
`M-RET'を入力します。「シミュレータ」を選択する場合は`M-2 M-RET'を入力
します。どちらも選択しない場合はそのまま入力し続けてください。なお、補
完候補の表示は、しばらく経つと消えるようになっています。すぐに消したい
場合は`C-g'を入力するとよいでしょう。

  変数`tcode-complete-max-candidate-count'で補完の際の最大候補数を指定
できます。また、変数`tcode-complete-context-length-min'と
`tcode-complete-context-length-max'により、入力した文字列のどの範囲を
補完のために用いるのか指定できます。辞書の名前を変えたい場合は、変数
`tcode-complete-dictionary-name'で指定します。

  辞書への登録は、リージョンで登録したい語を指定して、コマンド
`tcode-complete-add-to-dictionary'を実行することでも行えます。

様々なヘルプ機能
================

  tc2では、様々なヘルプ機能を提供しています。

仮想鍵盤表示機能
     まず、"仮想鍵盤"とは何か説明します。Tコードでは、1ストローク目を
     どう入力するかによって、2ストローク目を入力したときに挿入される文
     字が違います。つまり、1ストローク目の入力に応じて、キーボードの各
     キーの役割が変化するとみなせるわけです。(ある状態での)仮想鍵盤と
     は、その状態で持つ各キーの役割がそれぞれのキーに直接結びついてい
     るとみなしたときのキーボード(鍵盤)のことです。

     1ストローク目を入力し、しばらく待つと、ウインドウが開き、次のスト
     ロークでどの文字が入力されるか(仮想鍵盤)が表示されます。たとえば、
     `j'を押すと次のように表示されます。

           革   援   徒   舞    節        -    曹    -    -    -
          [員   よ   か   っ  ] く       題 [  制   運   び   公]
          [と   し   、   *   ] は       設 [  鉄   現   成   映]
          [ド   カ   り   」  ] 田       協 [  多   混   選   以]

     続いて、`g'を押せば`は'が挿入されます。ここで、`-'は無効な入力、
     `*'は特殊な機能(上の場合は部首合成変換)を表します。

     1打目を入力してから仮想鍵盤が表示されるまでの時間は、変数
     `tcode-display-help-delay'で指定できます(see ユーザ変数.)
     。

ストローク表表示機能
     ストローク表(see ストローク表の見方.)を表示します。
     See 使用法.

文字ヘルプ機能
     `44'や`55'により、文字の打ち方("ヘルプ表")を表示します(see 使用 法.)
     。たとえば、「字」という字の打ち方は次のように表示され
     ます。

                                     字 = {ウ, 子}
          ・・・・      ・・・・
          ・・・・      ・・・・     ●…第1打鍵
          ●・・・      ・・・○     ○…第2打鍵

     ここで、`字 = {ウ, 子}'は、その文字を構成する部首を表しています
     (see 部首合成変換.)。

     ヘルプ表は`99'で消すことができます。また、設定を行えば、自動的に
     消すこともできます(see ユーザ変数.)。

     へルプ表の表示の仕方を変更することもできます。例えば、音声による
     読み上げなどを行いたい場合など、視覚的な情報よりも、入力キースト
     ロークの情報を利用したい場合があります。この場合、変数
     `tcode-help-with-real-keys'をtにすることで可能になります。更に、
     出力の形式は、設定により変更できます。詳しくは関数
     `tcode-stroke-to-string'の説明を見てください。

自動ヘルプ機能
     部首合成変換や交ぜ書き変換により文字(列)を入力したとき、その中に
     直接入力できる文字があれば、その字のヘルプ表を自動的に表示します。

その他の補助機能
================

  これまでに説明した機能のほかにも、いくつかの便利な機能があります。た
だし、設定をしないと使用できないものもあります。

カーソルの色でモードを表す機能
------------------------------

  Tコードモードと通常(非Tコード)モードとでカーソルの色を変えることがで
きます(設定が必要です)。変数`tcode-mode-off-cursor-color'および
`tcode-mode-on-cursor-color'により、各モードを表すカーソルの色を指定で
きます。

  この機能はX Window System上のEmacsでのみ使用できます(他のウィンドウ
システムでも使用できるかもしれません)。

  この機能を使うには、以下を`.tc'に加えて下さい。

     (add-hook 'tcode-ready-hook
               (function (lambda ()
                           (and window-system
                                (tcode-enable-cursor-to-change-color)))))

コントロールキーを伴わないモード切り替え
----------------------------------------

  モードの切り替えは通常`C-\'により行いますが、これを特定の(コントロー
ルキーを使わない)キーシーケンスによって行うことができます(設定が必要で
す)。

  具体的には、SPC・TAB・,のキーを使用し、次のように切り替えます。

非TコードモードからTコードモードへ
     `,'
          カーソルの直前の文字により動作が異なります。行頭または空白な
          らモード切り替え、それ以外ならそのまま`,'を挿入します。

     `SPC ,'
          スペースを挿入後、モードを切り替えます。

     `SPC TAB'
          スペースは、一旦挿入されますが、モードを切り替えた後取り除か
          れます。

Tコードモードから非Tコードモードへ
     `SPC'
          直前に行われた動作(キー入力)により動作が異なります。Tコード
          による入力の直後(前置型の交ぜ書き変換中のときを除く)では、モー
          ド切り替えを行い、かつスペースを挿入します。そうでない場合は、
          そのままスペースを挿入します。

     `SPC TAB'
          スペースは、一旦挿入されますが、モードを切り替えた後取り除か
          れます。

  少し複雑に見えますが、実際は簡単です。たとえば、Tコードモードの時に、
`たとえば、Emacs では'と入力しようとしたとします。この場合は、`たとえ
ば、'の後`SPC'を入力し、続けて`Emacs 'を入力します。次に、`,'の後`では'
と入力すればよいのです。ここで、句読点の直後では、`SPC'による切り替え
でも空白は挿入されません。

  `SPC'や`SPC ,'による切り替えの際に挿入される空白を自動的に削除したい
場合は`tcode-electric-space-without-inserting'を`t'にしてください。

  この機能を使用するには、以下を`.tc'に追加してください。

     ;;; コントロールキーを伴わないモード切り替え
     (global-set-key " " 'tcode-electric-space)
     (global-set-key "," 'tcode-electric-comma)

     (add-hook 'tcode-mazegaki-init-hook
               (function (lambda ()
                           (tcode-set-key " " 'tcode-electric-space))))

もう一つの外字入力
------------------

  Tコードで直接入力できない文字を手軽に入力したい時があります。この場
合に、コマンド`tcode-insert-ya-outset'を用いて、Tコードで用いるキー以
外のキーを利用して、2ストローク(またはそれ以上)で自分の定義した字を入
力することができます(設定が必要です)。

  たとえば、Tコードモードで、Tコードで用いるキー以外のキー[にこの機能
を割り当てたとします。`['を入力し、次にTコードに用いるキーを入力すれば、
変数`tcode-ya-outset-map-list'で定義された表に基づき字が入力できます。
`['をさらに入力すると、`tcode-ya-outset-map-list'のリストを順次切り替
えます。なお、`['を入力して1秒ほど待つと、仮想鍵盤が次のように表示され
るようになっていますので、変数`tcode-ya-outset-map-list'での字の並び方
を覚える必要はありません。

      ￥   †   ‡   ¶    ▼       《    》   【   】   “
     [★   ◆   ■   ●  ] ▲       〈 [  〉   〔   〕   〃]
     [☆   ◇   □   ○  ] △       ← [  ↓   ↑   →   §]
     [※   ‥   …   ◎  ] ▽       ♪ [  〒   ♂   ♀   ‐]     (1/3)

  設定は、コマンド`tcode-insert-ya-outset'を適当なキーに割り当ててくだ
さい(see Tコードモードでのキー割り当ての変更.)
。

漢字に対する交ぜ書き変換辞書中の読みの表示
------------------------------------------

  オンラインドキュメントで読み方のわからない漢字があった場合、交ぜ書き
変換辞書を利用して、その読みを調べることができます。その漢字をリージョ
ンで指定して、`M-x tcode-mazegaki-show-yomi-region'とすると、その漢字
の読みを交ぜ書き変換辞書から探してきて、もし見つかれば、それを表示しま
す。活用する語に対しては、語幹のみをリージョンで指定し、`C-u M-x
tcode-mazegaki-show-yomi-region'とすることで、その語幹を持つ読みを探す
ことができます。

ひらがなからカタカナへの変換
----------------------------

  入力済みのひらがなをカタカナへと変換できます。`M-x
tcode-katakana-previous-char'でカーソル直前の1文字をカタカナへ変換しま
す。また、数引数を与えることによって、point のN文字前までにあるひらが
なすべてをカタカナへ変換します。

  1文字だけ変換した場合、その字は自動ヘルプ(see 様々なヘルプ機能.)
の対象となります。

  適当なキーに割り当てて使用するとよいでしょう(see Tコードモードでの キー割り当ての変更.)
。

  また、これとは別の方法として、コマンド
`tcode-katakana-preceding-chars'を用いる方法もあります。これは、たとえ
ば、この機能を%に割り当てているとすると、`%'を1回入力すると、直前の1字
がひらがなならカタカナになります。さらに`%'を入力すれば、2字前の字がそ
の対象となります。このように、対象文字列を対話的に伸ばすことができます。
また、`DEL'を入力することで、対象文字列を縮めることができます。

区点コード・JISコードによる文字の入力
-------------------------------------

  入力法のわからない漢字の区点コードまたはJISコードが分かれば、そのコー
ドにより文字入力ができます。

  区点コードで入力するには、`M-x tcode-insert-kanji-by-kuten-code'の後
にそのコードを入力してください。JISコードの場合は`M-x
tcode-insert-kanji-by-jis-code'です。

  これらの方法で入力した字は自動ヘルプ(see 様々なヘルプ機能.)
の対象となります。

句読点自動切り替え
------------------

  書く文章の内容によって句読点を変えることがある場合、その内容に応じて
自動的に句読点を切り替えるようにしておけば、うっかり句読点を混在させて
しまうことがふせげます。設定をすれば、この機能が使えるようになります。

  設定は以下のように行います。自動切り替えを行う主モードを変数
`tcode-auto-identify-kutouten-mode-list'で指定します。たとえば、
`text-mode'と`tex-mode'で自動切り替えを有効にするには、以下のように
`.tc'に記述します。

     (add-hook 'tcode-mode-hook 'tcode-auto-switch-kutouten)
     (setq tcode-auto-identify-kutouten-mode-list
           '(text-mode tex-mode))

  設定したモードにかかわらず、強制的に自動切り替えを行うには、`C-u M-x
tcode-auto-switch-kutouten'とします。

  なお、句読点の判定は変数`tcode-kutouten-regexp-alist'に基づき行われ
ます。

zap-to-charの拡張
-----------------

  Emacsでは`M-z'で`zap-to-char'というコマンドが実行できますが、コマン
ド`tcode-zap-to-char'では、これをTコードでも入力できるように拡張してい
ます。

  この機能を使用したい場合は、次のとおり`.tc'に記述してください。

     (global-set-key "\M-z" 'tcode-zap-to-char)

入力文字の統計管理
------------------

  入力された文字の統計情報を記録することができます。

  次のコードを`.tc'に記述すれば自動的に統計情報が集められるようになり
ます。
     (add-hook 'tcode-after-load-table-hook
     	  (lambda ()
     	    (when (eq tcode-input-method 'tcode)
                   (setq tcode-input-statistics-file-name "tcode-stat")
     	      (tcode-initialize-input-statistics))))

  コマンド`tcode-list-input-statistics-display'を実行することにより、
文字ごとに何文字入力したか、またヘルプ表で何文字確認したかが表示されま
す。

  変数`tcode-input-statistics-file-name'に名前を設定しなければ、つまり、
nilに設定しておけば、統計情報は保存されません。

カスタマイズ
************

  ここではtc2でカスタマイズできる主な部分を簡単に説明します。もっと詳
しく知りたい方はソースファイルを読んでください。なお、本マニュアルでは
取り上げませんが、customパッケージの機能を用いてカスタマイズすることも
できます。

個人設定用ファイル
==================

  Tコードに関するカスタマイズは`~/.tc'で行います。初期設定の方法につい
ては、see 個人環境の構築.

  ファイル名`.tc'は変数`tcode-init-file-name'で変更できます。この場合、
`.emacs'で、その中の`(require 'tc-setup)'よりも前に設定しなければ有効
になりません。

コード表のカスタマイズ
======================

  Tコードのコード表(キーストロークと入力される文字との対応)は、自由に
変更して構いません。例えば自分の名前に含まれる漢字が直接入力できない場
合など、デフォールトのTコードで直接入力できるけれど自分ではめったに使
わない字と入れ替えるとよいでしょう。

  変更の例を次に示します。次のように`.tc'に記述してください。

     (add-hook 'tcode-after-load-table-hook
     	   (lambda ()
     	     (when (eq tcode-input-method 'tcode)
     	       ;; 坂→阪
     	       (tcode-set-action-to-table '(34 29) "阪")
     	       ;; ―→…
     	       (tcode-set-action-to-table '(27 32) "…"))))

上の例では、「坂」という字を「阪」に、「―」を「…」にそれぞれ変更して
います。`'(34 29)'の部分はキーストロークを表しています。数字については
入力文字と仮想鍵盤との対応.

入力フィルタ
============

  キー入力をもとに文字表から引いてきたデータに対して、さらに変更を加え
ることができます。たとえば、1バイト文字から2バイト文字への変換などは、
このフィルタ機能を利用しています。

  フィルタの設定は、変数`tcode-input-filter-functions'で行います。フィ
ルタを適用する条件と、フィルタの関数名の組を順に記述します。フィルタは、
リストの順に、条件が成立した場合に、適用されます。フィルタ関数は、文字
を入力して文字を出力しなければなりません。

  フィルタの応用例を示します。

○SKK風の前置型交ぜ書き変換

  シフトさせて入力することによって、前置型の変換モードに切り替えること
ができます。シフトを有効にして(see 使用法.)、次のコードを
`.tc'に記述します。

     (setq tcode-input-filter-functions
       '(((or tcode-katakana-mode tcode-shift-state) . japanese-katakana)
         ((and (boundp 'tcode-bushu-prefix-list)
     	  tcode-bushu-prefix-list)
          . tcode-bushu-prefix-convert)
         (tcode-alnum-2-byte . tcode-1-to-2)
         (tcode-shift-state . tcode-mazegaki-add-prefix)))

ユーザ変数
==========

  ここでは、ユーザが変更できる主な変数を説明します。

パス
----

 -- Variable: tcode-data-directory
     Tコードの各種データファイルを置くディレクトリ。ディレクトリ名の最
     後が`/'で終わっていなければなりません。デフォールトでは`~/tcode/'。
     今後出てくる変数の中で、値が`~/tcode'で始まるものはすべて、この
     `tcode-data-directory'の値を変えることで、そのデフォールト値が変
     わります。ただし、この変数の値は`tc.el'ロード時にだけ参照されるの
     で、Tコード起動後に`tcode-data-directory'の値を変更しても意味はあ
     りません。

 -- Variable: tcode-mazegaki-dictionary-name
     交ぜ書き変換辞書のファイル名。デフォールトでは`mazegaki.dic'。

 -- Variable: tcode-bushu-dictionary-name
     部首合成変換辞書のファイル名。デフォールトでは`bushu.rev'。

 -- Variable: tcode-record-file-name
     Tコード使用の統計を記録するファイルのパス名。`nil'なら記録しませ
     ん。デフォールトでは`~/.tc-record'。

部首合成変換
------------

 -- Variable: tcode-bushu-on-demand
     部首合成変換辞書の初期化をいつ行うかを指定します。数字が大きい方
     がより強い要求があったときにしか初期化を行いません。
     `tcode-bushu-on-demand'に指定された数以上の要求が来ると、部首合成
     変換辞書の初期化を行います。

     `0'
          `tc.el'ロード時。
     `1'
          Tコードモードに入ったとき(デフォールト)。
     `2'
          部首合成変換を開始したとき。ストロークヘルプを実行したとき。

 -- Variable: tcode-use-postfix-bushu-as-default
     `nil'でないときに、`jf'で後置型部首合成変換を行い、`77'で前置型部
     首変換を行います。`nil'のときは逆になります(デフォールト)。

交ぜ書き変換
------------

 -- Variable: tcode-use-prefix-mazegaki
     前置型の交ぜ書き変換(see tc2での交ぜ書き変換--前置型.)
     を使う時に`t'。デフォールトでは`nil'。

 -- Variable: tcode-mazegaki-stroke-priority-list
     候補選択時の候補の並べ方を指定します。キーアドレスのリストです
     (see 個人用設定ファイルの見本.)。

 -- Variable: tcode-mazegaki-fixed-priority-count
     学習(候補の入れ替え)する際の、学習の対象外となる候補の数です
     (see 候補の選択法.)。
     十分大きな値にしておけば、候補の入れ替えをしなくなります。

 -- Variable: tcode-mazegaki-yomi-max
     交ぜ書き変換の対象とする読みの長さの最大値を指定します。活用語の
     場合は活用語尾の長さも含みます。

     長くすると変換効率が悪くなるので、長くしすぎないようにしてくださ
     い。

 -- Variable: tcode-mazegaki-enable-inflection
     nil でないとき、活用語の変換(see 活用する語に対する変換候補の検 索法.)
     をします。そうでないときは、活用語
     の変換をしません。

ヘルプ
------

 -- Variable: tcode-display-help-delay
     Tコードモードで、1打目を入力してから仮想鍵盤(see 様々なヘルプ機 能.)
     が表示されるまでの時間(秒)。

     NEmacs では整数しか指定できませんが、Mule/Emacs では小数も指定で
     きます。

 -- Variable: tcode-auto-help
     `nil'でないとき自動ヘルプを行います(see 様々なヘルプ機能.)
     。

     また、この変数の値を`'delete-the-char'に設定すると、直接入力でき
     る字は削除します。つまり、表示された打ち方を見ながら再入力する必
     要があります。

 -- Variable: tcode-auto-remove-help-count
     ヘルプ用のバッファを自動的に消す関数`tcode-auto-remove-help'は、
     この変数で指定した回数だけ呼ばれるとヘルプ用のバッファを消します。
     たとえば、次の設定では、Tコードモードのトグルを行ったときにヘルプ
     用のバッファが表示されていたら、そのバッファを消します。

          ;;; モード切り替え時にヘルプ用のバッファを消す。
          (add-hook 'tcode-ready-hook
                    (function
                     (lambda ()
                       (setq tcode-auto-remove-help-count 1)
                       (add-hook 'tcode-toggle-hook
                                 'tcode-auto-remove-help))))

     上の例について、NEmacs以外のEmacsでは、`tcode-toggle-hook'の代わ
     りに`post-command-hook'を使ってもよいでしょう。

 -- Variable: tcode-adjust-window-for-help
     `nil'でないとき、ヘルプ用のウィンドウの高さを自動的に調整します。

     `nil'でも、もともとウィンドウが分割されていなかった場合では、自動
     的に調整します。

 -- Variable: tcode-help-with-real-keys
     `nil'でないとき、ヘルプ表を用いずに、キーストロークによりヘルプを
     表示します。

インクリメンタルサーチ
----------------------

 -- Variable: tcode-isearch-start-state
     Tコードインクリメンタルサーチ開始時のTコードモードを指定します。
     `nil'
          バッファのTコードモードに同期(デフォールト)。
     `t'
          バッファのTコードモードと独立。開始時はバッファと同じ。
     `0'
          バッファのTコードモードと独立。常に非Tコードサーチから開始。
     `1'
          バッファのTコードモードと独立。常にTコードサーチから開始。

     バッファローカル変数です。

 -- Variable: tcode-isearch-enable-wrapped-search
     `nil'でなければ、行を折り返している日本語も検索します。

その他
------

 -- Variable: tcode-load-immediate
     `nil'でないとき初期設定時(`tc-setup.el'ロード時)にTコードで使用す
     るLispライブラリをすべてロードします。

 -- Variable: tcode-verbose-message
     `nil'でないとき様々なメッセージを表示します。

 -- Variable: tcode-input-command-list
     Tコードモードのとき通常のTコード入力を行うためのコマンドのリスト。

     たとえば、c-mode の `;' (`electric-c-semi')を、TコードモードではT
     コード入力に使いたい場合、そのコマンドをこのリストに追加します。

フック
======

 -- Variable: tcode-ready-hook
     Tコードに関する初期化を行った直後に呼ばれます。これはEmacsを起動
     してから初めて`toggle-input-method'を行った時におこります。

     Tコードモードでのキー割り当ての変更などに使用します。

 -- Variable: tcode-bushu-ready-hook
     部首合成変換に関する初期化を行った後に呼ばれます。

 -- Variable: tcode-mode-hook
     各バッファにおいて初めてTコードを使おうとしたときに呼ばれます。

 -- Variable: tcode-toggle-hook
     Tコードモードを切り替えるたびに呼ばれます。

 -- Variable: tcode-after-load-table-hook
     文字表を読み出すたびに呼ばれます。正確には、読み出した直後に呼ば
     れます。

     コード入力に対する動作を一部変更する場合などに使用します。

 -- Variable: tcode-before-read-stroke-hook
     Tコードモードで、2ストローク目以降の入力を入力する前に呼ばれます。

     入力待ち状態でカーソルの色を変えたい場合などに使用します。

 -- Variable: tcode-mazegaki-init-hook
     最初に交ぜ書き変換モジュールをロードするときに呼ばれます。

     交ぜ書き変換に関する設定を行うときに使用します。

キー割り当ての変更
==================

Tコードモード切り替えキーの変更
-------------------------------

  Tコードモードの切り替えを行うコマンドは`toggle-input-method'です。
tc2では`C-\' に割り当てられています。

  これを他のキーに割り当てるにはEmacsの`define-key'を使って普通に設定
すればよいのです。たとえば`C-j'にこの機能を割り当てたい時には下のよう
に記述します。

     (define-key global-map "\C-j" 'toggle-input-method)

  また、`C-\'への割り当てを取り消すには、以下のように記述します。

     (global-unset-key "\C-\\")

  インクリメンタルサーチ時の切り替えキーの変更は次のとおりです。

     (define-key isearch-mode-map "\C-j" 'isearch-toggle-tcode)
     (define-key isearch-mode-map "\C-\\" nil)

ただし、インクリメンタルサーチ時の切り替えは、NEmacsの場合、次のとおり
です。

     (setq search-tcode-char ?\C-j)

入力文字と仮想鍵盤との対応
--------------------------

  tc2でのキー割り当ては、入力文字(実際のキー)ではなく、仮想鍵盤で用い
るキーのアドレスにより行います。デフォールトでは、次の対応になっていま
す。

   * 実際のキー配置

           1  2  3  4  5   6  7  8  9  0
           q  w  e  r  t   y  u  i  o  p
           a  s  d  f  g   h  j  k  l  ;
           z  x  c  v  b   n  m  ,  .  /

   * 仮想鍵盤で用いるキーのアドレス

           0  1  2  3  4   5  6  7  8  9
          10 11 12 13 14  15 16 17 18 19
          20 21 22 23 24  25 26 27 28 29
          30 31 32 33 34  35 36 37 38 39

  この対応の変更は、`tcode-set-key-layout'で行えます。たとえば、Dvorak
配列用に変更したい場合は、以下を`.tc'に追加します。

     (add-hook 'tcode-ready-hook
     	  (function (lambda ()
     		      (tcode-set-key-layout "dvorak"))))

  このように、よく使用すると思われるキー配列は、あらかじめ
`tcode-key-layout-list'に登録されています。独自のキー配列を用いたい場
合は、この変数に新たに登録してください。

Tコードモードでのキー割り当ての変更
-----------------------------------

  Tコードモードでのキー割り当ての変更は、関数`tcode-set-key'で行います。

  たとえば、「Tコードモードを抜けてからその文字を入力する機能」を定義
し、それを`\'に割り当てるには、以下を`.tc'に記述します。

     (add-hook 'tcode-ready-hook
               (function
                (lambda ()
                  ;; 「\」でモード切り替え後挿入
                  (tcode-set-key "\\" 'tcode-inactivate-and-self-insert))))

  関数`tcode-set-key'は次のように定義してあります。

 -- Function: tcode-set-key KEY FUNC &optional TYPE
     KEYは割り当てを変更するキーです。FUNCはコマンドのシンボルまたは
     `nil'です。TYPEはキーのアドレスを指定する時などに用います。

コード入力に対する動作の変更
----------------------------

  Tコードのコード入力に対する、挿入される文字列や機能の変更は、関数
`tcode-set-action-to-table'で行います。

  ここでは、例として、通常Tコードで`「'を入力するコード(`,g'のストロー
ク)に対し、鍵括弧の対`「」'を入力する機能を割り当ててみましょう。`,g'
のストロークは`'(37 24)'になります。以下を`.tc'に追加します。

     (defun tcode-insert-matching-kagikakko (&optional arg)
       "`「」'を挿入し、その間にカーソルを移動する。
     整数 ARG を指定すると、挿入前のカーソル位置から ARG 文字を
     `「'の前に入れる。この場合、カーソルは`」'の手前である。"
       (interactive "P")
       (insert "「")
       (and arg (tcode-forward-char (prefix-numeric-value arg)))
       (save-excursion
         (insert "」")))

     (add-hook 'tcode-after-load-table-hook
               (function
                (lambda ()
                  (if (eq tcode-input-method 'tcode)
                      ;; 対応する「」を挿入する。
                      (tcode-set-action-to-table
                       '(37 24)
                       'tcode-insert-matching-kagikakko)))))

  関数`tcode-set-action-to-table'は次のように定義してあります。

 -- Function: tcode-set-action-to-table SEQUENCE VALUE
     SEQUENCEは割り当てを変更するキーストロークです。キーアドレスのリ
     ストまたはキーアドレスを指定します。キーアドレスを指定した場合、
     続いて`SPC'を入力した時の動作を変更します。

     VALUEは以下が指定できます。

     コマンド(symbol)
          そのコマンドを実行します。

     関数(symbol, lambda式)
          その関数を引数なしで呼びます。

     変数(symbol)
          その変数を評価した結果の動作を行います。

     表(vector)
          更にその表に従った動作を行います。

     リスト(list)
          更にそのリストに従った動作を行います。

     文字列(string)
          その文字列を挿入します。

     文字(char)
          その文字を挿入します。

     `nil'
          キーストロークを無効にします。

個人用設定ファイルの見本
========================

  `.tc'の記述例を以下に挙げます。ただし、何を設定しているかを理解せず
に以下の例をそのまま自分の`.tc'にしてはいけません。初めてTコードを使う
場合は、最初は変数`tcode-data-directory'を自分の環境に合わせて設定する
だけにしておき、徐々に変更していく方がよいでしょう。

     ;;; .tc -- setup file for T-Code       -*-emacs-lisp-*-

     ;;; 【注意】このファイルの設定は、あくまで設定例であり、
     ;;; 誰にでもおすすめできる設定ではありません。
     ;;; 内容を理解した上で設定してください。

     ;;; ●変数の設定
     ;; tcode-data-directory を "~/T-Code/" に設定する。
     (setq tcode-data-directory "~/T-Code/")

     ;; 起動時に、Tコードで使うすべてのライブラリをロードする。
     (setq tcode-load-immediate t)

     ;; 部首合成変換で後置型を使用する。
     (setq tcode-use-postfix-bushu-as-default t)

     ;; 部首合成変換辞書を tc.el ロード時に読み込む。
     (setq tcode-bushu-on-demand 0)

     ;; 表示するメッセージを最低限にする。
     (setq tcode-verbose-message nil)

     ;; ヘルプ用のウィンドウの大きさを自動的に調整する。
     (setq tcode-adjust-window-for-help t)

     ;; .tc-record に記録しない。
     (setq tcode-record-file-name nil)

     ;;; ●global キーの設定

     ;; `tcode-electric-space' および `tcode-electric-comma' を使った
     ;; モードの切り替えを有効にする
     (global-set-key " " 'tcode-electric-space)
     (global-set-key "," 'tcode-electric-comma)

     ;;; ●Tコードモードに初めて入ったときに行う設定
     (add-hook 'tcode-ready-hook
     	  (lambda ()
     	    ;; シフトでの入力で、大文字ではなく小文字で入力する。
     	    ;; 次のtcode-set-key-layoutで設定が行われる。
     	    (setq tcode-shift-lowercase t)
     	    ;; キー配置としてDvorakを用いる。
     	    (tcode-set-key-layout "dvorak")
     	    ;; Tコードで使用する40個のキー以外のキーへのコマンドの割り当て
     	    (tcode-set-key "\\" 'tcode-inactivate-and-self-insert)
     	    ;; カーソルの色
     	    (when window-system
     	      (tcode-enable-cursor-to-change-color)
     	      ;; 安全のため
     	      (add-hook 'tcode-toggle-hook
     			'tcode-enable-cursor-to-change-color))
     	    ;; Tコードモードに最初に入った時に交ぜ書き変換の辞書を読み込む。
     	    (save-excursion
     	      (tcode-mazegaki-switch-to-dictionary))))

     ;;; ●文字表を読んだ後に行う設定
     ;;;   ○2ストローク以上のストロークのキー割り当て
     (add-hook 'tcode-after-load-table-hook
     	  (lambda ()
     	    (when (eq tcode-input-method 'tcode)
     	      ;; Tコード用の設定
     	      ;; 表を一部変更する。
     	      ;;   坂→阪
     	      (tcode-set-action-to-table '(34 29) "阪")
     	      ;; QWERTY での「ke」に変数 tcode-left-paren を割り当てる。
     	      (tcode-set-action-to-table '(27 12)
     					 'tcode-left-paren)
     	      ;; QWERTY での「id」に変数 tcode-right-paren を割り当てる。
     	      (tcode-set-action-to-table '(17 22)
     					 'tcode-right-paren))))

     ;;; ●交ぜ書き変換に関する設定
     (add-hook 'tcode-mazegaki-init-hook
     	  (lambda ()
     	    ;; 候補選択に使用するキーを2段だけにする。
     	    (setq tcode-mazegaki-stroke-priority-list
     		  ;; キー配置
     		  ;;  0  1  2  3  4    5  6  7  8  9
     		  ;; 10 11 12 13 14   15 16 17 18 19
     		  ;; 20 21 22 23 24   25 26 27 28 29
     		  ;; 30 31 32 33 34   35 36 37 38 39
     		  '(27 22 26 23 28 21 25 24 29 20
     		       17 12 16 13 18 11 15 14 19 10))
     	    ;; 変換対象の長さの設定
     	    (setq tcode-mazegaki-yomi-max 8)
     	    ;; 学習(候補の入れ替え)をしないようにする。
     	    (setq tcode-mazegaki-fixed-priority-count 10000)
     	    ;; スペースで、変換だけでなくモード切り替えも行う。
     	    (tcode-set-key " " 'tcode-electric-space)))

     ;;; ●その他の設定

     ;; ○句読点等の切り替え
     ;; 標準よりも組み合わせを増やし、かつ「(」や「)」も切り替えるようにする。
     (defvar tcode-left-paren "(" "* 開き括弧")
     (make-variable-buffer-local 'tcode-left-paren)
     (defvar tcode-right-paren ")" "* 閉じ括弧")
     (make-variable-buffer-local 'tcode-right-paren)
     (setq tcode-switch-table-list
           '(;; デフォールト
             ((tcode-touten . "、")
              (tcode-kuten . "。")
              (tcode-left-paren . "(")
              (tcode-right-paren . ")"))
             ;; 1バイト系
             ((tcode-touten . ", ")
              (tcode-kuten . ". ")
              (tcode-left-paren . "(")
              (tcode-right-paren . ")"))
             ;; 2バイト系
             ((tcode-touten . "，")
              (tcode-kuten . "．")
              (tcode-left-paren . "（")
              (tcode-right-paren . "）"))))

     ;;; ○句読点の自動切り替え
     ;; 切り替えの規準(正規表現)の指定
     (setq tcode-kutouten-regexp-alist
           (list '("[、。]" . 1)
                 (if (tcode-nemacs-p)
                     '("\\z[,.]" . 2)
                   '("\\cj[,.]" . 2))
                 '("[，．]" . 3)))
     ;; 切り替える主モードを指定(text-mode latex-mode)
     (setq tcode-auto-identify-kutouten-mode-list
           '(text-mode latex-mode))
     ;; バッファで最初に Tコードモードに入ったときに、
     ;; 句読点を自動的に切り替える。
     (add-hook 'tcode-mode-hook 'tcode-auto-switch-kutouten)

     ;;; .tc ends here

TUTコードで入力するには
***********************

  TUTコードはTコードと同様の漢字直接入力法です。tc2は、TUTコードの入力
環境としても使用することができます。ここでは、TUTコード用の設定法と、T
コード入力環境tc2の様々な機能をどうTUTコード用に割り当てているかを簡単
に説明します。

TUTコード用の設定
=================

  TUTコード用の設定は、以下を`.tc'に記述します。

     ;;; 基本設定(TUTコード)
     (setq tcode-default-input-method "japanese-TUT-Code")

     ;;; カタカナモードのトグルを「'」に割り当てる。
     (add-hook 'tcode-after-load-table-hook
               (function
                (lambda ()
                  (tcode-set-key "'" 'tcode-toggle-katakana-mode))))

     ;;; ストローク表を3段表示にする。
     (setq tcode-help-draw-top-keys nil)

  カタカナモードのトグルを行うキーは、お使いのキー配列や好みに合わせて
変更してください。

  以上の設定は特にTUTコードで入力するときに必要となる設定ですが、これ
以外の設定項目もTコードと同様に変更できます。

各機能の割り当て
================

  Tコードで使用される機能(see Tコードを使う.)は、TUTコー
ドでも同様に利用できます。

  最上段のキーの組み合わせは、Tコードと同様の割り当てです。数字を入力
したい場合は、数字キーのあとにスペースを入力してください。

  `fj' (交ぜ書き変換)は`alj'、`jf' (部首合成変換)は`ala'にそれぞれ割り
当てています。これらの機能を、TUT記号を変更して使用することもできます。
たとえば次のように`.tc'に記述してください。

     (add-hook 'tcode-after-load-table-hook
               (function
                (lambda ()
                  (if (eq tcode-input-method 'tutcode)
                      (progn
                        ;; 「k SPC」で交ぜ書き変換
                        (tcode-set-action-to-table 27 'tcode-mazegaki-begin-conversion)
                        ;; 「l SPC」で部首合成変換
                        (tcode-set-action-to-table 28 'tcode-bushu-begin-conversion))))))

  Tコードモードでは、`?'や`!'が、それぞれヘルプ・交ぜ書き変換辞書から
の漢字の削除の機能に割り当てられています。`?'や`!'を入力したいときは、
`C-q'の後にそのキーを押して入力してください。

補助ソフトウェア
****************

打ち方表作成プログラム hasida-table
===================================

  直接入力できる文字の打ち方をA4紙2枚分の表にしたものを、橋田
(`hasida@etl.go.jp')さんが考案されました。これはTeXで処理するものでし
たが、これをPSで出力できるようにし、また、どの文字を表に入れるかを簡単
にカスタマイズできるようにしたプログラム(Perlスクリプト)を藤原
(`makoto@ki.nu')さんが作成されました。

  このプログラム(`hasida-0.6.tar.gz')は、WWWで入手できます(see Tコー ド情報の入手方法.)
。プログラムの詳しい内
容は、プログラムに付属の文書を参照してください。

Tコード練習プログラム DOGGG
===========================

  "DOGGG"は端末画面用のTコード練習プログラムです。現在、Sun OS 4.1.Xと
Solaris 2.X上での動作が確認されています。また、Windows95 / 98などのDOS
プロンプト、または WindowsNTのコマンドプロンプトでも動作します。ソース
ファイルは`doggg.lzh'という名前でウェブサイト(see Tコード情報の入手 方法.)
から入手できます。また、DOS用のバ
イナリーパッケージも入手可能です。

skkinput3を利用するには
=======================

  tc2はEmacs上でしか利用できませんが、Xで動作する日本語入力プログラム
skkinput3を利用すれば、X上の他のアプリケーションに対しても、Tコードを
使用することができます。

  skkinput-3.0.5以降(skkiput-3.0.4以前は不可)のバージョンに対して使用
できます。skkinpt3がインストールされていれば、コマンドtcinputを実行す
ることにより、Tコード用の設定でskkinput3を起動します。

  個人用の設定は`~/.tc-skk'で行います。`~/.tc-skk'では、少なくとも、
`tcode-data-directory'の設定と、次のコードを記述してください。

     ;;; isearchでTコードを使用しない。(skkinput3では使えない。)
     (setq tcode-use-isearch nil)

  skkinput3では、tc2の機能に対して以下の制約があります。

ヘルプ関係は対応していません。
       skkinput3で複数のバッファを表示する機能が実装されない限りは対応
     する予定はありません。

交ぜ書き変換辞書に対する登録や削除のコマンドは使用できません。

  デフォールトでは、交ぜ書き変換用辞書の保存は行わないようになっていま
す。次のコードを`~/.tc-skk'に記述することで、学習による交ぜ書き変換用
辞書の変更があった場合に、モードをオフにした時点で保存されるようになり
ます。

     (add-hook 'tcode-im-end-conversion-hook 'tcode-save-dictionaries)

kinput2を利用するには
=====================

  tc2はEmacs上でしか利用できませんが、Xで動作する日本語入力プログラム
kinput2 (ただし、Wnn用)をカスタマイズすれば、X上の他のアプリケーション
に対しても、Tコードを使用することができます。

  このパッケージ中の`kinput2'ディレクトリに、`ccdef.tcode'と
`tc-ki2.el'の二つのファイルがあります。以下、kinput2でTコード入力がで
きるようにするための方法を説明します。

  1. Emacsを起動し、一旦Tコードモードにしてから、`tc-ki2.el'をロードし
     ます。`tc-ki2.el'をロードするには、`M-x load-file RET'の後、
     `tc-ki2.el'を指定します。

  2. `rule.tcode'というバッファが生成されていますので、これを適当なディ
     レクトリに保存します。これは、`C-x b rule.tcode'の後、`C-x C-w'で
     保存すればよいでしょう。また、保存したディレクトリに、付属の
     `ccdef.tcode'も移します。

  3. `rule.tcode'をEUCコードに変換します。たとえば`nkf'という漢字コー
     ド変換プログラムを利用して、次のようにすることで変換できます。

          % nkf -e rule.tcode > foo
          % mv foo rule.tcode

  4. `ccdef.tcode'を編集して、`rule.tcode'のパスを、先ほど`rule.tcode'
     を置いたパスと一致するように変更します。

  以上です。

  kinput2を使用するときは、`ccdef.tcode'のあるディレクトリで

     % kinput2 -ccdef ccdef.tcode

のように起動してください。