異なる出力フォーマットに対し,異なるテキストを使用するのが良いこともあり ます.例えば,印刷されたマニュアルとInfo出力に対し異なるテキストを指定す る,条件コマンド(conditional commands)を使用することができます.
条件コマンドは入れ子状にしてはいけません.
条件コマンドは,以下のカテゴリから成り立ちます.
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
上記の例は,以下の行を生成します. このテキストは,印刷されたマニュアルだけに現れます. @c And this text will only appear in HTML. @c また,このテキストはHTMLだけに現れます. @ifplaintext 但し,このテキストはプレーンテキストだけに現れます. @ifxml そしてこれはXML出力だけに現れます.
読んでいるマニュアルのバージョンに依存して,入力行の一つのみ見えることに 注意してください.
@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 生の書式化コマンド).
@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
$$ \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コマンドを認識することが可能です.)
@set,@clear,そして@value
@set,@clear,@ifset,そして@ifclearコマ
ンドを用いて,直接Texinfo書式化コマンドにTexinfoファイルの一部を書式化さ
せたり無視させたりすることが可能です.
短い説明は以下のとおりです.
@set flag [value]
@clear flag
@ifset flag
@end ifsetコマンドまでのテキ
ストを書式化します.flagがクリアされている場合,次の@end
ifsetコマンドまでのテキストは無視されます.
@ifclear flag
@end ifclearコマンドまでのテ
キストは無視されます.flagがクリアされている場合,次の@end
ifclearコマンドまでのテキストを書式化します.
@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.
@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
@valueの例
@valueコマンドを,マニュアル更新時に変更する必要がある部分の数を
最小限にするために使用することが可能です.Automakeの配布物を用いた同じ原
理の例とその完全なテキストは,See section GNUの見本のテキスト.
section `Overview' in The GNU Make Manual)からの適用例は以下のよう になります.
@set EDITION 0.35 Beta @set VERSION 3.63 Beta @set UPDATED 14 August 1992 @set UPDATE-MONTH August 1992
@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
@titlepage
@title GNU Make
@subtitle A Program for Directing Recompilation
@subtitle Edition @value{EDITION}, ...
@subtitle @value{UPDATE-MONTH}
@page
@insertcopying
...
@end titlepage
(印刷されたカバーでは,月と年だけでなくその日までリストアップした日付で
なく,月と年をリストアップした日付でも曖昧ではないでしょう.)
@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.
マニュアルを更新したとき,フラグの値のみを変更してください.三つのセクショ ンを編集する必要はありません.
Go to the first, previous, next, last section, table of contents.