[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

19. 自然言語用のコマンド

コンピュータの分野では、テキスト(text)という用語には 2つの大きな意味があります。 1つは、文字の列から成るデータのことです。 この意味からすれば、Emacsで編集するどんなファイルもテキストです。 もう1つの意味はより限定されていて、人間が読む自然言語の (テキスト整形処理後の場合もあるが)文字の列のことで、 プログラムやプログラムに与えるコマンドと対比されます。

自然言語には、エディタコマンドで支援したり利用したりできる構文的/様式的な 約束事があります。 たとえば、単語、文、段落、大文字といったものです。 本章では、これらを扱うEmacsコマンドについて述べます。 また、詰め込み(filling)、つまり、 段落の各行がほぼ同じ長さになるように再配置し直すコマンドについてもふれます。 単語、文、段落を横断してポイントを移動したり、 それらをキルするコマンドは、 自然言語テキストの編集を意図したものですが、プログラムの編集にも役立ちます。

Emacsには、自然言語テキストの編集用のメジャーモードがいくつかあります。 扱うテキストが純粋にテキストだけで単純なものであれば、 テキスト(text)モードを使いましょう。 これは、自然言語テキストの構文上の約束事を扱えるように、 Emacsを少しだけカスタマイズしてあります。 アウトライン(outline)モードには、 アウトライン構造を持つテキストを操作する特別なコマンドがあります。

テキスト整形コマンドを埋め込んだテキストに対しては、 特定のテキスト清書系ごとに別のメジャーモードが用意してあります。 たとえば、TeX用にはTeX nroff用にはnroffモードがあります。

テキスト清書系を使うかわりにエンリッチ(enriched)モードを使用すれば、 WYSIWYG(what you see is what you get、『見たとおりを得る』)スタイルで 整形済みテキストを編集することもできます。 つまり、Emacsの画面上で整形結果を見ながら編集できるわけです。


19.1 単語

Emacsには、単語を横断してポイントを移動したり、 単語を操作対象とするコマンドがあります。 慣例として、これらのコマンドのキーはメタ文字です。

M-f

単語を横断してポイントを前向きに移動する(forward-word)。

M-b

単語を横断してポイントを後向きに移動する(backward-word)。

M-d

ポイント位置から単語の末尾までをキルする(kill-word)。

M-DEL

ポイント位置から単語の先頭までを後向きにキルする (backward-kill-word)。

M-@

つぎの単語の末尾にマークを設定する(mark-word)。

M-t

隣接した2つの単語を入れ替える。 あるいは、単語を複数の単語を飛び越して移す。 (transpose-words)。

これらのキーは、文字単位の操作コマンド、C-fC-bC-dDELC-tに対応していることに注目してください。 M-@も、C-SPCの別名であるC-@に対応しています。

コマンドM-fforward-word)と M-bbackward-word)は、 単語を横断してポイントを前向きに(末尾に向かって) あるいは後向きに(先頭に向かって)移動します。 これらのメタ文字は、文字単位でポイントを前後に移動する コントロール文字C-fC-bに類似しています。 この類似性は、数引数を反復回数として扱うことにもおよびます。 負の引数を指定すると、M-fは後向きに移動し、 M-bは前向きに移動します。 前向き移動では単語の最後の文字の直後に、 後向き移動では最初の文字の直前に、ポイントを移動します。 (21)

M-dkill-word)はポイントの直後の単語をキルします。 正確にいえば、ポイント位置からM-fによる移動位置までの全文字をキルします。 ポイントが単語の途中にあれば、ポイントよりあとの部分だけをキルします。 また、ポイントとつぎの単語のあいだに句読点があれば、 単語と一緒にそれらもキルします。 (つぎの単語だけをキルしてそのまえにある句読点を残したければ、 M-fでつぎの単語の末尾に移動してから、 M-DELでその単語を後向きにキルする。) M-dは、引数をM-fと同様に解釈します。

M-DELbackward-kill-word)は、 ポイントの直前の単語をキルします。 ポイント位置からM-bによる移動位置までの全文字をキルします。 ポイントが`FOO, BAR'の空白の直後にあるとすれば、 `FOO, 'をキルします。 (`FOO'だけをキルしてコンマと空白を残したければ、 M-DELのかわりにM-b M-dを使う。)

M-ttranspose-words)は、 ポイントの直前にある単語あるいはポイントを含む単語と、 後続の単語とを入れ替えます。 単語のあいだにある区切り文字は動きせん。 たとえば、`FOO, BAR'を入れ替えると、 `BAR FOO,'ではなく`BAR, FOO'となります。 入れ替えや入れ替えコマンドの引数については、 See section テキストの入れ替え

ポイントとマークのあいだに適用される操作を後続のn個の単語に適用する方法は、 2つあります。 ポイント位置にマークを設定してから、単語を横断してポイントを移動します。 あるいは、コマンドM-@mark-word)を使います。 このコマンドは、ポイントを移動せずに、 M-fによる移動位置にマークを設定します。 M-@には、何単語先にマークを設定するかを数引数で指定できます。 暫定マーク(transient-mark)モードでは、このコマンドはマークを活性にします。

単語操作コマンドが理解する構文は、すべて構文テーブルで制御されます。 たとえば、任意の文字を単語の区切り文字として宣言できます。 See section 構文テーブル


19.2 文

Emacsの文/段落操作コマンドは、単語操作コマンドと同じく、 ほとんどメタキーです。

M-a

文の先頭にポイントを後向きに移動する(backward-sentence)。

M-e

文の末尾にポイントを前向きに移動する(forward-sentence)。

M-k

ポイント位置から文末までを前向きにキルする (kill-sentence)。

C-x DEL

ポイント位置から文頭までを後向きにキルする (backward-kill-sentence)。

コマンドM-aM-ebackward-sentenceforward-sentence)は、 それぞれ、ポイントを含む文の先頭あるいは末尾にポイントを移動します。 これらは、行頭や行末にポイントを移動するコマンドC-aC-eに 類似するように選ばれました。 ただし、M-aM-eを反復して使ったり数引数を指定すると、 ポイントは連続した文を横断して移動する点が違います。

(文頭に向かって)後向きに移動するときは、 文の先頭の文字の直前にポイントを置きます。 (文末に向かって)前向きに移動するときは、 文を終える句読点の直後に置きます。 どちらのコマンドも、文と文の境界にある白文字に ポイントを移動することはありません。

C-aC-eには調和したキルコマンドC-kがあるように、 M-aM-eにもコマンドM-kkill-sentence)があります。 これはポイントから文末までをキルします。 引数に-1を指定すると、文頭までを後向きにキルします。 これより大きな引数は反復回数になります。 また、ポイント位置から文頭までを後向きにキルするコマンドとして C-x DELbackward-kill-sentence)もあります。 このコマンドは、文の作成途中で考えが変わったときに便利です。

文操作コマンドでは、文末に空白を2個打つという米国のタイピストの習慣を 踏襲しているものと仮定します。 つまり、`.'、`?'、`!'の直後が行末であるか空白が2個続けば、 その箇所を文末とみなします。 ただし、`.'、`?'、`!'の直後には、 `)'、`]'、`''、`"'がいくつあってもかまいません。 また、段落の先頭と末尾も、それぞれ、文の先頭と末尾になります。

変数sentence-endで、文末の識別方法を制御します。 この値は、文末の数個の文字とそれらに続く白文字に一致する正規表現です。 通常の値はつぎのとおりです。 (22)

 
"[.?!][]\"')]*\\($\\|\t\\|  \\)[ \t\n]*"

この例は、正規表現の節で説明しました。 See section 正規表現の構文

文のあいだには空白を1個だけとしたければ、 sentence-endにはつぎの値を設定します。

 
"[.?!][]\"')]*\\($\\|\t\\| \\)[ \t\n]*"

同時に、変数sentence-end-double-spaceにはnilを設定して、 詰め込みコマンドにも、文末には空白が1個だけあり、また、 文末には空白を1個だけ追加することを指示します。 ただし、このように設定すると、 文末のピリオドと省略のピリオドとを区別できなくなることに注意してください。


19.3 段落

段落を操作するEmacsコマンドもメタキーです。

M-{

まえの段落の先頭にポイントを後向きに移動する(backward-paragraph)。

M-}

つぎの段落の末尾にポイントを前向きに移動する(forward-paragraph)。

M-h

ポイントを含む段落かつぎの段落の周りにポイントとマークを置く (mark-paragraph)。

M-{は、ポイントを含む段落の先頭か、 まえの段落の先頭にポイントを移動します。 一方、M-}は、ポイントを含む段落の末尾か、 つぎの段落の末尾にポイントを移動します。 段落は、空行やテキスト整形コマンドの行で区切られますが、 それらの行自体は段落には属しません。 基本(fundamental)モードでは、 字下げした行も新たな段落の始まりとみなしますが、 テキスト(text)モードではそうしません。 (段落の直前に空行があれば、 これらのコマンドはそれらを段落の先頭として扱う。)

プログラム用のメジャーモードでは、段落は空行で始まり空行で終ります。 こうしておけば、本来段落を持たないプログラムでも 段落操作コマンドが役立ちます。

