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

16. 目に見えるテキストの条件

異なる出力フォーマットに対し,異なるテキストを使用するのが良いこともあり ます.例えば,印刷されたマニュアルとInfo出力に対し異なるテキストを指定す る,条件コマンド(conditional commands)を使用することができます.

条件コマンドは入れ子状にしてはいけません.

条件コマンドは,以下のカテゴリから成り立ちます.

16.1 条件コマンド  Specifying text for HTML, Info, or TeX.
16.2 条件の否定コマンド  Specifying text for not HTML, Info, or TeX.
16.3 生の書式化コマンド  Using raw TeX or HTML commands.
16.4 @set@clear,そして@value  Designating which text to format (for all output formats); and how to set a flag to a string that you can insert.


16.1 条件コマンド

Texinfoには,特定の出力フォーマットにテキストを含める条件を利用可能にす るために,それぞれの出力フォーマットに対して@if...で囲む方法 があります.

@ifinfoは,印刷されたマニュアルに植字されるとき,TeXで無視さ れるテキストの部分を開始します.テキストのその部分は,Infoファイル(歴史 的な互換性のため)とプレーンテキストの出力だけに現れます.@ifinfo コマンドは単独行に書くべきです.単独行の@end ifinfoを含む行で, Infoのみのテキストを終えるべきです.

@iftex@end iftexコマンドは,@ifinfo@end ifinfoコマンドに類似しています.それらは,テキストが印刷さ れたマニュアルに現れ,Infoファイルに現れないように指定します. @ifhtml@end ifhtmlも同様で,テキストがHTML出力だけに現 すように指定します.そして,@ifplaintext@end ifplaintextも同様で,テキストがプレーンテキストの出力だけに現れるように 指定します.そして,@ifxml@end ifxmlは,XML出力に対す るものです.

例えば,以下のようにします.

 
@iftex
このテキストは,印刷されたマニュアルだけに現れます.
@end iftex
@ifinfo
しかし,このテキストはInfo(またはプレーンテキスト)だけに現れます.
@end ifinfo
@ifhtml
また,このテキストはHTMLだけに現れます.
@end ifhtml
@ifplaintext
但し,このテキストはプレーンテキストだけに現れます.
@end ifplaintext
@ifxml
そしてこれはXML出力だけに現れます.
@end ifxml

上記の例は,以下の行を生成します. しかし,このテキストはInfo(またはプレーンテキスト)だけに現れます. また,このテキストはHTMLだけに現れます. @ifplaintext 但し,このテキストはプレーンテキストだけに現れます. @ifxml そしてこれはXML出力だけに現れます.

読んでいるマニュアルのバージョンに依存して,入力行の一つのみ見えることに 注意してください.


16.2 条件の否定コマンド

@ifnot...コマンドで与えられたもの以外の,あらゆる出力フォー マットに含まれるテキストを指定できます.

 
@ifnothtml ... @end ifnothtml
@ifnotinfo ... @end ifnotinfo
@ifnotplaintext ... @end ifnotplaintext
@ifnottex ... @end ifnottex
@ifnotxml ... @end ifnotxml
@ifnot...コマンドと@endコマンドは,実際のソースファ イルでは単独行で現します.

出力ファイルが与えられたフォーマットで作成されている場合,その領域は 無視されます.それ以外の場合は含められます.

(歴史的な互換性のため)一つの例外があります.@ifnotinfoテキストは, Infoだけでなく,Infoとプレーンテキストの出力の両方で削除されます.テキス トがInfoだけに現れてプレーンテキストに現れないように指定するため,以下の ように@ifnotplaintextを指定してください.

 
@ifnotplaintext
これはInfoにはありますが,プレーンテキストにはありません.

これらのコマンドで限定された領域は,@texで使用したような生のフォー マッタソースではなく,@iftexで使用したような通常のTexinfoソース にします(see section 16.3 生の書式化コマンド).


16.3 生の書式化コマンド

@iftex@end iftexで線引きされた領域の内部に,生のTeX コマンドを埋め込むことが可能です.TeXが見るファイルの一部になるだけな ので,Infoではこれらのコマンドは無視されます.TeXで使用されている `\'を`@'に置換する必要がある以外,通常のTeXファイルで書い ていたようなTeXコマンドを書くことが可能です.例えば,Texinfoファイル の@titlepageセクションで,著作権ページを書式化するためのTeXコ マンド@vskipを使用することが可能です.(@titlepageコマン ドは,@iftexコマンドの使用と同じように,その領域を自動的にInfoに 無視させます.)

