[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

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

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

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

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


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

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

上記の例は,以下の行を生成します. また,このテキストはHTMLだけに現れます.

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


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

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を指定してください.

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


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

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

フラグに対する値を指定するために@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 GNUの見本のテキスト.

(make)Top 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 @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.
    

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


[ << ] [ >> ]           [冒頭] [目次] [見出し] [ ? ]

この文書は新堂 安孝によって2009年9月22日texi2html 1.82を用いて生成されました。