詰め込み接頭辞がある場合には、接頭辞で始まらない行が段落の区切りとなります。 See section テキストの詰め込み

段落を対象に操作したいときには、 コマンドM-hmark-paragraph)を使って 段落を囲むようなリージョンを設定します。 したがって、たとえば、M-h C-wとすると、 ポイントを含むか直後の段落を削除します。 M-hコマンドは、ポイントを含む段落の先頭にポイントを置き、 末尾にマークを設定します。 暫定マーク(transient-mark)モードでは、このマークを活性にします。 ポイントが段落のあいだ(空行や境界)にある場合は、 ポイントの直後にある段落の周りにポイントとマークを設定します。 段落の1行目のまえに空行があれば、 直前の空行1行もM-hが設定するリージョンに含まれます。

正確な段落の境界は、変数paragraph-separateparagraph-startで定義されます。 paragraph-startの値は、 段落を始めたり区切ったりする行に一致する正規表現です。 paragraph-separateの値も別の正規表現ですが、 どの段落にも属さない段落を分割する行(たとえば空行)だけに一致するものです。 新たな段落を始めてその段落に属す行は、paragraph-startだけに一致して、 paragraph-separateに一致してはいけません。 たとえば、基本(fundamental)モードでは、 paragraph-start"[ \t\n\f]"であり、 paragraph-separate"[ \t\f]*$"です。

通常、ページ境界でも段落が区切られるのが望ましいです。 これらの変数のデフォルト値は、ページの一般的な区切り文字も認識します。


19.4 ページ

ファイルをページ送り文字(ASCIIコードのコントロールL、8進コードの014) で区切ったページの集まりとして捉えることがよくあります。 ファイルを印刷すると、この文字は改ページを行います。 そのため、ファイル内の各ページは別々の用紙に印刷されます。 ほとんどのEmacsコマンドは、ページを区切る文字を他の文字と同様に扱いますから、 C-q C-lでページ送り文字を挿入したり、DELで削除できます。 つまり、ファイルをページに区切るのも区切らないのも自由です。 しかし、ページはファイルを分割する意味ある単位なので、 Emacsには、ページ間の移動やページを対象とするコマンドがあります。

C-x [

まえのページ境界にポイントを移動する(backward-page)。

C-x ]

つぎのページ境界にポイントを移動する(forward-page)。

C-x C-p

このページ(か別のページ)の周りに、ポイントとマークを置く (mark-page)。

C-x l

このページの行数を数える(count-lines-page)。

C-x [backward-page)コマンドは、 まえのページ区切り文字の直後にポイントを移動します。 ポイントがすでにページ区切りの直後にあれば、 さらにまえのページ区切り文字の直後に移動します。 数引数は反復回数として扱われます。 C-x ]forward-page)コマンドは、 つぎのページ区切り文字の直後にポイントを移動します。

C-x C-pコマンド(mark-page)は、 ページの先頭にポイントを置き、末尾にマークを設定します。 末尾にあるページ区切り文字は含まれます (マークはページ区切り文字の直後にある)。 先頭にあるページ区切り文字は除外されます (ポイントはページ区切り文字の直後にある)。 C-x C-p C-wは、ページ全体をキルして別の場所に 移動するのに便利な方法です。 C-x [C-x ]で別のページ区切り位置に移動してから キルしたページをヤンクすれば、 すべてのページが適切に区切られた状態が維持されます。 C-x C-pが末尾のページ区切り文字だけを含める理由は、 これを保証するためです。

C-x C-pへの数引数は、現在のページを基準にして ポイントの移動先のページを指定します。 0は現在のページを意味します。 1はつぎのページ、-1はまえのページを意味します。

C-x lコマンド(count-lines-page)は、 ページをどこで2つに分割するかを決めるのに便利です。 現在のページについて、総行数、現在行のまえにある行数とうしろにある行数を つぎのようにエコー領域に表示します。

 
Page has 96 lines (72+25)

この例で、総行数が1だけ少ないことに注意してください。 ポイントが行頭にないとつねにこうなります。

変数page-delimiterはページの始まりを制御します。 この変数の値は、ページを区切る行の先頭に一致する正規表現です。 この変数の通常の値は"^\f"で、 行頭のページ送り文字に一致します。


19.5 テキストの詰め込み

テキストの詰め込み(filling)とは、 指定した幅に納まるようにテキストを行に分割することです。 Emacsには、詰め込む方法が2つあります。 自動詰め込み(auto-fill)モードでは、 自己挿入文字でテキストを挿入すると同時に詰め込みを行います。 あるいは、詰め込まずにテキストを編集しているときには、 陽に詰め込みコマンドを使います。 整形済みテキストを編集しているときは、 テキストの各部分ごとに詰め込みのスタイルを指定できます (see section 整形済みテキストの編集)。


19.5.1 自動詰め込みモード(auto-fillモード)

自動詰め込み(auto-fill)モードはマイナモードで、 行が長くなりすぎると自動的に分割します。 SPCRETを打鍵したときだけ、行を分割します。

M-x auto-fill-mode

自動詰め込み(auto-fill)モードをオンにしたりオフにする。

SPC
RET

自動詰め込み(auto-fill)モードでは、 適切な場合には行を分割する。

M-x auto-fill-modeは、 自動詰め込み(auto-fill)モードがオフならばオンにし、 オンならばオフにします。 正の数引数を指定すると自動詰め込み(auto-fill)モードをつねにオンにしますが、 負の引数を指定するとつねにオフにします。 モード行の括弧の中に`Fill'と表示されていれば、 このモードはオンになっています。 自動詰め込み(auto-fill)モードは、 各バッファごとにオン/オフできるマイナモードです。 See section マイナモード(minor mode)

自動詰め込み(auto-fill)モードでは、 行が決められた幅より長くなると、自動的に空白の位置で行を分割します。 行の分割と再配置は、SPCRETを打鍵したときだけ行われます。 行を分割せずに空白や改行を挿入するには、 C-q SPCC-q C-jと打鍵します (改行はまさにコントロールJであることを思い出してほしい)。 C-oも行を分割せずに改行を挿入します。

自動詰め込み(auto-fill)モードは、TABで新たな行を字下げするので、 プログラム言語用のモードと組み合わせてもうまく動作します。 コメントで終わる行が長くなりすぎた場合には、 コメント内のテキストを2つのコメント行に分割します。 始めの行の末尾とつぎの行の行頭に新たにコメントの区切り文字列を挿入して、 2つの独立したコメント行にすることもできます。 この付加機能は、変数comment-multi-lineで制御します (see section コメントの操作)。

適応型詰め込み(後述)は、明示した詰め込みコマンドのみならず、 自動詰め込みに対しても有効に働きます。 これは、段落の先頭行あるいは第2行目から、 自動的に詰め込み接頭辞を切り出します。

自動詰め込み(auto-fill)モードは、段落全体を詰め直すことはしません。 行を分割できても、併合はできません。 そのため、段落の途中を編集すると、必ずしも段落を正しく詰め込めません。 段落をふたたび適切に詰め込まれた状態にするもっとも簡単な方法は、 明示的に詰め込みコマンドを使用することです。

多くのユーザーは自動詰め込み(auto-fill)モードを好み、 あらゆるテキストファイルの編集に使用しようとします。 初期化ファイルの節では、こうする方法を説明します。 See section 初期化ファイル`~/.emacs'


19.5.2 明示的な詰め込みコマンド

M-q

現在の段落を詰め込む(fill-paragraph)。

C-x f

詰め込み桁を設定する(set-fill-column)。

M-x fill-region

リージョン内の各段落を詰め込む(fill-region)。

M-x fill-region-as-paragraph

リージョン全体を1つの段落とみなして詰め込む。

M-s

行を中央に揃える。

段落を詰め直すには、コマンドM-qfill-paragraph)を使います。 ポイントを含む段落、あるいは、 ポイントが段落のあいだにある場合には直後の段落を操作します。 改行をすべて取り除いてから、必要な箇所に新たに改行を挿入することで 段落を詰め直します。

いくつもの段落を詰め直すには、M-x fill-regionを使います。 これは、リージョンを段落に分けてから、各段落を詰め込みます。

M-qfill-regionは、M-hと同じ基準で段落の境界を 探します(see section 段落)。 段落の大きさを制御するには、M-x fill-region-as-paragraphを使います。 これは、ポイントとマークのあいだにあるものすべてを詰め直します。 このコマンドはリージョン内の空行をすべて削除して、 分かれていたテキストの塊を1つの塊にまとめ上げます。

M-qに数引数を指定すると、テキストの詰め込みだけでなく、 テキストの幅揃え(justify)も行います。 つまり、余分に空白を挿入して、行の右端が詰め込み桁に一致するようにします。 余分な空白を取り除くには、引数を指定しないでM-qを使います。 (fill-regionも同様。) 幅揃えを制御して別の詰め込みスタイルを選択する別の方法は、 テキスト属性justificationを使うことです。 これに関しては、整形済みテキストの幅揃えを参照してください。