しかし,プレーンTeXの多くの機能は,Texinfoが優先されるので動作しませ ん.

@tex@end texコマンドで領域を線引きすることで,プレーン TeXを完全に入力し,TeXコマンドで`\'を使用することが可能です. (@texコマンドでも,@iftexコマンドのようにInfoは領域を無 視します.)唯一の例外は,@end texを正確に認識できるよう, @文字がまだコマンドを導入することです.

例えばここに,プレーンTeXで書かれた数式があります.

 
@tex
$$ \chi^2 = \sum_{i=1}^N
         \left (y_i - (a + b x_i)
         \over \sigma_i\right)^2 $$
@end tex

この例の出力は,印刷されたマニュアルにのみ現れます.Infoでこれを読んでい る場合,印刷されたマニュアルに現れる等式は見ることはないでしょう.

同様に,HTML出力のみに含まれる領域を線引きするため,@ifhtml ... @end ifhtmlを使用し,生のHTMLの領域に対し@html ... @end htmlを使用することができます(再びですが,例外的に@はまだ エスケープ文字なので,@endコマンドを認識することが可能です.)

同様に,XML出力のみに含まれる領域を線引きするため,@ifxml ... @end ifxmlを使用し,生のXMLの領域に対し@xml ... @end xml を使用することが可能です(再びですが,例外的に@はまだエスケープ文 字なので,@endコマンドを認識することが可能です.)


16.4 @set@clear,そして@value

@set@clear@ifset,そして@ifclearコマ ンドを用いて,直接Texinfo書式化コマンドにTexinfoファイルの一部を書式化さ せたり無視させたりすることが可能です.

短い説明は以下のとおりです.

@set flag [value]
変数flagを設定し,追加のvalueが指定されている場合はそれに設 定します.

@clear flag
以前に定義されていたかどうかによらず,変数flagを未定義にします.

@ifset flag
flagが設定されている場合,次の@end ifsetコマンドまでのテキ ストを書式化します.flagがクリアされている場合,次の@end ifsetコマンドまでのテキストは無視されます.

@ifclear flag
flagが設定されている場合,次の@end ifclearコマンドまでのテ キストは無視されます.flagがクリアされている場合,次の@end ifclearコマンドまでのテキストを書式化します.

16.4.1 @set@value  Expand a flag variable to a string.
16.4.2 @ifset@ifclear  Format a region if a flag is set.
16.4.3 @valueの例  An easy way to update edition information.


16.4.1 @set@value

フラグに対する値を指定するために@setコマンドを使用し,それは後に @valueコマンドで展開されます.

フラグ(flag)は識別子です.一般的に,フラグ名には文字と数字のみを使 用し,`-'や`_'は使用しないことが最善です -- それらが動作する 文脈もありますが,TeXの制限のため全てが動作するわけではありません.

値は入力行の残りの文字による文字列で,あらゆるものを含めることが可能です.

@setコマンドは以下のように書きます.

 
@set foo これは文字列です.

これは,フラグfooの値を"これは文字列です"に設定します.

そのとき,Texinfoフォーマッタは@value{flag}コマンドを flagに設定された文字列に置換します.このためfooが上記のよう に設定されている場合,Texinfoフォーマッタは以下のように変換します.

 
@value{foo}
上記を以下に変換
これは文字列です

@valueコマンドを段落の中に書くことも可能です.しかし, @setコマンドは単独行に書く必要があります.

@setコマンドを以下のように書く場合を考えます.

 
@set foo

文字列を指定していないので,fooの値は空の文字列になります.

@clear flagで前に設定されたフラグをクリアする場合,それに 続く@value{flag}コマンドはエラーを報告します.

例えば,以下のようにfooを設定した場合を考えます.

 
@set how-much very, very, very

そのとき,フォーマッタは以下のように変換します.

 
It is a @value{how-much} wet day.
上記を以下変換
It is a very, very, very wet day.

以下のように書いた場合を考えます.

 
@clear how-much