コマンドM-scenter-line)は、 詰め込み桁までの範囲内で現在行を中央に揃えます。 引数nを指定すると、 現在行を含めn行をそれぞれ独立に中央に揃えてから、 揃えた行のつぎにポイントを移動します。

詰め込むときの行の最大幅は、変数fill-columnに入っています。 fill-columnの値を変更すると、 カレントバッファにローカルな変数になります。 それまではデフォルト値が有効です。 デフォルト値は始めは70です。 See section ローカル変数fill-columnを設定するもっとも簡単な方法は、 コマンドC-x fset-fill-column)を使うことです。 このコマンドに数引数を指定すると、 その値を新たな詰め込み桁として使います。 C-uだけを引数に指定すると、 ポイントの現在の水平位置をfill-columnに設定します。

Emacsコマンドは通常、 ピリオドの直後に空白が2個あるか改行があれば文末として扱います。 ピリオドの直後に空白が1個だけでは、文末ではなく省略とみなします。 ピリオドのこれら2つの用法の違いを保存するために、 ピリオドの直後に空白が1個だけの箇所では詰め込みコマンドは行を分割しません。

変数sentence-end-double-spacenilならば、 詰め込みコマンドは、文末には空白が1個だけあると仮定し、かつ、 文末には空白を1個だけ残します。 普通、この変数の値はtなので、 上述のように空白が2個ある場合だけを文末として扱います。 See section

colon-double-spacenil以外ならば、 詰め込みコマンドはコロンのうしろに空白を2個置きます。


19.5.3 詰め込み接頭辞

各行が(段落を字下げする数個の空白などの)特別の印で始まっている 段落を詰め込むには、詰め込み接頭辞(fill prefix)の機能を使えます。 詰め込み接頭辞は文字列であり、 Emacsはすべての行がその文字列で始まると仮定しますが、 詰め込み接頭辞自体は詰め込みの対象ではありません。 明示的に詰め込み接頭辞を指定できますが、 Emacsが詰め込み接頭辞を自動的に推測することもできます (see section 適応型詰め込み)。

C-x .

詰め込み接頭辞を設定する(set-fill-prefix)。

M-q

現在の詰め込み接頭辞を使って、段落を詰め込む(fill-paragraph)。

M-x fill-individual-paragraphs

字下げ幅の変化を新たな段落の始まりとみなして、リージョン内を詰め込む。

M-x fill-nonuniform-paragraphs

段落を分割する行だけを新たな段落の始まりとみなして、リージョン内を詰め込む。

詰め込み接頭辞を指定するには、 目的の接頭辞で始まっている行に移動して接頭辞の直後にポイントを置いてから、 コマンドC-x .set-fill-prefix)を実行します。 C-xのあとはピリオドです。 詰め込み接頭辞の使用をやめるには、空の接頭辞を設定します。 つまり、行頭にポイントを置いてからC-x .と打ちます。

詰め込み接頭辞が設定されている場合、 詰め込みコマンドは処理に先だって各行から詰め込み接頭辞を取り除き、 詰め込みを行ったあとに各行に挿入します。 自動詰め込み(auto-fill)モードでも、 新たに行を作成するときに自動的に詰め込み接頭辞を挿入します。 行頭でC-oコマンド(see section 空行)を使用すると、 新たに作成する行にも詰め込み接頭辞を挿入します。 逆に、コマンドM-^は、 削除する改行の直後に詰め込み接頭辞があると接頭辞も削除します (see section 字下げ)。

たとえば、fill-columnが40で詰め込み接頭辞が`;; 'のときに、 つぎのテキストでM-qを実行します。

 
;; This is an
;; example of a paragraph
;; inside a Lisp-style comment.

結果はつぎのようになります。

 
;; This is an example of a paragraph
;; inside a Lisp-style comment.

M-qおよび段落コマンドは、 詰め込み接頭辞で始まらない行を段落の始まりとみなします。 これにより、ぶら下がり字下げ(先頭行を除いてすべての行が字下げ) された段落も正しく詰め込みます。 空行や接頭辞を取りさると字下げした行になる行も、 段落の区切りや始まりとみなします。 これによって、各行にコメント区切りがある複数段落のコメントを 書いているときにも、望みどおりの結果を得られます。

各段落に対して自動的に詰め込み接頭辞を設定するには、 M-x fill-individual-paragraphsを使います。 このコマンドは、字下げ幅の変化を新たな段落の始まりとみなして、 リージョンを段落に分割したあと、各段落を詰め込みます。 つまり、1つの『段落』内の行はどれも同じ字下げ幅です。 字下げ幅が、段落に対する詰め込み接頭辞として働きます。

M-x fill-nonuniform-paragraphsも同様なコマンドですが、 リージョンを段落に分割する方法が異なります。 このコマンドは、(変数paragraph-separateで定義される) 段落区切り行だけを新たな段落の始まりとみなします。 つまり、各段落の行はさまざまに字下げされているかもしれないので、 その中の最少の字下げを詰め込み接頭辞として使用するわけです。 段落の最初の行の字下げが残りの行に比べて多くても少なくても、 正しい詰め込み結果を得られます。

詰め込み接頭辞は変数fill-prefixに格納されます。 この値は文字列であるか、詰め込み接頭辞が設定されていなければnilです。 この変数を変更してもカレントバッファだけに影響しますが、 デフォルト値を変更することもできます。 See section ローカル変数

テキスト属性indentationは、 段落に与える字下げ幅を調整する別の方法です。 See section 整形済みテキストの字下げ


19.5.4 適応型詰め込み

詰め込みコマンド自身が、 段落に対する適切な詰め込み接頭辞を推測できる状況もあります。 段落のすべての行の先頭に白文字やある種の句読点文字が使われている場合です。

段落が2行以上から成る場合、 段落の2行目から詰め込み接頭辞を切り出しますが、 1行目にもそれが現れるときに限ります。

段落が1行だけの場合には、その行から詰め込み接頭辞を切り出す かもしれません (23)。 こういった状況では、つぎのような3つの合理的な挙動が考えられるので、 接頭辞の決定は複雑です。

これら3つの整形スタイルは、いずれも一般的に使用されます。 そこで、詰め込みコマンドは、現れた接頭辞とそのときのメジャーモードに基づいて、 ユーザーが望むスタイルを決定しようとします。 判断基準はつぎのとおりです。

1行目でみつけた接頭辞がadaptive-fill-first-line-regexpに一致するか、 (メジャーモードに依存する)コメント開始文字列のようであれば、 みつけた接頭辞を段落の詰め込みに用います。 ただし、その接頭辞が後続の行に対して段落の始まりにならない場合に限ります。

さもなければ、みつけた接頭辞を相当分の空白に変換して、 それらの空白を段落の2行目以降の詰め込み接頭辞として使います。 ただし、それらの空白が後続の行に対して段落の始まりにならない場合に限ります。

テキスト(text)モード、および、 空行やページ区切りだけが段落を区切るモードでは、 適応型詰め込みによって選ばれた接頭辞が 段落の始まりになることはけっしてありませんから、 その接頭辞を段落の詰め込みに使用することができます。

変数adaptive-fill-regexpで、 行頭のどんな文字列を詰め込み接頭辞として使えるかを決定します。 この変数の正規表現に一致する行頭の文字列を接頭辞とします。 変数adaptive-fill-modenilを設定すると、 詰め込み接頭辞を自動的には切り出しません。

変数adaptive-fill-functionに関数を設定すると、 詰め込み接頭辞を自動的に切り出すためのより複雑な方法を指定できます。 この関数は行の左端の直後にポイントを置いて呼び出されます。 その行から類推される適切な詰め込み接頭辞を返さなくてはいけません。 その行に詰め込み接頭辞がなさそうであればnilを返します。


19.6 大文字小文字変換コマンド

Emacsには、単語や任意の長さのテキストを 大文字あるいは小文字に変換するコマンドがあります。

M-l

後続の単語を小文字に変換する(downcase-word)。

M-u

後続の単語を大文字に変換する(upcase-word)。

M-c

後続の単語の1文字目だけを大文字にする(capitalize-word)。

C-x C-l

リージョン内のテキストを小文字に変換する(downcase-region)。

C-x C-u

リージョン内のテキストを大文字に変換する(upcase-region)。

単語変換コマンドはたいへん便利です。 M-ldowncase-word)は ポイントの直後の単語を小文字に変換し、 単語の末尾にポイントを移動します。 したがって、M-lを繰り返すと、連続した単語を変換できます。 M-uupcase-word)は単語を大文字に変換し、 M-ccapitalize-word)は単語の1文字目を 大文字して残りを小文字に変換します。 これらのコマンドに引数を指定すると、一度に数単語を変換できます。 これらのコマンドは、大文字だけの大量のテキストを 大文字小文字が混在するように変換するときに、特に威力を発揮します。 というのは、必要に応じてM-lM-uM-cを使い分けて移動したり、M-fで変換せずに単語を 飛び越えられるからです。

負の引数を指定すると、ポイントの直前にある数個の単語を変換しますが、 ポイントは移動しません。 これは、大文字小文字をまちがえて単語を入力した直後には便利です。 大文字小文字変換コマンドを打ってからすぐに入力を再開できます。

単語の途中で大文字小文字変換コマンドを実行すると、 ポイントのうしろにある部分だけを変換します。 これはM-dkill-word)のふるまいと同じです。 また、負の引数を指定すると、ポイントよりまえの部分を変換します。

他の大文字小文字変換コマンドは、 C-x C-uupcase-region)と C-x C-ldowncase-region)です。 これらは、リージョン内のテキストを指定どおりに変換します。 ポイントもマークも移動しません。

リージョンに対する大文字小文字変換コマンドである upcase-regiondowncase-regionは、 通常、使用禁止になっています。 つまり、これらのコマンドを使おうとすると、最初に確認を求めてきます。 確認するときにコマンドを使用可にしておけば、つぎからは確認を求めてきません。 See section 使用禁止コマンド


19.7 テキストモード(textモード)

自然言語テキストのファイルを編集するときには、 基本(fundamental)モードではなく テキスト(text)モードを使ったほうが便利です。 テキスト(text)モードに入るにはM-x text-modeと打ちます。

テキスト(text)モードでは、空行とページ区切りだけが段落の区切りです。 その結果、段落を字下げできて、 適応型詰め込みでは段落の詰め込みに使用する字下げを決定できます。 See section 適応型詰め込み

テキスト(text)モードでは、TABindent-relative(see section 字下げ)を実行するように 定義してあるので、先行する行と同じように字下げするのに便利です。 先行する行が字下げされてなければ、 indent-relativetab-to-tab-stopを実行します。 これは、ユーザーが設定したEmacsのタブストップを使います(see section タブストップ)。

テキスト(text)モードでは、コメントに関する機能は、 陽に起動した場合を除いてオフです。 ピリオドは単語の一部ではなく、一方、 アポストロフ、バックスペース、下線は単語の一部である、 となるように構文テーブルを変更します。

段落の最初の行を字下げするのであれば、テキスト(text)モードではなく 段落字下げ型テキスト(paragraph-indent-text)モードを使うべきです。 このモードでは、段落のあいだに空行を設ける必要はありません。 というのは、最初の行の字下げで、段落の始まりがわかるからです。 ただし、すべての行が字下げされている段落は扱えません。 このモードに入るには、M-x paragraph-indent-text-modeを使います。

テキスト(text)モード、および、 テキスト(text)モードに基づくすべてのモードでは、 M-TABをコマンドispell-complete-wordとして定義します。 このコマンドは、ポイントの直前の部分的な単語を綴り辞書を用いて補完します。 See section 綴りの検査と訂正

テキスト(text)モードに入ると、フックtext-mode-hookを実行します。 テキスト(text)モードに関連する他のモードも、このフックに続けて 各モード専用のフックを実行します。 つまり、段落字下げ型テキスト(paragraph-indent-text)モード、 nroffモード、TeXモード、アウトライン(outline)モード、 メイル(mail)モードがそうです。 text-mode-hookに登録されたフック関数では、 major-modeの値を調べれば実際にどのモードに入ったかわかります。 See section フック


19.8 アウトラインモード(outlineモード)

アウトライン(outline)モードはテキスト(text)モードにたいへん よく似たメジャーモードですが、アウトライン構造を持つテキストの編集用です。 アウトライン構造を把握できるようにテキストの一部を一時的に不可視にできます。 カレントバッファのメジャーモードをアウトライン(outline)モードに 切り替えるには、M-x outline-modeと打ちます。

アウトライン(outline)モードで行を不可視にすると、 その行は画面上に表示されません。 画面上では、不可視にした行が削除されたかのように見えますが、 それに先行する可視な行の末尾に省略記号(ピリオドが3つ...)が表示されます (何行不可視にしていても、省略記号は1つだけ)。

C-nC-pのような行を対象とした編集コマンドは、 不可視にした行のテキストを、先行する可視な行の一部であるかのように扱います。 改行も含めて可視な行全体をキルすると、後続の不可視な行も一緒にキルします。

アウトラインマイナ(outline-minor)モードは、 メジャーモードであるアウトライン(outline)モードと 同じコマンドを提供しますが、他のメジャーモードと一緒に使用できます。 カレントバッファでアウトラインマイナ(outline-minor)モードをオンにするには、 M-x outline-minor-modeと打ちます。 `mode: outline-minor'といった形のファイルにローカルな変数で、 テキストファイルにアウトラインマイナ(outline-minor)モードを 指定することもできます(see section ファイルにローカルな変数)。

メジャーモードであるアウトライン(outline)モードでは、 プレフィックスC-cに特別なキーバインディングを設定しています。 アウトラインマイナ(outline-minor)モードでは、 C-c @をプレフィックスとして同様のバインディングがあります。 これは、一緒に用いるメジャーモードの特別なコマンドとの衝突を 減らすための措置です。 (変数outline-minor-mode-prefixで、 実際に使用するプレフィックスを制御する。)

アウトライン(outline)モードに入ると、 フックtext-mode-hookに続けてフックoutline-mode-hookを 実行します(see section フック)。


19.8.1 アウトラインの形式

アウトライン(outline)モードは、 バッファの中には2種類の行、つまり、 見出し行(heading lines)、本体行(body lines) があると仮定します。 見出し行は、アウトラインのトピックを表していて、 1つ以上の星印で始まります。 星印の個数は、アウトライン構造における見出しの深さを表します。 つまり、星印1つの見出し行は主要なトピックを表します。 この行とつぎの星印1個の行のあいだにある星印2個の見出し行は、 この行の下位トピックです。 星印がいくつであってもこのような関係が成り立ちます。 見出し行以外は本体行です。 これらは直前の見出し行に属します。 以下に例を示します。

 
* Food
This is the body,
which says something about the topic of food.

** Delicious Food
This is the body of the second-level header.

** Distasteful Food
This could have
a body too, with
several lines.

*** Dormitory Food

* Shelter
Another first-level topic with its header line.

見出し行とそれに続く本体行をまとめて項目(entry)と呼びます。 また、見出し行と、それに続くさらに深いレベルの見出し行とそれらの本体行を まとめて部分木(subtree)と呼びます。

変数outline-regexpに値を設定して、 見出し行を判定する基準をカスタマイズできます。 この正規表現に行頭が一致する行を見出し行とみなします。 (左端からではなく)行の途中で一致するものは、無視します。 一致したテキストの長さによって、見出しのレベルを決定します。 一致したテキストが長いほどレベルが深くなります。 したがって、たとえば、清書系に章や節を分ける `@chapter'、`@section'、`@subsection'といった コマンドがある場合、これらの行を見出しとして扱えばよいのですが、それには outline-regexpに`"@chap\\|@\\(sub\\)*section"'と設定します。 これには、ちょっとしたトリックがあります。 2つの単語、`chapter'と`section'は同じ長さですが、 正規表現では、`chap'だけに一致するように定義することで、 章見出しに一致するテキストの長さのほうを短くできます。 これによって、アウトライン(outline)モードは、 章(chapter)の中に節(section)が含まれるとわかるのです。 他のコマンドが`@chap'で始まらない限り、この設定は有効です。

変数outline-levelを設定すると、見出し行のレベル計算方法を変更できます。 outline-levelの値は、引数を取らない、 現在の見出しのレベルを返す関数である必要があります。 Cモード、nroffモード、Emacs Lispモードといったメジャーモードのいくつかでは、 アウトラインマイナ(outline-minor)モードが有効に働くように、 この変数を設定します。


19.8.2 アウトライン上での移動コマンド

アウトライン(outline)モードには、 前後の見出し行に移動する特別なコマンドがあります。

C-c C-n

つぎの可視な見出し行にポイントを移動する (outline-next-visible-heading)。

C-c C-p

まえの可視な見出し行にポイントを移動する (outline-previous-visible-heading)。

C-c C-f

ポイント位置と同じレベルのつぎの可視な見出し行にポイントを移動する (outline-forward-same-level)。

C-c C-b

ポイント位置と同じレベルのまえの可視な見出し行にポイントを移動する (outline-backward-same-level)。

C-c C-u

より浅い(より多くの項目を含む)レベルで、 可視な見出し行にポイントを移動する(outline-up-heading)。

C-c C-noutline-next-visible-heading)は、 つぎの見出し行にポイントを移動します。 C-c C-poutline-previous-visible-heading)も同様ですが、 逆向きにポイントを移動します。 どちらのコマンドも、数引数を反復回数として受け取ります。 コマンドの名前は、不可視な見出し行を飛び越えることを強調していますが、 これは何も特別な機能ではありません。 行を探すようなすべての編集コマンドは、不可視な行を自動的に無視します。

もっと強力な移動コマンドは、見出しのレベル構造を把握して移動を行うものです。 C-c C-foutline-forward-same-level)と C-c C-boutline-backward-same-level)は、 アウトライン構造中で同じレベルにある別の見出し行にポイントを移動します。 C-c C-uoutline-up-heading)は、 より浅いレベルの見出し行へ戻るようにポイントを移動します。


19.8.3 アウトラインの可視/不可視制御コマンド