そのとき,フォーマッタは以下のように変換します.

 
It is a @value{how-much} wet day.
上記を以下に変換
It is a {No value for "how-much"} wet day.


16.4.2 @ifset@ifclear

flagが設定されているとき,Texinfo書式化コマンドは,それ以降の @ifset flag@end ifsetコマンドの組の間にあるテキ ストを書式化します.flagがクリアされているとき,Texinfo書式化コマ ンドはテキストを書式化しません@ifclearは同様に処理しま す.

条件によって書式化されるテキストは,@ifset flag@end ifsetコマンドの間に,以下のように書いてください.

 
@ifset flag
conditional-text
@end ifset

例えば,`large'と`small'モデルに対するマニュアルのような,二つの形態があ る一つのドキュメントを作成することが可能です.

 
潅木を傷つけずに掘り出すために,
この機械を使用することが可能です.

@set large

@ifset large
それは,十分大きく育った木も掘り出すことも可能です.
@end ifset

すぐに植え直すことを忘れないでください...

例では,書式化コマンドは,largeフラグが設定されているので, @ifset large@end ifsetの間のテキストを書式化します.

flagがクリアされているとき,Texinfo書式化コマンドは@ifset flag@end ifsetの間のテキストを書式化しません.テ キストは無視され,印刷された出力にもInfo出力にも現れません.

例えば前の例で,@set largeコマンドの後(で,条件テキストの前)に @clear largeコマンドを書いてフラグをクリアする場合,Texinfo書式 化コマンドは,@ifset large@end ifsetコマンドの間のテキ ストを無視します.書式化された出力では,"潅木を傷つけずに掘り出すために, この機械を使用することが可能です.すぐに植え直すことを忘れないでください ..."という行のみ見えるでしょう.

@clear flagコマンドでフラグがクリアされている場合,書式化 コマンドは@ifclear@end ifclearコマンドの組の間のテキス トを書式化します.しかし@set flagでフラグが設定されている 場合,書式化コマンドは@ifclear@end ifclearコマンドの間 のテキストを書式化しません.というよりはむしろ,それらのテキスト を無視します.@ifclearコマンドは以下のようにします.

 
@ifclear flag


16.4.3 @valueの例

@valueコマンドを,マニュアル更新時に変更する必要がある部分の数を 最小限にするために使用することが可能です.Automakeの配布物を用いた同じ原 理の例とその完全なテキストは,See section C.2 GNUの見本のテキスト.

section `Overview' in The GNU Make Manual)からの適用例は以下のよう になります.

  1. フラグを設定します.

     
    @set EDITION 0.35 Beta
    @set VERSION 3.63 Beta
    @set UPDATED 14 August 1992
    @set UPDATE-MONTH August 1992
    

  2. @copyingセクション(see section 3.3.1 @copying:コピーの許可を宣言する)に対するテキストを書きます.

     
    @copying
    This is Edition @value{EDITION},
    last updated @value{UPDATED},
    of @cite{The GNU Make Manual},
    for @code{make}, version @value{VERSION}.
    
    Copyright ...
    
    Permission is granted ...
    @end copying
    

  3. 印刷されたマニュアルの読者に対し,タイトルページのためのテキストを書きま す.

     
    @titlepage
    @title GNU Make
    @subtitle A Program for Directing Recompilation
    @subtitle Edition @value{EDITION}, ...
    @subtitle @value{UPDATE-MONTH}
    @page
    @insertcopying
    ...
    @end titlepage
    

    (印刷されたカバーでは,月と年だけでなくその日までリストアップした日付で なく,月と年をリストアップした日付でも曖昧ではないでしょう.)

  4. Infoファイルの読者に対し,Topノードに対するテキストを書きます.

     
    @ifnottex
    @node Top
    @top Make
    
    @insertcopying
    ...
    @end ifnottex
    

    マニュアルを書式化後,@valueの構成物は展開されるので,出力物には 以下のようなテキストが含まれています.

     
    This is Edition 0.35 Beta, last updated 14 August 1992,
    of `The GNU Make Manual', for `make', Version 3.63 Beta.
    

マニュアルを更新したとき,フラグの値のみを変更してください.三つのセクショ ンを編集する必要はありません.


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

This document was generated by Akihiro Sagawa on January, 21 2003 using texi2html