アウトライン(outline)モードの特別なコマンドとして、 行を可視/不可視にするものもあります。 これらのコマンドの名前は、すべてhideあるいはshowで始まります。 これらのほとんどは、逆の機能のコマンドと対になっています。 これらのコマンドはアンドゥ可能ではありませんが、 実行直後ならば戻すことはできます。 行を可視/不可視にするのは、アンドゥ機構に単純に記録するのではありません。

C-c C-t

バッファ中の本体行をすべて不可視にする(hide-body)。

C-c C-a

バッファ中のすべての行を可視にする(show-all)。

C-c C-d

ポイント位置の見出し行を除いて、 その下位レベルのすべてを不可視にする(hide-subtree)。

C-c C-s

ポイント位置の見出し行、本体、下位の見出し/本体、 すべてを可視にする(show-subtree)。

C-c C-l

ポイント位置の見出し行の本体と 下位の見出し行のすべての本体を不可視にする (hide-leaves)。

C-c C-k

ポイント位置の見出し行の下位の見出し行をすべて可視にする (show-branches)。

C-c C-i

ポイント位置の見出し行の直下(1レベル深い)の下位見出しを 可視にする(show-children)。

C-c C-c

ポイント位置の見出し行の本体を不可視にする(hide-entry)。

C-c C-e

ポイント位置の見出し行の本体を可視にする(show-entry)。

C-c C-q

最上位のnレベルまでを除き、すべてを不可視にする (hide-sublevels)。

C-c C-o

ポイント位置の見出し行や本体、および、 そこから最上位レベルに至るまでに通過する見出し行を除き、 すべて不可視にする(hide-other)。

C-c C-chide-entry)と C-c C-eshow-entry)の2つのコマンドは、 正反対の機能を持っています。 これらは、見出し行にポイントがある場合 (24) に、その本体のみに作用します。 下位見出しとその本体は影響を受けません。

もっと強力で機能が正反対のコマンドは、 C-c C-dhide-subtree)と C-c C-sshow-subtree)です。 どちらも見出し行にポイントがあるとき (25) に使い、 見出しの部分木内のすべての行 つまり、本体、直接/間接に関わらずあらゆる下位の見出しとその本体、 に作用します。 つまり、部分木には、その見出し行に続く つぎの同レベルか上位レベルの見出し行の直前までが含まれます。

可視な部分木と、すべて不可視な部分木の中間的な状態には、 本体は不可視で下位の見出し行はすべて可視といったものも存在します。 この状態を作り出すコマンドは2つあり、 本体を不可視にするか、下位見出しを可視にするかです。 これらは、C-c C-lhide-leaves)と C-c C-kshow-branches)です。

C-c C-ishow-children)は、 show-branchesより少し弱いコマンドです。 これは、直下の、つまり1レベル深い見出し行だけを可視にします。 より深いレベルの見出しは不可視ならば不可視のままです。

ファイル全体に効果がおよぶ2つのコマンドがあります。 C-c C-thide-entry)は本体行をすべて不可視にするので、 アウトライン構造だけを眺めることができます。 C-c C-ashow-all)は、すべての行を可視にします。 C-c C-aは本体行以外にも作用しますが、 これらのコマンドは正反対の機能の対と考えることができます。

コマンドC-c C-qhide-sublevels)は、 最上位レベルの見出し以外をすべて不可視にします。 数引数nを指定すると、最上位からnレベルまでの見出し行を除いた すべてを不可視にします。

コマンドC-c C-ohide-other)は、 ポイント位置の見出しあるいは本体、その親( アウトライン構造においてポイント位置から最上位レベルまで至る見出し)を 除いたすべてを不可視にします。

変数selective-display-ellipsesnilを設定すると、 可視な行の末尾に現れる省略記号を消せます。 そうすると、不可視な行の存在を示すものは何もなくなります。

インクリメンタルサーチでアウトライン(outline)モードが 不可視にしているテキストを探しだすと、バッファのその部分は可視になります。 その箇所で探索から抜けると、テキストは可視のまま (26)になります。


19.8.4 複数の視点からアウトラインを眺める

1つのアウトライン構造を同時に2つの視点から別々のウィンドウに表示して 眺めることができます。 それには、M-x make-indirect-bufferを使って 間接バッファを作成する必要があります。 このコマンドの最初の引数は、既存のアウトライン用バッファの名前で、 2番目の引数は新たに作成する間接バッファの名前です。 See section 間接バッファ

間接バッファがあるならば、C-x 4 bや他のEmacsコマンドで普通に そのバッファをウィンドウに表示できます。 テキストの一部を可視/不可視にするアウトライン(outline)モードのコマンドは、 各バッファで独立に働きます。 その結果、各バッファごとに独自の視点を持たせることが可能です。 同じアウトラインに対して3つ以上の視点が必要ならば、 間接バッファをさらに作成してください。


19.9 TeXモード

TeXは、Donald Knuthが作成した強力な清書系です。 しかも、GNU Emacsと同じくフリーです。 LaTeXは、TeXの入力形式を単純化したもので、 TeXのマクロで実現されています。 これもTeXに付属しています。 SliTeXはスライドを作成するためにLaTeXを特殊化したものです。

Emacsには、TeXの入力ファイルを編集するための特別なTeXモードがあります。 このモードには、区切りの対応を検査したり、 ファイル全体やその一部に対してTeXを起動したりする機能があります。

TeXモードには3つの変種があります。 それぞれ、プレインTeX(plain-tex)モード、 LaTeX(latex)モード、SliTeX(slitex)モードです (これら3つはメジャーモードですが、差異はわずか)。 これらのモードは、異なる3つの入力形式を編集するように設計されています。 コマンドM-x tex-modeは、バッファ内の内容を調べて、 LaTeXの入力なのかSliTeXの入力なのか判断します。 そのいずれかであれば、それに適したモードを選択します。 ファイルの中身がLaTeXでもSliTeXでもなさそうであれば、 プレインTeX(plain-tex)モードを選択します。 ファイルの内容が判断するに十分でなければ、 変数tex-default-modeで使用するモードを制御します。

M-x tex-modeが適切なモードを推測できなかった場合には、 コマンドM-x plain-tex-modeM-x latex-modeM-x slitex-modeで明示的にTeXの変種を選択できます。


19.9.1 TeX編集コマンド

ここでは、TeXの入力ファイルのテキストを編集するために TeXモードに用意してある特別なコマンドについて述べます。

"

文脈に応じて```'、`"'、`'''を挿入する (tex-insert-quote)。

C-j

段落区切り(空行を2つ)を挿入し、 まえの段落の中括弧やドル記号の対応を検査する (tex-terminate-paragraph)。

M-x tex-validate-region

リージョン内の各段落に対して、 中括弧やドル記号の対応を検査する。

C-c {

`{}'を挿入して、そのあいだにポイントを移動する (tex-insert-braces)。

C-c }

対応が取れていないつぎの閉じ中括弧のあとに 前向きにポイントを移動する(up-list)。

TeXでは、文字`"'はまず使いません。 引用を始めるには```'を、終るには`'''を使います。 こういったテキスト整形上の規則の下で編集作業を楽にするために、 TeXモードでは``'と`''を対で挿入する (tex-insert-quote)ようにキー"の意味を変えています。 より正確にいえば、このコマンドは白文字や開き中括弧のあとでは```'を、 バックスラッシュのあとでは`"'を、 これ以外の文字のあとでは`'''を挿入します。

特別な文脈で`"'文字が必要であれば、C-qを使って挿入します。 また、`"'に数引数を指定すると、その個数分の`"'を入力します。 ローカルマップからバインディング(see section キーバインディングのカスタマイズ)を取り除けば、 `"'を展開する機能をオフにできます。

TeXモードでは、`$'にはTeXの数式モードの区切りの対応を確認する ための特別な構文コードが設定されています。 数式モード終了を意味する`$'を挿入すると、 それに対応した数式モード開始の`$'を1秒間ほど表示します。 これは、閉じ中括弧を挿入すると、 それに対応する開き中括弧を表示する機能と同じです。 しかし、`$'が数式モードを開始するものか終了するものかを 知る方法がありません。 したがって、数式モード開始の`$'を挿入しても、 たとえ実際には無関係であっても、 まえにある`$'が対応しているかのように表示されてしまいます。

TeXは、中括弧を必ず対応が取れている区切りとして使います。 ユーザーの中には、中括弧を別々に入力するよりも、 つねに対応が取れている中括弧の入力を好む人もいます。 C-c {tex-insert-braces)と打てば中括弧の対を挿入できます。 さらに、ポイントがそれらのあいだに置かれるので、 中括弧の内側にテキストを挿入できます。 そのあとに、コマンドC-c }up-list)を使って、 閉じ中括弧のうしろに移動します。

中括弧の対応を調べるコマンドは2つあります。 C-jtex-terminate-paragraph)は、 ポイントの直前の段落を検査してから、新たな段落を始める空行を2つ挿入します。 対応していない中括弧があれば、エコー領域にメッセージを表示します。 M-x tex-validate-regionは、リージョンの段落を1つ1つ検査します。 エラーはバッファ`*Occur*'に表示されます。 このバッファでC-c C-cMouse-2を使えば、 特定の非対応箇所へ移動できます。

TeXモードでは、Emacsコマンドは中括弧だけでなく、 括弧(`()')や角括弧(`[]')も数えています。 これは、TeXの構文を検査する目的からいえば、厳密には正しくありません。 しかし、括弧や角括弧はテキスト内で対応する区切りとしてよく使われますし、 各種の移動コマンドや対応関係を自動表示するコマンドが それらを扱えると便利です。


19.9.2 LaTeX編集コマンド

LaTeXモードと、その変種のSliTeX モードには、 プレインTeX(plain-tex)では利用できない特別な機能がいくつかあります。

C-c C-o

LaTeXのブロックを表す`\begin'と`\end'を挿入し、 それらのあいだにポイントを置く(tex-latex-block)。

C-c C-e

まだ閉じていないもっとも内側のLaTeXのブロックを閉じる (tex-close-latex-block)。

LaTeXの入力では、`\begin'と`\end'がテキストのブロックを グループ化するために使われます。 `\begin'と対応する`\end'を(`\begin'のつぎの新しい行に) 挿入するには、C-c C-otex-latex-block)を使います。 それらのあいだには空行が挿入されてポイントもそこに置かれます。 ブロックの種類を入力するときには、補完を使えます。 標準のリストに含まれないブロック名を使う場合には、 変数latex-block-namesに設定します。 つぎの例は、`theorem'、`corollary'、`proof'を追加するものです。

 
(setq latex-block-names '("theorem" "corollary" "proof"))

LaTeXの入力では、 `\begin'と`\end'は対応が取れている必要があります。 C-c C-etex-close-latex-block)を使うと、 対応が取れていない最後の`\begin'に対応する`\end'を 自動的に挿入できます。 また、対応する`\begin'と同じ字下げを`\end'にも施します。 ポイントが行頭にあったときには、`\end'のうしろで改行します。


19.9.3 TeX印刷コマンド

バッファ全体あるいは一部のテキストに対して、 Emacsの下位プロセスとしてTeXを起動できます。 特定の章だけに対してこのようにTeXを実行するのは、 ファイル全体の清書に時間を費すことなく、 変更部分の見え方を確認するよい方法です。

C-c C-r

バッファのヘッダとともに、 カレントリージョンに対してTeXを起動する(tex-region)。

C-c C-b

カレントバッファ全体に対してTeXを起動する(tex-buffer)。

C-c TAB

現在のファイルに対してBibTeXを起動する(tex-bibtex-file)。

C-c C-f

現在のファイルに対してTeXを起動する(tex-file)。

C-c C-l

下位プロセスであるTeXの出力を表示したウィンドウをスクロールして、 出力行の最後が見えるようにする(tex-recenter-output-buffer)。

C-c C-k

TeXのサブプロセスを終了させる(tex-kill-job)。

C-c C-p

最後に実行したC-c C-rC-c C-bC-c C-fの出力を印刷する。 (tex-print)。

C-c C-v

最後に実行したC-c C-rC-c C-bC-c C-fの出力を プレビューする(tex-view)。

C-c C-q

プリンタキューを表示する(tex-show-print-queue)。

C-c C-btex-buffer)を使えば、 カレントバッファの内容を下位のTeXに渡すことができます。 清書結果は一時ファイルに出力されます。 それを印刷するには、C-c C-ptex-print)と打ちます。 そのあとで、印刷の進捗状況を確認するには C-c C-qtex-show-print-queue)を利用できます。 TeXの出力ファイルを表示する機能を持った端末があれば、 C-c C-vtex-view)でプレビューできます。

TeXが実行時に使うディレクトリを指定するには、 変数tex-directoryに設定します。 デフォルトの値は"."です。 環境変数TEXINPUTSに相対的なディレクトリ名が入っていたり、 TeXの`\input'コマンドに相対的なファイル名を指定してある場合には、 tex-directory"."である必要があります。 さもないと、誤った結果になるでしょう。 そういった状況でなければ、"/tmp"のような、 他のディレクトリを設定しても安全です。

下位のTeXを起動するために使うコマンドを指定したければ、 変数tex-run-commandlatex-run-commandslitex-run-commandtex-dvi-print-commandtex-dvi-view-commandtex-show-queue-commandに それぞれ値を設定します。 tex-dvi-view-commandにはデフォルト値がないので、 使用する端末にあわせた値を設定する必要があります。 これ以外の変数には、使用するシステムに適切と思われる (そうでないかもしれないが)デフォルト値が設定されています。

通常は、これらのコマンドに与えるファイル名はコマンド文字列の最後にきます。 たとえば、`latex filename'です。 しかし、ときにはコマンドの途中にファイル名を埋め込む必要があります。 たとえば、パイプを介して出力を他のコマンドに渡すようなコマンドの引数に ファイル名を指定する場合です。 ファイル名を置く箇所は、コマンド文字列中の`*'で指定できます。 たとえば、以下のように設定します。

 
(setq tex-dvi-print-command "dvips -f * | lpr")

エラーメッセージを含めたTeXからの端末出力は、 `*tex-shell*'と呼ばれるバッファにすべて現れます。 TeXがエラーを報告した場合には、 このバッファに切り替えれば適切な入力を与えることができます (これはシェル(shell)モードと同様に動作する。see section 対話的な下位のシェル)。 このバッファに切り替えなくてもC-c C-lと打てば、 バッファの最後の行が表示されるようにスクロールできます。

TeXの出力が不要となったら、TeXプロセスを終了させるために C-c C-ktex-kill-job)と打ちます。 C-c C-bC-c C-rを使っても、 動作中のTeXプロセスを終了できます。

C-c C-rtex-region)と打てば、 任意のリージョンを下位のTeXに渡せます。 しかし、これには少々巧妙な手口を必要とします。 というのは、たいていの場合、TeXの入力ファイルの先頭部分には パラメータの設定やマクロ定義があり、それらがないと残りの部分を正しく 清書できないからです。 この問題を解決するために、C-c C-rでは ファイルの中で必須の整形コマンドを含んでいる部分を指定できます。 リージョンのまえにその部分を加えてTeXへの入力とします。 ファイル中の必須であると指定された部分をヘッダと呼びます。

プレインTeX(plain-tex)モードでヘッダの境界を示すには、 ファイルに2つの特別な文字列を挿入します。 ヘッダの直前に`%**start of header'を、 ヘッダの直後に`%**end of header'を挿入します。 どちらの文字列も2行にまたがってはいけませんが、 前後に別のテキストがあってもかまいません。 これらの文字列を持つ行もヘッダに含まれます。 バッファの先頭から100行以内に`%**start of header'が現れなければ、 C-c C-rはヘッダがないと仮定します。

LaTeXモードでは、`\documentstyle'で始まり `\begin{document}'で終わる部分がヘッダです。 これらは、いかなる場合でもLaTeXが要求するコマンドなので、 ヘッダを認識するために特別なことをする必要はありません。

コマンドtex-buffertex-regionは、 一時的なディレクトリ上ですべての作業を行うので、 相互参照のためにTeXが必要とする補助ファイルを使用できません。 一般に、これらのコマンドは、相互参照がすべて正しい必要がある 最終的な原稿の作成には適していません。

相互参照のための補助ファイルを必要とする場合には、 カレントバッファのファイルを入力として、そのファイルを置いたディレクトリで TeXを実行するC-c C-ftex-file)を使います。 TeXを実行するまえに、変更したすべてのバッファを保存するか尋ねてきます。 一般には、正しい相互参照を得るためには、 tex-fileを2度実行する必要があります。

変数tex-start-options-stringの値は、 TeXの実行のオプションを指定します。 デフォルト値は、TeXをバッチモードで実行します。 TeXを対話的に実行するには、変数に""を設定します。

巨大なTeX文書は、複数のファイル、つまり、1つのメインファイルと サブファイルとに分割されることがよくあります。 サブファイルに対してTeXを実行しても、うまくいくことはまずありません。 メインファイルに対してTeXを実行する必要があります。 サブファイルを編集する場合でもtex-fileを使えるように、 メインファイルの名前を変数tex-main-fileに設定できます。 そうするとtex-fileはそのファイルに対してTeXを実行します。

tex-main-fileのもっとも便利な使い方は、 各サブファイルのローカル変数リストで指定することです。 See section ファイルにローカルな変数

LaTeX用ファイルであれば、 カレントバッファのファイルに対する補助ファイルを処理するために BibTeXを使えます。 BibTeXは、参考文献をデータベースで調べて、 参考文献の節のための文献リストを準備します。 コマンドC-c TABtex-bibtex-file)は、 カレントバッファのファイルに対する`.bbl'ファイルを 生成するためのシェルコマンド(tex-bibtex-command)を実行します。 通常は、まず`.aux'ファイルを作るために C-c C-ftex-file)を一度実行してから、 つぎにC-c TABtex-bibtex-file)を実行し、 正しい相互参照を得るためにC-c C-ftex-file)を さらに2回実行します。

どのTeXモードに入っても、 フックtext-mode-hooktex-mode-hookを実行します。 そのあとで、 plain-tex-mode-hooklatex-mode-hookの適切なフックを実行します。 SliTeXファイルに対しては、slitex-mode-hookを呼びます。 TeX用のシェルの開始時には、フックtex-shell-hookを実行します。 See section フック


19.10 nroffモード

nroffモードはテキスト(text)モードに似ていますが、 テキスト中のnroffコマンドを扱えるように変更してあります。 このモードに入るには、M-x nroff-modeを実行します。 テキスト(text)モードとは、2、3の点で異なるだけです。 nroffコマンドを含んだ行は、すべて段落区切りとみなすので、 詰め込みによってnroffコマンドが本文に混ざってしまうことはありません。 ページは`.bp'コマンドで分割されます。 コメントは`.\"'で始まります。 また、テキスト(text)モードにはない、つぎの3つの特別なコマンドがあります。

M-n

nroffコマンドではないつぎの行の先頭にポイントを移動する (forward-text-line)。 引数は反復回数。

M-p

M-nと同様だが、まえの行に移動する(backward-text-line)。

M-?

リージョン中のテキスト(nroffコマンド以外)の行数をエコー領域に表示する (count-text-lines)。

nroffモードの他の機能としては、エレクトリックnroff(electric-nroff)モードが あります。 これはM-x electric-nroff-modeでオン/オフできるマイナモードです (see section マイナモード(minor mode))。 このモードがオンのとき、 グループを始めるnroffコマンドを含む行を終えるためにRET (27)を打つたびに、 そのグループを終える対応したnroffコマンドを自動的につぎの行に挿入します。 たとえば、行頭で. ( b RETと打つと、 ポイントのうしろに新たな行として対応するnroffコマンド`.)b'を挿入します。

nroffモードと一緒にアウトラインマイナ(outline-minor)モード (see section アウトラインモード(outlineモード))を使用すると、 見出し行は`.H'のあとに(見出しのレベルにあたる)数字が続く形になります。

nroffモードに入ると、フックtext-mode-hookに続いて フックnroff-mode-hookが実行されます(see section フック)。


19.11 整形済みテキストの編集

エンリッチ(enriched)モードは、 ワープロのようにWYSIWYG方式で、 整形済みテキストを含むファイルの編集を行うためのマイナモードです。 現在のところ、エンリッチ(enriched)モードの整形済みテキストには、 フォント、表示色、下線、左右端、詰め込みと幅揃えの種類を指定できます。 将来的には、その他の整形機能も実装しようと計画しています。

エンリッチ(enriched)モードはマイナモードです(see section マイナモード(minor mode))。 通常は、テキスト(text)モードと一緒に使います(see section テキストモード(textモード))。 しかしながら、アウトライン(outline)モードや 段落字下げ型テキスト(paragraph-indent-text)モードのような 他のメジャーモードと一緒に使うことも可能です。

Emacsは能力的には整形済みテキストのファイルをさまざまなファイル形式で 格納することができす。 現在のところは、1種類の形式のみ、 つまり、MIMEプロトコルで定義されたtext/enriched形式のみを 実装してあります。 Emacsがどのようにファイルの形式を識別し変換するかの詳細に関しては See (elisp)Format Conversion section `ファイル書式変換' in Emacs Lisp リファレンスマニュアル

Emacsの配布の中には、実例として整形済みテキストファイル `etc/enriched.doc'があります。 このファイルには、本節で説明するすべての機能の実例が盛り込まれています。 また、将来の拡張に関するアイデアも述べてあります。


19.11.1 整形済みテキストの編集

text/enriched形式でEmacsが保存したファイルを訪れると、 Emacsは自動的にファイル中の整形情報をEmacs自身の内部形式(テキスト属性)に 変換し、エンリッチ(enriched)モードをオンにします。

新たに整形済みテキストファイルを作成するには、 まず、存在しないファイルを訪れてから、 テキストを入力するまえにM-x enriched-modeと打ちます。 このコマンドはエンリッチ(enriched)モードをオンにします。 入力されるテキストが正しく扱われることを保証するために、 テキストを挿入するまえにエンリッチ(enriched)モードをオンにしてください。

より一般的にいえば、コマンドenriched-modeは、 エンリッチ(enriched)モードがオフならオン、オンならオフにします。 数引数を指定すると、それが正であればエンリッチ(enriched)モードを オンにし、それ以外ではオフにします。

エンリッチ(enriched)モードがオンのときにバッファを保存すると、 Emacsはテキストをファイルに書き出すときに 自動的にtext/enriched形式へ変換します。 ふたたびそのファイルを訪問すると、Emacsは自動的にその形式を認識して テキストを変換し、エンリッチ(enriched)モードをオンにします。

通常、text/enriched形式のファイルを訪問すると、 Emacsは各段落を指定された右端に納まるように詰め込みます。 この詰め込みをやめて時間を短縮するために、 変数enriched-fill-after-visitingnilaskを設定します。

しかし、エンリッチ(enriched)モードで保存したファイルを訪問するときには、 Emacsは右端の設定をテキストと一緒に保存しているので、 テキストを再度詰め込む必要はありません。

通常はEmacsが保存しないテキスト属性に対する注記(annotation)も 保存するようにするには、 変数enriched-translationsに追加しておきます。 text/enriched規格では、非標準の注記には、`x-read-only'のように `x-'で始まる名前が必要なことに注目してください。 これによって、あとから追加される標準的な注記と 名前が衝突しないことが保証されます。


19.11.2 ハード改行とソフト改行

Emacsは整形済みテキスト中の改行を、 ハード改行とソフト改行の2種類に区別します。

ハード改行は、段落の区切り、リスト内の項目、 左右端に関係なく行分割がつねに必要な箇所に用いられます。 RETコマンド(newline)とC-oopen-line)は ハード改行を挿入します。

ソフト改行は、テキストを左右端のあいだに納めるために使用されます。 自動詰め込み(auto-fill)モードを含めたすべての詰め込みコマンドは ソフト改行を挿入し、ソフト改行だけを削除します。

ハード改行とソフト改行は見た目は同じですが、違いを理解することは重要です。 詰め込んだ段落の途中で行に分割するときにRETを使ってはいけません。 あとの詰め込みの妨げとなるハード改行を挿入してしまいます。 かわりに、自動詰め込み(auto-fill)モードに行分割を行わせて、 テキストや左右端が変化してもEmacsが適切に再度詰め込めるようにします。 See section 自動詰め込みモード(auto-fillモード)

一方、表やリストのように、入力したとおりの行にしておく必要がある場合には、 RETで行を終えます。 これらの行では、幅揃えのスタイルとしてunfilledを 指定するのもよいかもしれません。 See section 整形済みテキストの幅揃え


19.11.3 整形情報の編集

整形済みテキストファイルの整形情報を変更するには、2つの方法があります。 キーボードコマンドを使うか、マウスを使います。

文書に属性を追加するもっとも簡単な方法は、 Text Propertiesメニューを使用することです。 このメニューを出すには2つの方法があります。 メニューバーのEditメニューから選択するか、 C-mouse-2CTRLキーを押し下げたままマウスの真中のボタンを押す) です。

Text Propertiesメニューのほとんどの項目には、 別のサブメニューがついています。 これらについては後述します。 コマンドを直接実行する項目もあります。

Remove Properties

Text Propertiesメニューで扱えるすべてのテキスト属性をリージョンから取り除く (facemenu-remove-props)。

Remove All

すべてのテキスト属性をリージョンから取り除く (facemenu-remove-all)。

List Properties

ポイント直後の文字のすべてのテキスト属性を表示する (list-text-properties-at)。

Display Faces

定義済みフェイス一覧を表示する。

Display Colors

定義済み表示色一覧を表示する。


19.11.4 整形済みテキストのフェイス

Facesサブメニューには、bolditalicunderlineといっ たEmacsで使用できる各種フェイスが並んでいます。 その中から1つを選ぶと、リージョンにフェイスを追加します。 See section 複数タイプフェイスの利用。 以下のキーボードコマンドでフェイスを指定することもできます。

M-g d

リージョン、あるいは、つぎに挿入する文字のフェイスをdefaultにする (facemenu-set-default)。

M-g b

リージョン、あるいは、つぎに挿入する文字のフェイスをboldにする (facemenu-set-bold)。

M-g i

リージョン、あるいは、つぎに挿入する文字のフェイスをitalicにする (facemenu-set-italic)。

M-g l

リージョン、あるいは、つぎに挿入する文字のフェイスをbold-italicにする (facemenu-set-bold-italic)。

M-g u

リージョン、あるいは、つぎに挿入する文字のフェイスをunderlineにする (facemenu-set-underline)。

M-g o face RET

リージョン、あるいは、つぎに挿入する文字のフェイスをfaceにする (facemenu-set-face)。

前置引数を指定してこれらのコマンドを使ったり、 暫定マーク(transient-mark)モードでリージョンが選択されていなければ、 これらのコマンドはつぎに入力する自己挿入文字だけに使うフェイスを指定します。 See section 暫定マークモード(transient-markモード)。 これはキーボードコマンドとメニューコマンドの両方に通用します。

エンリッチ(enriched)モードには、 excerptfixedの2つの追加フェイスが定義されています。 これらのフェイスは、text/enrichedファイル形式で 使用されるコードに対応しています。

excerptフェイスは引用を表すためのものです。 カスタマイズしてなければitalicと同じです (see section フェイスのカスタマイズ)。

fixedフェイスは、『この部分のテキストには固定幅フォントを使用する』と いう意味です。 現在、Emacsは固定幅フォントにだけ対応しています。 したがって、fixedの注記は今のところ必要ありません。 しかしながら、将来のEmacsでは可変幅フォントに対応したり、 固定幅フォントをデフォルトとしないtext/enriched形式を 表示可能な他のシステムを計画しています。 ですから、固定幅フォントをどうしても使いたい箇所には、 その部分のテキストにfixedを指定するべきです。

通常、fixedフェイスには、デフォルトと異なるフォントを使うように 定義されています。 ところが、システムごとにさまざまなフォントがありますから、 この定義をカスタマイズする必要があるかもしれません。

異なるフェイスを表示できない端末ではそれらの違いを目にすることはできませんが、 それでも、さまざまなフェイスを含む文書の編集は行えます。 文書にフェイスや表示色を追加することもできます。 それらを表示可能な端末で見たときにフェイスや色を目にすることができます。


19.11.5 整形済みテキストの表示色

テキストの部分ごとに前景色と背景色を指定できます。 前景色を指定するメニューと背景色を指定するメニューがあります。 これらのメニューには、そのEmacsセッションのエンリッチ(enriched)モードで 使っている表示色一覧が表示されます。

前置引数とともに表示色を指定したり、 暫定マーク(transient-mark)モードでリージョンが選択されていなければ、 つぎに入力する自己挿入文字だけに作用します。 See section 暫定マークモード(transient-markモード)。 そうでなければ、コマンドはリージョンに作用します。

それぞれの表示色メニューにはもう1つ`Other'という項目があります。 この項目は、メニューに表示されていない表示色を指定するために使います。 これは、ミニバッファで表示色名称を読み取ります。 利用可能な表示色と名前の一覧を表示するには、 Text Propertiesメニューの`Display Colors'項目を使います (see section 整形情報の編集)。

このようにして指定した表示色や、 読み込んだ整形済みテキスト内で使われている表示色は、 そのEmacsセッション中は、両方の表示色メニューに追加されます。

表示色を指定するためのキーバインディングはありませんが、 拡張コマンドM-x facemenu-set-foregroundM-x facemenu-set-backgroundを使えばできます。 どちらのコマンドもミニバッファで表示色名称を読み取ります。


19.11.6 整形済みテキストの字下げ

整形済みテキストの編集では、段落全体あるいは段落の一部に 異なる左端と右端の字下げを指定できます。 指定した左右端は、自動的に詰め込みコマンド(see section テキストの詰め込み)と 行分割コマンドに反映されます

Indentationサブメニューは、 これらの属性を指定するための便利なインターフェイスです。 このサブメニューにはつぎの4つの項目があります。

Indent More

リージョンを4桁分字下げする(increase-left-margin)。 エンリッチ(enriched)モードでは、 このコマンドはC-x TABでも実行できる。 数引数を指定すると、左端に加える桁数として扱う(負の値であれば桁を減らす)。

Indent Less

リージョンから4桁分字下げを取り除く。

Indent Right More

右端を4桁分字下げしてテキストの幅を狭める。

Indent Right Less

右端から4桁分字下げを取り除く。

なお、これらのコマンドを繰り返せば、字下げを増やしたり減らしたりできます。

これらのコマンドの一般的な使い方は、段落全体の字下げを変更することです。 しかし、それだけではありません。 任意の箇所で左右端を変更できます。 新たに設定された値は、行末(右端)や つぎの行の先頭(左端)に影響します。

それにより、ぶら下がり字下げで段落を整形することができます。 ぶら下がり字下げとは、1行目の字下げ幅が2行目以降の字下げ幅より少ないものです。 ぶら下がり字下げするには、段落の最初の単語の直後から始まり段落の末尾まで 続くリージョンの字下げ幅を増やします。

段落の1行目の字下げはもっと簡単です。 段落の本体があるべき位置に段落全体に対する左右端を設定してから、 最初の行に追加の空白やタブを挿入すればよいのです。

編集の結果、段落の詰め込みが汚くなってしまうことがあります。 たとえば、段落の一部が左端や右端からはみ出してしまうことです。 そうなったときには、M-qfill-paragraph)を使って、 段落を詰め込み直します。

変数standard-indentは、これらのコマンドで増減する字下げ幅を指定します。 デフォルト値は4です。 エンリッチ(Enriched)モード全体に対する右端のデフォルトは、 通常どおり変数fill-columnで制御します。

詰め込み接頭辞があれば、指定した段落の字下げに追加されます。 C-x .は、 詰め込み接頭辞として新たに指定された値には、字下げの白文字を含めません。 しかも、詰め込みコマンドは各行の字下げのうしろにある詰め込み接頭辞を探します。 See section 詰め込み接頭辞


19.11.7 整形済みテキストの幅揃え

整形済みテキストの編集では、段落に対してさまざまなスタイルの揃え方を 指定できます。 指定したスタイルは自動的にEmacsの詰め込みコマンドに影響します。

Justificationサブメニューは、 スタイルを指定するための便利なインターフェイスです。 このサブメニューにはつぎの5項目があります。

Flush Left

これは(少なくとも英語では)もっとも一般的な幅揃えスタイル。 行は左端に揃えられるが、右側は不揃いのまま。

Flush Right

右端に行を揃える。 必要に応じて左側に空白やタブを挿入して右側で行を揃える。

Full

行ごとに左右両端を揃える。 このスタイルで揃えると空白を均等に挿入する。 印刷物では見栄えがたいへんよいが、 画面上の固定幅フォントではそれほど美しくない。 たぶん、将来のEmacsでは行内の空白量を調節できるようになり、 エレガントな幅揃えが達成できるであろう。

Center

各行を現在の左右端の中央に揃える。

None

(28) 詰め込みをいっさい止める。 各行は入力したままになる。 つまり、この設定をしたテキストでは、 詰め込みコマンドも自動詰め込み機能も何の効果もない。 それでも、左端を字下げすることは可能。 詰め込まないリージョンでは、改行はすべてハード改行として扱う (see section ハード改行とソフト改行)。

エンリッチ(enriched)モードでは、 M-jプレフィックス文字を使ってキーボードで幅揃えを指定することもできます。

M-j l

リージョンを左端揃えにする(set-justification-left)。

M-j r

リージョンを右端揃えにする(set-justification-right)。

M-j f

リージョンを左右端揃えにする(set-justification-full)。

M-j c
M-S

リージョンを中央揃えにする(set-justification-center)。

M-j u

リージョンでは詰め込まない(set-justification-none)。

揃え方のスタイルは段落全体に適用されます。 揃え方を変更するコマンドは、ポイントを含む段落に作用しますが、 リージョンが設定されているときには リージョンと重なる段落すべてが対象になります。

揃え方のスタイルのデフォルトは、 変数default-justificationで指定されます。 この値は、leftrightfullcenternone (29) のいずれかのシンボルでなくてはいけません。


19.11.8 他のテキスト属性の設定

Other Propertiesメニュー (30)には、 read-onlyinvisibleintangibleといった有用な テキスト属性を追加/削除する項目があります。 intangible属性はテキスト内にポイントを移動できなくし、 invisible属性はテキストを表示しないようにし、 read-only属性はテキストを変更できなくします。

これらの特別な属性には、 リージョンに属性を付加するためのメニュー項目があります。 最後のメニュー項目`Remove Special'は、 これらの特別な属性すべてをリージョンから取り除きます。

現在のところ、invisible属性とintangible属性は、 text/enriched形式に保存されませんread-only属性は保存されますが、 これはtext/enriched形式の標準的なものではないので、 Emacs以外の他のエディタでは使用されないかもしれません。


19.11.9 エンリッチ(enriched)モードの強制

普通は、Emacsは訪問したファイル内にある特別な注記を認識するので、 整形済みテキストを編集中であることがわかります。 ところが、ファイルの内容を変換するために特別な操作をしたり、 手動でエンリッチ(enriched)モードをオンにする必要がある状況もあります。

コマンドformat-decode-bufferは、 さまざまな形式のテキストをEmacsの内部形式に変換します。 このコマンドは、どの形式からの変換であるのかを尋ねてきますが、 通常は単にRETを打てばEmacsが形式を推測します。

text/enriched形式のファイルをそのままの形、 つまり、整形済みテキストではなく文字列として見たいのであれば、 M-x find-file-literallyコマンドを使います。 このコマンドはfind-fileのようにファイルを訪問しますが、 形式変換を行いません。 文字コード変換(see section コーディングシステム)と 自動展開(see section 圧縮されたファイルの参照)も禁止します。 形式変換を禁止しても、適宜、文字コード変換や自動展開を行わせたいのであれば、 適当な引数を指定してformat-find-fileを使います。


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated by Akihiro Sagawa on June, 15 2005 using texi2html 1.70.