Select sjis if the characters are not shown properly. Internet Expolorer is the targetted browser.

Outline Documentation Rule For o2h

 $Filename: win-odr.odr $
 $Lastupdate: 2019-05-11 17:58:20 $

この文書は、アウトライン文書処理プログラム o2h に適合するアウトライン文書の書き方を解説するものです。

cbar は、「アウトライン文書作成のための一定の規約」を導入することにしました。o2hは、その規約に従って書かれたアウライン文書を html 文書に変換するためのプログラムです。

アウトライン文書作成のためのこの規約を

    Outline Documentation Rule (ODR)

と呼び、ODR に従って書いた文書を ODR 文書または odr 文書と呼びます。

[TopHdngList] [BodyStart] [Top] [End]

CONTENTS   CONTENTS が閉じられているときでも [Contents] ボタンは有効です。
CONTENTS が閉じられているときに、アウトライン見出しのところに表示 されている [Contents] ボタンをクリックすると、 CONTENTS を表示して、 そのアウトライン見出しに対応している CONTENTS の中の見出しにジャンプします。
この後、CONTENTS は表示されたままになります。
CONTENTS 内の各行の最後に示されている数字は、 そのアウトライン見出し行が文書ファイルの何行目にあるかを表しています。

[ContentsTop]
TOP HDNG LIST ALL HEADING LIST NOTE LIST

[Close TOP HEADING LIST]

ALL HEADING LIST ■はアウトライン見出しのタイトル □はそれ以外
59*1 ■概要 9351, 9354, 10076
61Head □o2h 8499, 8530
153Head □ODR 9862
155Head □ODR 文書 321
167*2 ■RD との類似性
236*3 ■アウトラインモードとアウトライン文書
246Head □アウトライン見出し行 967, 9862
246Head □アウトライン見出し 281, 305, 9862, 9874, 9882
301Head □文章ブロック 9605, 9607
316*4 ■ODR ファイルの型紙と拡張子
319*4.1 ■ODR ファイルの型紙
327Caption □template
412*4.2 ■ODR ファイルの拡張子 9039, 12132
465Anchor □ファイルの種類と startdoc 文 4753
502*5 ■ODR で定める文書環境
513*5.1 ■裸環境
522*5.2 ■パラグラフ
616*5.3 ■字下げ環境 93, 2711
794*5.4 ■リスト環境
807*5.4.1 ■番号付きリスト 5041, 5181
962*5.4.2 ■マーク付きリスト 11943
1059*5.4.3 ■標題付きリスト 592, 7652
1291Caption □標題行の後に空白行を置く例
1334*5.4.4 ■引用環境 (Indentation 環境) 10000
1336Head □引用環境 2445, 4641
1570*5.4.5 ■マイナス記号標題環境 12395
1633*5.4.6 ■マーク付き標題環境 613, 12222
1635Head □マーク付き標題 1836
1749$$ □行頭のマークは $$ ではなく、$ になる
1766■ □行頭のマークは表示されない
1815● □行頭マークが保存されるタイプの標題 10002
1829● □マーク付き標題による拡張見出し 9876, 9888
1866◎ □マーク付き標題行を連続して置く 1190
1871$@ □全角記号を使わないマーク付き標題行 1845
1910■ □マーク付き標題1
1914$# □マーク付き標題a
1936*5.4.7 ■ぶら下げインデント環境 1046, 1688, 8802
2099● □特別なぶら下げインデント環境 1666, 1858, 2100
2185*5.4.8 ■frame 環境 802, 12209, 12436, 12442
2493*5.5 ■特殊環境 804, 6875, 12190
2498*5.5.1 ■@begin, @end 記法 12082
2610*5.5.2 ■左詰め、 DotFlushleft, CommaVerbatim, BoldFlushleft 環境, BigBoldFlushleft 環境
2613$$ □DotFlushleft 環境
2700$$ □CommaVerbatim 環境 697
2766$$ □BoldFlushleft 環境, BigBoldFlushleft 環境
2832$$ □他のリスト環境の中の左詰め
2964*5.5.3 ■中央合わせ 9057
2982*5.5.4 ■右詰め
3018*5.5.5 ■TwocommasVerbatim 環境
3124*5.5.6 ■ThreecommasVerbatim 環境
3226● □ThreecommasVerbatim 環境の見出し
3319*5.5.7 ■FourcommasVerbatim 環境
3438*5.5.8 ■Dashline Display 環境, Onedash Display 環境, Threedashes Display 環境
3595Caption □- で囲んだときの色指定
3602Caption □--- で囲んだときの色指定
3609Caption □,,, で囲んだときの色指定
3616*5.5.9 ■Two dots 記法と行末改行記号
3698*5.5.10 ■@begin{verbatim} ... @end{verbatim} 12075
3989*5.5.11 ■@begin{code} ... @end{code} 6172, 12077, 12204
4242*5.5.12 ■@begin{panel} ... @end{panel} 2541, 12078, 12432
4340*5.5.13 ■@begin{fpanel} ... @end{fpanel} 12079, 12434
4342Hd □fpanel 環境 2213
4425*5.5.14 ■@begin{ignore} ... @end{ignore}
4464*5.5.15 ■@begin{xTable} ... @end{xTable}
4475Head □xTable 環境
4485● □cTable 環境 4469, 4804, 6898, 6928, 6991, 12090
4549Anchor □cTable 環境の使用例 4639, 4939, 6937
4646Anchor □字下げして書いた cTable 環境 4619, 4684
4801● □wTable 環境 4470, 6898, 6939, 6992, 12040
4849Anchor □wTable 環境の使用例 5135, 6947
4911● □tcTable 環境 4471, 6899, 6949, 6993
4942Caption □tcTable 環境の使用例のコード 4930
4996Anchor □tcTable 環境の使用例 6957
5104● □twTable 環境 4472, 6900, 6959, 6994, 12040
5164Anchor □twTable 環境の使用例 6967
5204● □twTable 環境の簡易記法 3695, 7398, 11398, 11851
5386● □tcTable 環境の簡易記法
5437● □subTable 環境 4473, 6969
5446Anchor □subTable 環境の使用例 6979
5455Anchor □色コードと色の対応
5639● □より簡潔な subTable の記述 5539
5718*5.5.16 ■xTable 環境の説明文内の特殊記法
5723Head □bar 5768
5964*5.5.17 ■@begin{html} ... @end{html}
5966Head □html 環境 6897
6144*5.5.18 ■@begin{foo} ... @end{foo} 12389
6177*5.5.19 ■特殊環境のキャプションや注釈 6172, 6411, 12107
6255Caption □sample code
6299Caption □OR検索 6459, 10003
6324Caption □前に置くキャプション
6458● □特殊環境のキャプション $caption による拡張見出し 9877, 9890, 12141
6500● □$caption, $caponly, $endnote の簡易記法 6211, 11934
6568Caption □"panel 環境"の前の見出し
6579*5.5.20 ■特殊環境に前置文字列を置く 12149
6661*5.5.21 ■特殊環境を整形するときに行番号を付加する 3798, 4239
6663Head □行番号を付加 12122
6728*6 ■ODR 文書作成のための記述法
6733*6.1 ■特殊記法
6736*6.1.1 ■セミコロン3個に続く文字列による指定 12125
6780*6.1.2 ■行を継続する 184, 8603
6865*6.1.3 ■小さな目次を埋め込む 12187
6886*6.1.4 ■見出しの一覧 9977
6893*6.2 ■表を書く
6910*6.2.1 ■ODR で用意されている表作成環境
6986*6.2.2 ■html のコードで表を書く
7156*6.3 ■よく使う色の名前とその見本
7200*6.4 ■背景色や文字色を指定する 569
7397● □twTable 環境の簡易記法による表の背景色を $twbgcolor で指定する
7711Caption □code 環境の背景色を指定する
7719Caption □verbatim 環境、vb 環境の背景色を指定する
7727Caption □verbatim 環境、vb 環境の文字色を指定する
7735Caption □panel 環境の背景色を指定する
7741Caption □frame 環境の背景色を指定する1
7750Caption □frame 環境の背景色を指定する2
7760Hd □wTable 環境の背景色の設定 4812, 5133
7834*6.5 ■デフォールトの背景色、フォントの色の指定と一時的変更
7839*6.5.1 ■文書環境の背景色の指定
7989*6.5.2 ■文書環境のフォントの色の指定
8064*6.6 ■数式を書く 767, 8888, 8958, 9897, 12159
8096● □inlineMath
8130● □displayMath
8149Anchor □式(1) 8226, 8888, 8958, 10004
8176Anchor □式(2.1)
8177Anchor □式(2.2)
8192● □AMSmath
8209Anchor □(式3)
8262*6.7 ■区切り線を入れる
8284*6.8 ■同じ環境を異なる記述法で書く
8454*7 ■Emacs 関数 554, 2631, 4481, 4581, 4873, 5041, 8533, 9616
8536*7.1 ■引数の個数による Emacs 関数の分類
8577*7.2 ■Net 関数、File 関数、Folder 関数、FileNet 関数
8580● □Net 関数 178, 689
8626● □File 関数 689
8639● □Folder 関数
8657● □FileNet 関数
8666*7.3 ■Ref 関数 10127
8671● □o2hから見たRef関数の処理
8687● □ODR 文書を編集中にRef関数の記述を評価する(xyzzyでの実行)
8719*7.4 ■Label 関数 10127
8724● □o2hから見たLabel関数の処理
8735● □ODR 文書を編集中にLabel関数を評価する(xyzzyでの実行)
8764*7.5 ■N 関数 8832, 10024, 10027, 12176
8775● □o2hから見た N 関数の処理
8790● □ODR 文書を編集中に N 関数を評価する(xyzzyでの実行)
8798*7.6 ■Note 関数 10024, 10027, 10036, 12177
8805● □Note 関数の形と使用例
8835● □Note 関数と Head 関数が作成する見出しの違い
8840● □ODR 文書を編集中に Note 関数呼び出しを評価する(xyzzyでの実行)
8848● □Note 関数で参照した注釈文が無い場合どうなるか
8854*7.7 ■Head 関数 8932, 8986, 9884, 12152, 12158
8857● □Head 関数の形と使用例
8864Head □Head 関数による拡張見出し 9875, 9884
8873Head □文の途中に書く拡張見出し 9884
8880● □Head 関数と Note 関数が作成する見出しの違い
8885● □数式の参照に Head 関数を利用する
8891● □表を参照するのに、Head 関数を利用する。
8897● □ODR 文書を編集中に Head 関数を評価する (xyzzyでの実行)
8906*7.8 ■Hd 関数 8893, 8932
8911● □o2h から見た Hd 関数の処理
8914Hd □Hd 関数による拡張見出し 9875, 9886
8921● □ODR 文書を編集中に Hd 関数を評価する (xyzzyでの実行)
8929*7.9 ■Anchor 関数 8135, 8886, 12138
8931Anchor □Anchor 関数による拡張見出し 9878, 9895
8962*7.10 ■H 関数 8800, 8875, 9458, 9983, 12182
8968● □o2hから見た H 関数の処理
8990● □ODR 文書を編集中に H 関数を評価する(xyzzyでの実行)
8998● □H 関数で参照した見出し/拡張見出しが無い場合どうなるか
9006*7.11 ■Show 関数 424, 12133
9019● □o2h から見た Show 関数の処理
9028● □ODR 文書を編集中に Show 関数を評価する(xyzzyでの実行)
9038● □拡張子 .odr を導入した理由
9042*7.12 ■Xv 関数
9061Hd □khlogo.png 9068, 10005
9090Hd □京都府の雨雲の動き 9105
9108*7.12.1 ■attachclippedimage 関数 (xyzzy での利用)
9158*7.12.2 ■attachimagefile 関数 (xyzzy での利用)
9210*7.12.3 ■添付ファイルのリスト
9224*7.13 ■Eval 関数、Ruby 関数, RubyDef 関数
9229● □Eval 関数 11051
9289● □Ruby 関数 11051
9323● □RubyDef 関数 164, 11051, 11053, 11112
9365*7.14 ■Html 関数 7823, 9456, 9722
9454*7.15 ■h 関数 9494
9476*7.16 ■Color 関数 7825
9497*7.17 ■Vb 関数
9571*7.18 ■Code 関数 9566
9595*7.19 ■Prev 関数、Next 関数 10111
9611*7.20 ■ピリオド3つを行頭に置く 8477, 9555, 9557
9725*8 ■メールやメモの引用
9784*9 ■文書内を飛び回る
9791*9.1 ■目次と見出しを飛び回る
9858*9.2 ■見出しへのリンクを作成する 8877, 8972
9861● □見出し 1844, 6459, 8808, 8860, 8932, 8987, 12142
9880Head □見出しの種類 9908, 9992
9907● □重複した見出しを使わないようにする
10008● □見出しへのリンク元にジャンプする
10022*9.3 ■注釈と注釈の引用リンクを作成する 12175, 12447
10031● □個別に注釈を置く例
10057● □注釈文を一箇所に纏めて書く例
10097● □注釈文へのリンク元にジャンプする
10109*9.4 ■Prev, Next, Label, Ref 関数を使用してジャンプボタンを配置する
10167*10 ■目次部分の表示に関する指定
10195*11 ■プログラムのソースファイルに ODR 文書を埋め込む 162, 458, 12114
10213*11.1 ■ブロックコメントを利用してソースファイルに ODR 文書を埋め込む
10326*11.1.1 ■lisp プログラムに ODR 文書を埋め込んだ例 409, 10645, 10940
10515*11.1.2 ■プログラムのソースファイルに埋め込む ODR 文書の開始行 10401
10529*11.1.3 ■プログラムのソースファイルの中のソースコードの扱い 10430
10531Head □proglist の指定 3798, 4239, 12117
10639*11.1.4 ■プログラムファイルで、指定した範囲を無視する
10648*11.1.5 ■C# プログラムに ODR 文書を埋め込んだ例
10747*11.1.6 ■Powershell スクリプトに ODR 文書を埋め込んだ例
10861*11.2 ■ブロックコメントがないプログラムソースに ODR 文書を埋め込む
10880*11.2.1 ■バッチ・ファイルに ODR 文書を埋め込む
10893Caption □o2hs.bat 10991
10997*11.2.2 ■uwsc スクリプト・ファイルに ODR 文書を埋め込む例
11046*12 ■ruby スクリプトの ODR 文書への埋め込み 164
11049*12.1 ■ODR 文書本体への ruby スクリプトの埋め込みと利用
11058*12.2 ■補助の ruby スクリプトの読み込み
11061● □文書ファイルのファイル名に .rb を付加した ruby スクリプトの読み込み
11087● □特定の ruby スクリプトの読み込み
11115*13 ■プログラム o2h.rb の呼び出し方 10489
11188*14 ■古い仕様の説明
11193*14.1 ■古い仕様でいまも有効な仕様
11200*14.1.1 ■twTable 環境の簡易記法で、最終行を . で始める (古い書き方)
11228*14.2 ■古い仕様でもう有効でない仕様
11231*14.2.1 ■カンマやピリオド、マイナス記号を置いた行で行を囲む記法
11329*14.2.2 ■標題つきリストの標題で複数の標題
11371*14.2.3 ■標題付き簡約リスト
11401*14.2.4 ■標題付きリスト、標題を書いてから :: を書く古い記法
11455*15 ■問題だと思われる事項で解決した事項
11458*15.1 ■アウトライン見出しの星の数の辻褄をチェックする 12136
11482*15.2 ■Java スクリプトの実行の許可
11501*16 ■未解決の問題
11504*16.1 ■未解決の問題1
11533*17 ■o2h.rb から o2h.exe を作成する方法
11578*18 ■プログラム o2h.rb の更新情報
12347Caption □foobar
12445*19 ■注釈 9987, 10059, 10089, 12162, 12171

[Close ALL HEADING LIST]

NOTE LIST
Note 8461 Emacs 関数 8767, 8965
Note 8817 Note 関数による注釈項目 10042
Note 8823 文の途中に書く Note 関数による注釈項目 10053
Note 12449 Emacs から Xyzzy へ 61, 10094, 12162
Note 12455 DotFlushleft 環境
Note 12459 行頭

[Close NOTE LIST]

[Top] [End] [ContentsTop]

[CTop] [Contents][TopHdngList][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

1 概要

Referred at: [H1][H2][H3]

"o2h" (Referred at: [H1][H2] ) は、その作成者 cbar が、文書を emacs のアウトラインモードで作成していて(Emacs から Xyzzy へ N1)、アウトラインモードで作成した文書を html 文書に変換できたら便利だと考えて、作成したプログラムです。

※ html は、xhtml (XML の規則に従って記述された HTML) に拡張されました。[2017-02-09] に、xhtml に変換するようにしました。

o2h は、Ruby で書かれています。そのプログラムのソースファイルのファイル名は、o2h.rb です。

  $ C:¥Ruby242¥bin¥ruby.exe C:¥bar¥o2h.rb foo.txt > qux.html

のようにして、文書ファイル foo.txt を html ファイル qux.html に変換します。この例では、Ruby をディレクトリ C:¥Ruby242 にインストールしていて、スクリプトファイル o2h.rb をディレクトリ C:¥bar に置いていると仮定しています。シェルのプロンプト記号が $ であるとしています。

ruby に付属のツールを用いてexe 化したプログラム o2h.exe も作成することができます(※)。o2h.rb と o2h.exe を総称して、o2h と呼ぶことにします。

※ exe 化できれば、

   $ o2h.exe foo.txt > qux.html

のようにできます。

html 文書への変換プログラム o2h による処理が容易になるように、文章の書き方に一定の規約を設けます。例えば、パラグラフ環境(詰め込み環境)と字下げ環境(詰め込まない環境)の書き方を、つぎのように定めます。

パラグラフ環境
行頭から書いた一連の行は、パラグラフであり、空白行がきたらパラグラフが終了すると考えます。

字下げ環境
字下げして書いた行は、改行位置を変更せず、そのまま表示します。

しかし、形式だけから文書の構造を特定できない場合もあり、必要に応じて、文書の構造を指定する補助的な記述法も導入します。

例えば、行頭から書いた文は、普通は、パラグラフとして詰め込み処理するものとしますが、行頭から書いて、しかも 字下げ環境 H1と同様に処理して欲しい、つまり、詰め込み処理せずに、そのまま表示して欲しい場合もあります。逆に、字下げして書くけれども、詰め込み処理はして欲しいということもあります。

そこで、字下げしていなくても字下げ環境と同様に処理して欲しい場合は、行頭に ,~ (カンマとチルダ) だけがある行と ,. (カンマとピリオド) だけがある行で囲むことにします。

例を示します

,~
ここは、行頭に ,~ (カンマとチルダ) だけがある行と ,. (カンマ
とピリオド) 
だけがある行で囲まれているので
詰め込み処理
されません。
,.

これは、つぎのように整形されます。

ここは、行頭に ,~ (カンマとチルダ) だけがある行と ,. (カンマ
とピリオド) 
だけがある行で囲まれているので
詰め込み処理
されません。

逆に、字下げして書いているけれども、詰め込み処理して示したいこともあります。

    : 例えば、引用文などは、
    字下げして示しても、詰め込み処理して
    欲しいことがあります。
    そういう場合は、このように引用文の最初を :  一個とその
    後に半角スペースを一個置いた行で書き初めて、
    その後に、同じ字
    下げで文字列を書き並べます。

    ここも
    詰め込まれます。

これは、つぎのように整形されます。

例えば、引用文などは、字下げして示しても、詰め込み処理して欲しいことがあります。そういう場合は、このように引用文の最初を : 一個とその後に半角スペースを一個置いた行で書き初めて、その後に、同じ字下げで文字列を書き並べます。

ここも詰め込まれます。

この文書は、ここで例示したような文書の形式に関する規約、補助的な記法を規定するとともにその使用例を示すものです。

この文書で規定するアウトライン文書の書き方、補助的な記法を、

    Outline Documentation Rule  略して ODR

と呼ぶことにします("ODR" (Referred at: [H1] ) )。

"ODR 文書" Referred at: [H1]
この文書で規定するアウトライン文書の書き方、補助的な記法、Outline Documentation Rule に従って書かれた文書を "ODR 文書" と呼ぶことにします。

ファイルの中の一部分が Outline Documentation Rule (ODR) に従って書かれているということがありえます。そういう場合、ODR 文書がファイルに埋め込まれているという言い方をすることにします。


C++ や C# のソースファイルや バッチファイル、 ruby のスクリプトファイルなどに ODR 文書を埋め込むことができます。コンピュータプログラムのソースコードの中に、ODR に従って書いた注釈のための文書を書くことができ、そこに着目して、コンピュータプログラムのソースコードから、文書を生成することができます。詳しくは、プログラムのソースファイルに ODR 文書を埋め込む H1 を参照してください。

文書ファイルの中に ruby のコードを書いて、また、個人用のrubyスクリプトを文書ファイルに読み込むように文書ファイルの中に書き込むことによって、書き換えプログラムの機能を拡張することができます。詳しくは、RubyDef 関数 H1ruby スクリプトの ODR 文書への埋め込み H1を参照してください。赤い枠で文字列を囲む例も文書ファイルに埋め込んだ ruby コードを利用して書かれています。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

2 RD との類似性

ODR と o2h は、■ RD (Ruby Document Format) と RDtool によく似た仕組みです。RD は良く考えられていて、よく普及しています(#)。

# ここで書いたリンクは、(Net ...) を使って記述されました。(Netで始まる文字列は、特別な意味を持っています。この文書の Net 関数 H1 の項をご覧ください。

また、行末に _ (アンダースコア) があってすぐ改行されていると、その行末のアンダースコアは削除され、次の行が、アンダースコアのあった位置に接続されます。次の行の行頭の半角空白の並びは接続する前に削除されます。この文書の 行を継続する H1 の項を参照してください。

しかし、RD の整形の仕様にはしっくりこないところがあります。

例えば、

:語句A
  語句Aの説明文です。

:語句B
  語句Bの説明文です。

  説明文の間に空白行を入れると、最初の語句説明の文の前に
  空白がとられるのが嫌。
  語句Aとの違いを見てください。

のような項目が

語句A
  語句Aの説明文です。

語句B

     語句Bの説明文です。

     説明文の間に空白行を入れると、最初の語句説明の文の前に空
     白がとられるのが嫌。語句Aとの違いを見てください。

のように整形されます。o2h ではつぎのようになります。

語句A
語句Aの説明文です。

語句B
語句Bの説明文です。

説明文の間に空白行を入れると、最初の語句説明の文の前に空白がとられるのが嫌。語句Aとの違いを見てください。

それくらいだったら、RD の変換プログラムを微修正するだけでもよいのかも知れません。もう改善されているかも知れません。

実は、RD のことを知る前に、この o2h を作り出していたので、o2h をそのまま使っています。o2h は自作なので、細かい仕様を自分用に調整できるので、気に入っています。

できるだけ目立たないで、普通に書いて、きれいに整形されるようにすることを心がけます。

RD 以外にも優れたツールがありますね。reST とか。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

3 アウトラインモードとアウトライン文書

本文書では、Emacs のアウトラインモードで編集することを想定して作成されたテキスト文書を「アウトライン文書」と読んでいます。

Emacs のアウトラインモードの詳細については、Emacs の説明書を御覧ください。

○ アウトライン見出し行の規約

アウトラインモードは、見出し行を元に、文書の構造を把握して、見出し行だけを表示したり、特定の見出し行の下にある文章だけを表示して、他の部分は非表示にするなどの文書作成支援機能を持った編集モードです。文書そのものは、テキストファイルです。

Default では、見出し行は、行頭にいくつかの * があるものとされています。ODR でも、* で始まる行を見出し行と認識し、特に"アウトライン見出し行" (Referred at: [H1][H2] ) と呼びます。アウトライン見出し行の見出しの文字列、行頭の * の並びとその後の半角空白を除いた部分の文字列を "アウトライン見出し" (Referred at: [H1][H2][H3][H4][H5] ) と呼びます。

※ アウトライン見出し行の行頭の * の個数は、5個以下であるとします。

また、行頭の5個以下の * があって、しかも、その後に、半角空白が丁度1個あって、半角空白以外の文字から始まる文字列がある場合に見出し行とみなすことにしました。

したがって、行頭から6個以上の * 印があれば、それはアウトライン見出し行ではありません。また、行頭から * が5個以下並んでいても、その後に、半角空白が丁度1個あって、その後に非空白文字が来るというのでなければアウトライン見出し行ではありません。

ここの例で言えば、「* アウトラインモードとアウトライン文書」と書いてある行(※)がアウトライン見出し行で、「アウトラインモードとアウトライン文書」がアウトライン見出しです。

***

上の行は、アウトライン見出し行ではありません。*** に続くべき、「半角空白1個と非空白文字で始まる文字列」が無いからです。

※ o2h で整形した場合は、「* アウトラインモードとアウトライン文書」と書いてある行の行頭の * は数字に変更されています。

o2h で整形するときに、オプション --noheader を指定すると、見出し行の * を項目番号に変更するという機能は抑制され、見出しだけが表示されます。

○ 終結文見出し行

行頭から、"== enddoc" と書いてすぐ改行した行を「終結文見出し行」と呼びます。終結文見出し行に遭遇すると、ODR 文書は終了したと見做されます。

○ 区切線

Emacs のアウトラインモードの規約とは関係ないのですが、アウトライン見出し H1 または「終結文見出し行」の直前に、行頭から20個以上 - または = が連続してあり、改行コードで終る行は、文章の切れ目を見やすくするために挿入されたものと考えます。

区切線は、入れても入れなくても構いません。区切り線は整形した結果には現れません。

○ アウトライン文書の構成

アウトライン文書は、つぎのような構成をしていると考えます。

  1. 「本文部分」が始まる前の「前文ブロック」。

  2. 「本文部分」を構成する

      「文章ブロック」 = アウトライン見出し行 + 一連の文章

    を並べたもの。

  3. 「本文部分」の後ろにつける「終結文ブロック」。

見出し行に、* abstract と書いてから、文章が書いてあっても、* abstract と書いてある行は、無視されます。「* abstract」以外のアウトライン見出し行が最初に出てきたところから「本文部分」が始まります。

ここで、示したように、アウトライン見出し行と、つぎのアウトライン見出し行が現れるまでの一連の文章を合わせたものを "文章ブロック" (Referred at: [H1][H2] ) と呼ぶことにします。

「本文部分」は、文章ブロックが順番に並べられていて、文章ブロックの先頭に置かれている「アウトライン見出し」の先頭の * の個数によって、文章ブロックの上位・下位の構造が決められます。

アウトライン見出し H2 の先頭の * の個数は、その文章ブロックの前の文章ブロックの見出しの先頭の * の個数と同じか1多いか、あるいは少ないかのいずれかでないといけません。少ない方はいくら少なくても構いませんが、多くなるときは、2以上多いのは誤りであって、書き換えプログラム o2h が、ちょうど1多いように修正し、書き換えた html ファイルの最後のところで、* が多すぎたことを報告します。

「終結文ブロック」は、「== enddoc」と書いてすぐ改行した行 (「終結文見出し行」) で始まる文章ブロックです。終結文ブロックはなくても構いません。終結文ブロックに書かれている文章は無視されます。「== enddoc」と書いてすぐ改行した行に続く行には、何が書いてあっても ODR 文書としては無視されます。行頭から「== enddoc」と書いてすぐ改行した行は、ODR 文書の中に、多くても1度だけ書くことが許されます。

重要な注意
ここで述べたように、「== enddoc」と書いてすぐに改行した行は、「終結文見出し行」です。終結文見出し行は、ODR 文書の中で、一度だけしか書くことができません。後述する文書環境の内側、例えば、code 環境に、このような「終結文見出し行」を書くことも許されていません。

ただし、「== enddoc」と書いてすぐに改行せずに、半角空白文字を行末に追加したりすれば、「終結文見出し行」とは見做されないので、code 環境などの文書環境の内側に書くことができます。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

4 ODR ファイルの型紙と拡張子

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

4.1 ODR ファイルの型紙

ODR 文書 H1 を作成するには、最初、新規に作成したテキストファイルに、つぎのような内容の型紙を挿入して、編集を開始するとよいでしょう。

template
== startdoc
;;; @(#) 文書のタイトル
;;; -*- outline-tree: hierarchy-star -*-
;;;
;;; @(%) $default_fontcolor = "Black"
----------------------------------------------------------
* abstract

この部分は、Contents の前に表示されます。

----------------------------------------------------------
* main body

本文です。

----------------------------------------------------------
== enddoc

;;; Local Variables: ***
;;; mode: Outline ***
;;; fill-column: 66 ***
;;; End: ***

※ panel 環境を使って書いています。背景色は floralwhite です。

型紙の中で、最初の行に == startdoc と書いています。== startdoc と書いてある行は、ファイルの最初の行である必要はありません。== startdoc と書いてある行以降が、ODR 文書として処理されます。

この行 == startdoc と書いている行は、拡張子が .odr のファイルでは不要で、書いても特別な意味を持たず、読み飛ばされます。拡張子が .odr のファイルでは、ファイルの最初の行から ODR 文書として処理されます。

型紙の中で2行目の、@(#) を置いている行には、文書のタイトルを置きます。1桁目に = を置いて、その後に半角1個置いてタイトルを書いても構いません。

3行目の outline-tree: hierarchy-star と書いている部分は、outline-tree の見出し解析スタイルを指定しています。outline-tree は、xyzzy でファイルを編集するときにアウトラインを抽出して操作するプログラムです。ODR 文書を html に変換するときには使わないので、outline-tree を使わないのであれば、3行目の outline-tree: hierarchy-star と書いている部分は必要ありません。

最初の方の @(%) で始まる行は、o2h に対するオプションを指定している行です(※)。

※ 行頭から半角空白文字が0個以上あり、その後、; (セミコロン)を連続して3個以上置き、その後に、" @(%) " を置いた行が読み込まれると、その後の文字列が変換プログラムに書かれていたものとして評価されます。

従って、例えば、

;;; @(%) $tablestyle = "align=center"

のような行があると、o2h がその行を読み込んだ時点で、

$tablestyle = "align=center"

を実行します。

型紙の中の最後の方の ;;; Local Variables: *** で始まる4行は、emacs で編集するときに、アウトラインモードにするための記述です。emacs 以外のテキストエディターを使う場合には、この部分は意味がありません。

enddoc が現れる行以降は、o2h の処理対象外です。ここに補助的な情報を記載しておくことができます。

この型紙を挿入してすぐに o2h で変換した html ファイルを表示すると概略つぎのようになります。

Select sjis if the characters are not shown properly.

文書のタイトル

この部分は、Contents の前に表示されます。

[Body]

CONTENTS

1 main body.

------------------------------------------------------------
[Top] [Last]
------------------------------------------------------------
[Contents]
1 main body

本文です。

------------------------------------------------------------
[Contents] [Top] .

ODR 文書は、プログラムファイルに埋め込むこともできます。lisp プログラムに ODR 文書を埋め込んだ例 H1 を参照してください。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

4.2 ODR ファイルの拡張子

Referred at: [H1][H2]

ODR ファイルはテキストファイルであれば良く、拡張子は .txt にすることもできますが、特にODR文書が格納されていることを明示するときは拡張子を .odr にします。

拡張子が .odr のファイルでは、== startdoc と書いた行は不要です。拡張子が .odr のファイルでは、== startdoc の行があっても、特別な意味はもたず、読み飛ばされます。

※ xyzzy をエディターとして使っている場合、拡張子 .odr を持っているファイルを xyzzy で開くと、編集モードが text mode になるように、.xyzzy につぎのように書いておきます。

(pushnew '("¥¥.odr$" . text-mode) *auto-mode-alist* :test 'equal)

拡張子 .odr を持っているファイルは、「o2h.rb によって htmlファイルに変換して表示されることを意図して作成されている」ことを明示するために使用するものとします。Show 関数 H1 を参照してください。

拡張子が .odr のファイル以外では、テキストファイルであって、

  1. 行頭から

      startdoc

    と書いてすぐ改行された行が現れるか、

  2. 行頭から何か書いてあるかも知れないが、

      startdoc "::|"

    で終わる行 (引用符号の中の文字列は ::| に限らない) が現れる

とその行以降が ODR 文書として処理されます。

拡張子が .txt のファイルでは、1. のルールで、== startdoc と書いた行が必要で、その行の次の行から、ODR 文書が格納されているとして処理されます(※)。

※ ODR 文書を抽出して、それを html ファイルの形に整形するプログラム o2h.rb を動かすことを「処理する」と言っています。

拡張子が .odr であるファイル以外では、1. または 2. の形式の
startdoc と書いた
行が出現しなかったときは、プログラム o2h.rb は、「有効な
ODR 文書が含まれていなかった」というエラーメッセージを表示
して終了します。

2. の形式の startdoc 文はファイルの中で最初に現れたものだけが有効です。

"ブロックコメントの機能を持っている、プログラムのソースファイル"には、ブロックコメントのところに ODR 文書を埋め込むことができ、1. の方法をとることができます。ブロックコメントの機能が使えない場合は、2. の方法を取ることができます。プログラムのソースファイルに ODR 文書を埋め込む H2 を参照してください。

画面トップにスクロール
ファイルの種類と startdoc 文 Referred at: [H1]
ファイルの種類 == startdoc 文の必要性
拡張子 .odr のファイル == startdoc 文は不要です。ファイルの最初の行から ODR 文書として処理されます。
拡張子 .txt のファイル == startdoc 文が必要です。行頭から、== startdoc と書いてすぐ改行してください。 == startdoc 文の次の行から ODR 文書として処理されます。
ブロックコメントの機能があるプログラムのファイル。
例。xyzzy のリスプファイル。拡張子 .l。
== startdoc 文が必要です。行頭から、== startdoc と書いてすぐ改行してください。== startdoc 文の次の行から ODR 文書として処理されます。
ブロックコメントの機能がないプログラムのファイル。
例。バッチ・ファイル。拡張子は .bat。
== startdoc "..."
の形の文が必要です。"..." の部分は、行頭に置く、行コメントであることを示す文字列です。バッチ・ファイルの場合、例えば、
::| == startdoc "::|"
と書きます。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

5 ODR で定める文書環境

ODR では、アウトライン文書を、「文書環境」の集合と見なします。「文書環境」とは、つぎの環境のいずれかです。

いくつかの文書環境は、階層的に別の文書環境を含むことができます。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

5.1 裸環境

裸環境は、文書が始まったときの "素" の状態の文書環境です。

最初、文書は裸環境にありますが、例えば、一連の、行頭から始まる行があると、パラグラフが始まったと認識します。一連の、行頭から始まる行が空白行で終ると、また裸環境に戻ると考えます。

パラグラフに限らず、裸環境にあるときに、裸環境以外の環境が始まり、その環境が終了すると、裸環境に戻ると考えます。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

5.2 パラグラフ

行頭から始まる行を空白行を挟まないで並べたものはパラグラフを構成します。パラグラフでは、行の長さが不揃いでも、o2h を使ってhtml 文書に変換して表示すると詰め込み処理されます。

空白行または他の環境の開始を検知すると、パラグラフが終了したと判定します。

パラグラフの中では、各行は前の行に詰め込まれるのが基本ですが、行頭に .. (ピリオド2つ) があって、その後に半角空白を1個以上置いて書いた行は、前の行に詰め込まれません。

たとえば、このつぎの行は
.. 詰め込まれません。
ただし、後に続く行は詰め込まれます。

と書いておくと、つぎのようになります。

たとえば、このつぎの行は
詰め込まれません。ただし、後に続く行は詰め込まれます。

また、行末に [br] が複数個あって、その後すぐに改行されていると、[br] の個数分の改行コードが挿入されます。

行末に [br] 記号があるとそこで改行されます。[br][br]
ここから新しい行が始まりま。

は次のように整形されます。

行末に [br] 記号があるとそこで改行されます。

ここから新しい行が始まります。

パラグラフでは、後述する Emacs 関数 H1 を使用できます。Emacs 関数を使えば、例えば、 (h CO<sub>2</sub> /h) のように記述すれば、整形したとき、 CO2 と表示されます。 (h CO<sub>2</sub> /h) が Emacs 関数の例です。

これに対して、字下げ環境では、Emacs 関数はソースのまま表示されます。

  ここは字下げ環境です。(h CO<sub>2</sub> /h)

パラグラフの中では、連続する複数の半角空白文字は半角空白文字1個に置き換えられるようです。たとえば、( )、この前の括弧の中には半角空白文字を10個置いていますが、半角空白文字は1個しかないように整形されます。

○ パラグラフの背景色を指定する

パラグラフに背景色を指定する方法については、背景色や文字色を指定する H1を参照してください。

○ パラグラフに標題を付ける

::ソマリア
ソマリアの公式国名を「ソマリア民主共和国(Somali Democratic 
Republic)」とする場合が多かったが、これはモハメド・シアド・バ
ーレ政権下で「ソマリア民主共和国憲法」が有効であった時期の国名
である。
.::

と書いて(※)、つぎのように整形されます。

ソマリア
ソマリアの公式国名を「ソマリア民主共和国(Somali Democratic Republic)」とする場合が多かったが、これはモハメド・シアド・バーレ政権下で「ソマリア民主共和国憲法」が有効であった時期の国名である。

※ ここで、標題付きリスト H1を利用しています。標題付きリストの説明文の部分はパラグラフとして処理されます。これを利用しています。.:: は説明部分の終わりを指定しています。.:: の代わりに ::. と書くことはできません。

〓ソマリア
ソマリアの公式国名を「ソマリア民主共和国(Somali Democratic 
Republic)」とする場合が多かったが、これはモハメド・シアド・バ
ーレ政権下で「ソマリア民主共和国憲法」が有効であった時期の国名
である。

と書いても似たように整形されます。

ソマリア
ソマリアの公式国名を「ソマリア民主共和国(Somali Democratic Republic)」とする場合が多かったが、これはモハメド・シアド・バーレ政権下で「ソマリア民主共和国憲法」が有効であった時期の国名である。

※ 〓を書いたこの例は、マーク付き標題環境 H1 を利用しました。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

5.3 字下げ環境

Referred at: [H1][H2]

行頭から文字を書かずに、1個以上の半角空白を置いて書いた一連の行は、字下げ環境を構成します。字下げ環境の例を、次に示します。

   ここは、
   字下げして書いて
   いるので、字下げ環境にあります。

つぎに別の環境が来ると字下げ環境が終了します。

   字下げ環境


   の間に空白行を置くことができ
   ます。

字下げ環境の間に空白行を置くことができます。o2h は、字下げ環境の中で、空白行を読み取ったときに、字下げ環境が終了したかどうかの判定を保留していて、つぎに字下げ環境以外の行を読みとったと判定した場合、字下げ環境が終了したと判定します。また、いくつかの空白行を読みとった後で、再び字下げ環境が再開されたと判定したら、それらの空白行は、一連の字下げ環境の中の空白行として処理されます。

ただし、字下げして書き出されていても、それが特定の形をしているときは、字下げ環境とは見做されないことがあります。番号付きリストやマーク付きリストなどのリスト環境もその例です。リスト環境について詳しくは、この次の節で説明しますが、先行して簡単なマーク付きリストの例を示します。

    * これはマーク付きリストの例です。字下げして書かれていますが、
      行頭に * があって、その後に半角空白が1個あって、
      その後に文字列が書かれているので、
      字下げ環境ではなくて、
      リスト環境の一つのマーク付きリストであると判定されます。

こんな風に書かれていると、字下げして書かれていても、その形から、リスト環境であると判定されて次のように整形されます。

詳しくは、後述するリスト環境の説明を参照していただくとして、そのリスト環境の中に字下げ環境を置くことができます。その場合、「行頭」とは、リスト環境の字下げ位置を意味します。

リスト環境のひとつのマーク付きリストの例の中に書いた、リスト環境の中でのパラグラフ、字下げ環境の説明を参照してください。

例を示します。

 * これはマーク付きリストの本文です。この本文の部分は、o2h で、
   整形すると詰め込み処理されます。パラグラフと同様に詰め込
   まれ、Emacs 関数の置き換え操作が実行されます。
   
     マーク付きリストの本文部分の書き出し桁位置より
     字下げして書くと
     そこは字下げ環境として処理されます。
     
   字下げ環境の後に、前と同じパラグラフの書き出し桁位置と同じと
   ころから書き出した文は、パラグラフとして処理されます。
   
 * つぎのマーク付きリストの項目の本文です。

と書いて、つぎのように整形されます。

字下げ環境は、そのまま表示され、詰め込み処理されません。後述する File 関数 H1Net 関数 H2 が字下げ環境の中に記述されている場合でも 置き換え処理 されません。

字下していなくても字下げ環境と同様に処理して欲しい場合、つまり、詰め込み処理せず、置き換え処理もして欲しくない場合は、行頭に ,~ (カンマとチルダー) だけがある行と ,. (カンマとピリオド) だけがある行で囲みます。

※ 行頭に ,~ (カンマとチルダー) だけがある行と ,. (カンマとピリオド) だけがある行で囲んだ環境をCommaVerbatim 環境 H1 と呼びます。

,~
ここは、行頭に ,~ (カンマとチルダー) だけがある行と
,. (カンマとピリオド) だけがある行で囲まれているので
詰め込み処理
されません。(h CO<sub>2</sub> /h) は置き換え処理されません。
,.

これは、つぎのように整形されます。

ここは、行頭に ,~ (カンマとチルダー) だけがある行と
,. (カンマとピリオド) だけがある行で囲まれているので
詰め込み処理
されません。(h CO<sub>2</sub> /h) は置き換え処理されません。

行頭に ,~ (カンマとチルダー) がある行と、行頭に ,. (カンマとピリオド) がある行で囲まれている間は、行頭の半角空白はそのまま表示されます。

,~
ここは、行頭に ,~ (カンマとチルダー) だけがある行と
,. (カンマとピリオド) だけがある行で囲まれています。
    ここは行頭に半角空白が4個あり、
詰め込まれません。(h CO<sub>2</sub> /h) は置き換え処理されません。
,.

は、つぎのように整形されます。

ここは、行頭に ,~ (カンマとチルダー) だけがある行と
,. (カンマとピリオド) だけがある行で囲まれています。
    ここは行頭に半角空白が4個あり、
詰め込まれません。(h CO<sub>2</sub> /h) は置き換え処理されません。

一行だけ字下げ環境で示したいときは、行頭に , (カンマ)を置いてその後に、半角空白を1個以上置き、その後に文字列を書きます。

つぎに別の環境が来ると字下げ環境が終了します。
,   ここは字下げ環境として処理: (h CO<sub>2</sub> /h)
したらどうなる?

はつぎのように整形されます。

つぎに別の環境が来ると字下げ環境が終了します。
  ここは字下げ環境として処理: (h CO<sub>2</sub> /h)
したらどうなる?

字下げ環境の中で、一行だけ特別に Emacs 関数による置き換えをしたい場合は、字下げした後の最初のカラムに、. (ピリオド)を置いてその後に Emacs 関数を使った文字列を置きます。例を示します。

  ここは字下げ環境です。
  . (Net "foo")    y = a (h x<sup>2</sup> /h) + b x + c
  ここはまた字下げ環境です。

はつぎのように整形されます(※)。

  ここは字下げ環境です。
  foo    y = a x2 + b x + c
  ここはまた字下げ環境です。

※ 数式を書くには、\(y = ax^2 + bx + c\) のように書くという方法があります。数式を書く H1 を参照してください。

○ 字下げ環境の背景色を指定する

字下げ環境の背景色を指定するには、字下げを指定するコロンの後に、色を /beige/ のように // で囲んで指定します。

   : /beige/
   ,~
   ここは字下げ環境です。
   背景色は、字下げを指定する : の後に、/beige/ のように
   色名を // で囲んで指定しました。
   ,.
   ::

のように書いて次のように整形されます。

ここは字下げ環境です。
背景色は、字下げを指定する : の後に、/beige/ のように
色名を // で囲んで指定しました。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

5.4 リスト環境

o2h は、箇条書きのためのつぎのような環境を認識できます。

これらのリスト環境は、「説明文」を書く部分を持っていて、その部分は、詰め込み処理されます。詰め込み処理される部分に、また、入れ子にして、これらのリスト環境を置くことができます。

frame 環境 H1 も、frame 環境や他のリスト環境を入れ子にすることができるので、リスト環境に含めてここで説明します。

後で述べる特殊環境 H1 は、それ自身で完結している文章のかたまりで、ここで解説するリスト環境のように、入れ子にして他の文書環境を含むということがないものを扱います。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

5.4.1 番号付きリスト

Referred at: [H1][H2]

元の文書ファイルに

1. 何個かの空白の後に、数字または英文字(英文字の場合は
   1字)を書き、
   その後にピリ
   オッドを置いて、半角空白を1個置き、
   非空白文字で始まる文字列
   を置いた行は、番号付きのリストと解釈されます。

のように書いてあると、つぎのように整形されます。o2h で整形すると詰め込み処理されます。

  1. 何個かの空白の後に、数字または英文字(英文字の場合は 1字)を書き、その後にピリオッドを置いて、半角空白を1個置き、非空白文字で始まる文字列を置いた行は、番号付きのリストと解釈されます。

ピリオッドの後に半角空白をちょうど1個置くというところも重要で、半角空白を2個以上置くと、番号付きリストとみなされません。これは、番号付きリストとみなされたくないときに、ピリオッドの後に半角空白を2個入れるというように利用できます。

番号付きのリストの中に、字下げした環境を置くことができます。例えば、

  2. 番号付きのリストの中に、
     字下げした環境を置くことができます。

       ここは、字下げした環境であって、
       詰め込まれません。
       
       : コロンで始めると
       詰め込みされるような文章を
       書くことができます。

     ここは、番号付きの
     リストの文章のつづきとして詰め込み処理されます。

と書いてあると、つぎのように整形されます。

  1. 番号付きのリストの中に、字下げした環境を置くことができます。

      ここは、字下げした環境であって、
      詰め込まれません。

    コロンで始めると詰め込みされるような文章を書くことができます。

    ここは、番号付きのリストの文章のつづきとして詰め込み処理されます。

字下げした環境の後に、その前のパラグラフと同じ字下げ位置から書かれた一連の行が詰め込み処理されていることに注意してください。

番号付きのリストの中に、別のリスト環境を置くことができます。

  3. 番号付きのリストの中に、別のリスト環境を置くことができま
     す。

        * リスト環境の中にリスト環境を置くことが
          できます。
        * マークつきリストは、行を詰めて置けば、
          詰めて表示されます。

は、つぎのように整形されます。

  1. 番号付きのリストの中に、別のリスト環境を置くことができます。

    • リスト環境の中にリスト環境を置くことができます。
    • マークつきリストは、行を詰めて置けば、詰めて表示されます。

番号付きリストの番号は、元文書で使用されている番号がそのまま使用されます。番号欄には、英小文字も使用できます。

  4. 番号付きリストの番号は、元文書で使用されている番号がそ
     のまま使用されます。番号欄には、英文字も使用できます。

       a. ここでは、英小文字を使用しています。
       b. いまのところ、番号欄には、
          英小文字1字か英大文字1字か数字以外は書けません。

  6. 見出しのところに英大文字も使えます。

       A. ここでは英大文字を使用しています。
       B. いまのところ、番号欄には、
          英小文字1字か英大文字1字か数字以外は書けません。

  7. 番号付きリストもつめて書けます。
  8. 前の行との行間に注意。

のように書いてあると、つぎのように整形されます。

  1. 番号付きリストの番号は、元文書で使用されている番号がそのまま使用されます。番号欄には、英文字も使用できます。

    1. ここでは、英小文字を使用しています。
    2. いまのところ、番号欄には、英小文字1字か英大文字1字か数字以外は書けません。

  2. 見出しのところに英大文字も使えます。

    1. ここでは英大文字を使用しています。
    2. いまのところ、番号欄には、英小文字1字か英大文字1字か数字以外は書けません。

  3. 番号付きリストもつめて書けます。
  4. 前の行との行間に注意。

このように番号 5 が抜けていても、振り直されるということはありません。

RD との互換性のために、

(1) このような形の番号付きリストも受け付けることにしました。
(2) 数字を両括弧で囲みます。

の形の番号付きリストを受け付けることにしました。番号は半角で書き、前後の括弧()は、半角で書かないといけません。右括弧の後に半角空白を1個置いてください。

(1) このような形の番号付きリストも受け付けることにしました。
(2) 数字を両括弧で囲みます。

この他の形では、番号付きリストとは認識しません。a.1, 1.a のように数字と英字を. でつないだ番号を使うことはできません。

整形のメカニズムは違いますが、1.1 や 1.1.1 のような番号も使えます。

1.1 このように、[0-9]+(¥.[0-9]+)+ にマッチする文字列
    があってその後に半角空白があり、その後に文字列が来るも
    のを番号付きリストのように整形できます。
    
1.2 数字と.だけが許されます。1.a のように、英字を使うことは
    できません。

は、つぎのように整形されます。

1.1 このように、[0-9]+(¥.[0-9]+)+ にマッチする文字列があってその後に半角空白があり、その後に文字列が来るものを番号付きリストのように整形できます。

1.2 数字と.だけが許されます。1.a のように、英字を使うことはできません。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

5.4.2 マーク付きリスト

Referred at: [H1]

行頭から0個以上の空白を空けて、* または ** または ++ を置き、その後に半角空白文字を1個置いて、本文を書き始めると、マーク付きリストの開始行であると認識されます (※)。

※ マーク付きリストの始まりとして、* または ** を書く場合、行頭に半角空白を置かずに書くと、アウトライン見出し行 H1 と判定され、マーク付きリストとは判定されません。これは、構文を解析するときに、見出し行の解析が先に実行されるためです。++ を書く場合は、行頭から書いても見出し行と判定されることはありません。

マーク付きリストの開始行とするために、* または ** または ++ を置いた後で本文の前に置く半角空白の個数は丁度 1個でないといけません。半角空白を置かなかったり、半角空白を2個以上置いたりすると、マーク付きリストの開始行だと認識されません。

例えば、

++ 番号付きのリストと同様にマーク付きリストを使用することが
   できます。

++ マークとして、* または ** または ++ が使用できます。

   *  または ** を、その前に半角空白文字を置かずに行頭から書
   くと、マーク付きリストの開始行と認識されず、outline 文書
   の見出し行であると認識されます。マーク付きリストの開始行
   という意味で、*または、** を使う場合は、一個以上の空白を
   置いてから、* または **  の前に半角空白を1個以上置いてく
   ださい。
   
   マークとして、++ を使う場合は、行頭から書いても構いません。
   
   (*1個だけ + を置いても、マーク付きリストの開始行とは認識
   され_ません*)ので注意してください。数式などで、+ 1個が行
   頭に来ることがよくあるので、+ を一個だけ置いた場合は、マ
   ーク付きリストと認識されないようにしています。

++ マークつきリストをいれこにして使用することができます。
   例を示します。

   ** 内側のマークつきリストです。
      * さらに深いマーク付きリストです。
      * マークとして、* を再度利用できます。
   ** 連続
   

は、つぎのように整形されます。

☆ 厳密に言えば、マーク付きリストとして実現されているのではないのですが、マークとして、□、#(全角)、☆、★、※、#(半角)を使うこともできます。

# マークとして、□、#(全角)、☆、★、※、##(半角#2個) を使う方法は、マークとして、++、*、** を使う方法とは異なる方法で、具体的に言うと、ぶら下げインデント環境 H1 と同じ仕組を使って実装されています。

# 半角のシャープ記号2個を使うマークは、英語モードでも利用できるものとして導入しました。整形したときには、# は1個だけ表示されます。

# The mark string "##" was introduced for the english mode. The mark string "##" is changed to "#" when the sentence is formatted.

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

5.4.3 標題付きリスト

Referred at: [H1][H2]

行頭から0個以上の半角空白を置き、: (コロン一つ) または :: (コロ<ン2つ) を書いて、その後、空白を空けずに続けて文字列を書いて改行した行は、標題付きリストの開始行と判定されます。: (コロン一つ) ではなく :: (コロ<ン2つ) で始めた場合は、標題をボールドで書くことを指定したものと見なします。説明文はそのつぎの行から書き出します。

例を示します。

@begin{frame}{bgcolor: beige} ------------------------------
:標題
    ここに説明を書きます。
    詰めこまれます。
    
    一行空けてこの行を書いています。

::ボールドで書く標題
    このように標題部分を ::  (コロン2つ)で始めると標題はボール
    ドで表示されます。
::{:foo}
    このようにコロンで始まる標題を扱いたいときは、標題部分を
    {} で囲んで、::{:foo} のように書きます。
::{{foo}}
    {} で囲むと、{} で囲まれた文字列が標題として表示されます。
    ここでは、標題部分は、::{{foo}} と書いています。
::説明文がない項目
    .::
::連続する標題1
::連続する標題2
    標題部分を連続させることができます。
@end{frame} ------------------------------------------------

は、つぎのように整形されます。

標題
ここに説明を書きます。詰めこまれます。

一行空けてこの行を書いています。

ボールドで書く標題
このように標題部分を :: (コロン2つ)で始めると標題はボールドで表示されます。
:foo
このようにコロンで始まる標題を扱いたいときは、標題部分を {} で囲んで、::{:foo} のように書きます。
{foo}
{} で囲むと、{} で囲まれた文字列が標題として表示されます。ここでは、標題部分は、::{{foo}} と書いています。
説明文がない項目
連続する標題1
連続する標題2
標題部分を連続させることができます。
整形したときに、説明部分の字下げ量は、実際のソーステキストの字下げ量に一致するようにとられます。上の例では、標題の書き出し位置から半角4文字分追加した位置から説明文が書かれているので、それに合わせて、整形した説明文も半角4文字分だけ字下げして書かれています。

説明文の部分は、詰め込み処理されます。

標題を書いた行の次に空白行を置くことはできません。標題のみ書いて、説明文がない場合は、説明文のところに、.:, .::, .::: などを書いてください。「説明文がない項目」の標題のところがその例です。


標題付きリストの標題の書き出し位置は、行頭でなくても構いません。字下げして書き出された場合は、整形したとき、その字下げ量だけ字下げして標題が書き出されます。

  ::標題
      ここの標題は半角2文字だけ字下げして書き出されます。

は、つぎのように整形されます。

標題
ここの標題は半角2文字だけ字下げして書き出されます。

::標題1
::標題2
::標題3
      このように、
      標題部分を複数行に分けることができます。

これで、つぎのように整形されます。

標題1
標題2
標題3
このように、標題部分を複数行に分けることができます。

標題付きリストの始まりの行は、その前の行と少しスペースをとって書きだされていました。o2h.rb の Version 2.20 以降では、標題付きリストの標題の上に余分な余白をとらないようにしました。

(h <span style="font-size: small">/h)[2017-08-16] 標題の
直前に小さな字で補足説明を挿入できるようになりました。
(h </span>/h)
::標題の前に小さな字で説明を挿入
  標題の前に余分な空白を取らなくなったので、
  このような整形も簡単にできるようになりました。

と書いて次のように整形されます。

[2017-08-16] 標題の直前に小さな字で補足説明を挿入できるようになりました。
標題の前に小さな字で説明を挿入
標題の前に余分な空白を取らなくなったので、このような整形も簡単にできるようになりました。

標題部分だけを並べてリストを作成することができます。

:::大きいフォントの標題
::ゴシックの標題
:普通の書体の標題

このように、標題部分だけを並べることができます。

これでつぎのように整形されます。

大きいフォントの標題
ゴシックの標題
普通の書体の標題
このように、標題部分だけを並べることができます。

マーク付き標題行を連続して置く H1 も参考にしてください。

標題を置いた行に続いて、すぐに直下の標題付きリストを置くと、どのように整形されるか、同位の標題付きリストが連続したときにどのように表示されるかを示します。

例を示します。

::上位の標題
  :下位の標題1
    下位の標題1に対応する本文。
  :(Color "red" "下位の標題2")
    下位の標題2に対応する本文。

  :下位の標題3
    下位の標題3に対応する本文。

  上位の標題に
  対する本文。ここは詰め込まれます。

これは次のように整形されます。

上位の標題
下位の標題1
下位の標題1に対応する本文。
下位の標題2
下位の標題2に対応する本文。

下位の標題3
下位の標題3に対応する本文。

上位の標題に対する本文。ここは詰め込まれます。

※ o2h の以前の版では、標題を置いた行に続いて、「下位の標題1」で始まる文のように、直下に標題付きリストを置くと、直下の標題付きリストの標題の前に空白行が置かれていました。

o2h の version 2.20 以降で整形すると、この例の「下位の標題1」の前に空白行が入らないようになりました。

説明文の書き出し位置を標題部分の書き出し位置と同じにすることもできますが、説明文の終わりの位置がわかりにくくなります。そうした場合 .:、.::、.::: (※) を標題部分の書き出し位置と同じ字下げで置けば、説明文の終わりの位置を明示できます。

※ 説明文の終わりの位置を指定する記号として :., ::., :::. (コロン1個、2個あるいは3個の後にピリオド)を採用せずに、.:, .::, .::: (ピリオドの後にコロン) を採用したのは、:、::、::: (コロン1個、2個あるいは3個コロン) の後に、. (ピリオド) から始まる文字列を置くのを許すためです。

++ 標題と説明文の書き出し位置を制御する例。
  
     ::説明文の書き出し位置
     標題部分に続く説明文は、標題部分の字下げ位置よりも1個以
     上 半角空白を余分に置く字下げ位置から書くのをお薦めし
     ます。

     その方が、説明文の終わりが分かりやすくなります。とはいえ、
     説明文を標題部分の同じ桁位置から書き出すこともできます。

     ここの例では、標題部分の字下げ位置と同じ字下げ位
     置から書き出してしまっています。
     .::

     ここは
     詰め込まれません。

   ここは
   詰め込まれます。

と書いて、つぎのように整形されます。

標題行の後に空白行を置くことはできません。

標題行の後に空白行を置く例
::標題

ここは説明文ではありません。

のように書いた場合、これは標題付きリストとはみなされません。この場合、「::標題」の部分は、単に「標題」をゴシックで表示するために置かれていると解釈します。

標題

ここは説明文ではありません。

あまり無いかも知れませんが、標題つきリストにするのではなくて、ただ行頭に : (コロン) が来るような文章を書きたいときにはどうするか。たとえば、

:option は、オプションを
指定しています。

のような文です。このような場合は、: の前に ¥ を置いて、

¥:option は、オプションを
指定しています。

と書きます。これで、つぎのように整形されます。

:option は、オプションを指定しています。

... :option は、
オプションを指定しています。

と書いても、行頭に : (コロン) が来るような文章を書くことができて、つぎのように整形されます。

:option は、オプションを指定しています。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

5.4.4 引用環境 (Indentation 環境)

Referred at: [H1]

"引用環境" Referred at: [H1][H2]
行頭から空白文字を0個以上置き、その後に : と丁度1個の半角空白を置き、その後に、半角空白以外の文字列を置いた場合、引用環境(latexで言えば、quote 環境)の始まりとして整形します。ODR では、Indentation 環境とも呼ぶことにします。

「字下げ環境」では詰め込まれせんが、「引用環境」では文章が詰め込まれます。

例を示します。

  : (注) ここの部分は、
  字下げして、しかも
  詰めこまれます。: (コロン) のある行と同じだ
  け字下げした一連の行は、引用環境として扱われます。
  
  ここも同じ引用環境の続き
  です。

これは、つぎのように整形されます。

(注) ここの部分は、字下げして、しかも詰めこまれます。: (コロン) のある行と同じだけ字下げした一連の行は、引用環境として扱われます。

ここも同じ引用環境の続きです。

これは、つぎのように書いても同じように整形されます。コロンだけを置いて、引用環境の始まりであることを示し、文章はつぎの行から書いています。

  :
  (注) ここの部分は、
  字下げして、しかも詰めこまれます。: のある行と同じだけ字下
  げした一連の行は、引用環境として扱われます。
  
  ここも同じ引用環境の続き
  です。

引用環境を開始した後、引用環境を開始したときの字下げ量より小さい字下げ量で開始する別の環境が始まれば、引用環境は終了します。通常は、このルールにしたがえばよく、引用環境の終了を指定しないといけないことはあまりありませんが、明示的に引用環境を終了したい場合は、同じ字下げ量で、". :" (ピリオド、半角空白、コロン) を書いてすぐ改行するようにします。そうすれば、引用環境を終了することができます。

※ ". :" のピリオドとコロンの間に半角空白を1個置くことは重要です。".:" のように、ピリオドとコロンを続けた場合は、標題付きリストで、標題部分を :標題の形で始め、説明文の書き出し位置を標題部分の書き出し位置と同じにしたときに、説明文の終わりの位置を明示するのに使用します。

標題abc
標題abcに対する説明文をここに書いています。
ここは、標題abcに対する説明文には含まれません。

例を示します。

  : 引用環境が開始しました。
  字下げして、しかも詰めこまれます。: のある行と同じだけ字下
  げした一連の行は、引用環境として扱われます。
  . :
  
  ここは、
  別の環境です。

これはつぎのように整形されます。

引用環境が開始しました。字下げして、しかも詰めこまれます。: のある行と同じだけ字下げした一連の行は、引用環境として扱われます。

  ここは、
  別の環境です。

「ここは、」と書いた行のつぎの行の「別の環境です。」が詰め込まれていない点に注意してください。

もしも . : (ピリオド、半角空白、コロン) を入れずに、

  : 引用環境が開始しました。
  字下げして、しかも詰めこまれます。: のある行と同じだけ字下
  げした一連の行は、引用環境として扱われます。
  
  ここは、
  別の環境です。

と書いていれば、引用環境が継続するので、つぎのように整形されます。

引用環境が開始しました。字下げして、しかも詰めこまれます。: のある行と同じだけ字下げした一連の行は、引用環境として扱われます。

ここは、別の環境です。

コロン : ひとつを使うときの構文判定をまとめます。

  1. 文の途中に、コロン : がひとつ現れる場合は、それだけで、特定の構文の開始行と判定されることはありません。

  2. 文頭から半角空白文字が0個以上あって、その後に : があってすぐ改行されていれば、引用環境の開始行です。

  3. 文頭から半角空白文字が0個以上あって、その後に : があって、その後に半角空白があると、引用環境の開始行です。

    : この行は、引用環境の開始行
    です。
    

    は、つぎのように整形されます。

    この行は、引用環境の開始行です。

  4. 文頭から半角空白文字が0個以上あって、その後に : があって、その直後から非空白文字があるときは、「標題つきリスト」の標題部分である可能性があります。

    :標題部分    
        直前の行は「標題つきリスト」の標題行です。
    

    は、つぎのように整形されます。

    標題部分
    直前の行は「標題つきリスト」の標題行です。

引用環境を開始するときに背景色を指定することができます。

: /beige/
明るい世を望むなら、
真っ先に自分が明るくなることだ。

チャンスなんて来はしない。
欲しければ手作りして自分で持参せよ。
. :

のように書くとつぎのように整形されます。

明るい世を望むなら、真っ先に自分が明るくなることだ。

チャンスなんて来はしない。欲しければ手作りして自分で持参せよ。

背景色とともに、文字色を指定することもできます。

: /beige, blue/
このように、背景色の指定の後に、カンマを置いて、文字色を指
定することもできます。

この例では、背景色は beige で、文字色は blue です。

背景色を指定せずに、文字色を指定したい場合は、/, blue/ の
ように背景色の指定の部分には何も書かずに、カンマを置いて文字色
を指定します。
. :

このように、背景色の指定の後に、カンマを置いて、文字色を指定することもできます。

この例では、背景色は beige で、文字色は blue です。

背景色を指定せずに、文字色を指定したい場合は、/, blue/ のように背景色の指定の部分には何も書かずに、カンマを置いて文字色を指定します。

色指定の後に、「太線」を置くこともできます。

: /beige/ ━━━━━━━━━━━━━━━━━━━━━━━━
明るい世を望むなら、
真っ先に自分が明るくなることだ。

チャンスなんて来はしない。
欲しければ手作りして自分で持参せよ。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
. :

と書くと次のように整形されます。


明るい世を望むなら、真っ先に自分が明るくなることだ。

チャンスなんて来はしない。欲しければ手作りして自分で持参せよ。

少し小さい字で書く環境を置きたいときは、

: (h <span style="font-size: small">/h)
ここは字下げして(実際には字下げなし)、小さい字で書かれます。

1. : の後に、字を小さくする命令 
   =(h <span style="font-size: small">/h) を書いています。

2. 字を小さくする命令の効果を終える命令
   =(h </span>/h) を書いています。
(h </span>/h)
. :

のように書きます。これでつぎのように整形されます。

ここは字下げして(実際には字下げなし)、小さい字で書かれます。

  1. : の後に、字を小さくする命令 (h <span style="font-size: small">/h) を書いています。

  2. 字を小さくする命令の効果を終える命令 (h </span>/h) を書いています。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

5.4.5 マイナス記号標題環境

Referred at: [H1]

---- Don't waste any moment easily because learning is 
     hard and boys grow old easily.

     少年老い易く学成り難し、一寸の光陰軽んずべからず

のように書いて、つぎのように整形されます。

---- Don't waste any moment easily because learning is hard and boys grow old easily.

少年老い易く学成り難し、一寸の光陰軽んずべからず

行頭から - 記号を4個連続して書き、その後に半角空白を1個置いて、その後に非空白文字を置いて書きだした段落を標題部分とし、空白行を1行置いて、左端から半角空白を5個字下げした段落を説明文とします。説明文の部分がなくても構いません。

※ 行頭から - 記号を4個連続して書いたとしても、その後に半角空白を丁度1個置いて、その後に非空白文字を置いて書きださなかれば、マイナス記号標題環境とは認識されません。

標題部分に複数行にわたる長い標題を書くことができるのが特徴です。標題部分で、改行位置を指定することもできます。

---- Don't waste any moment easily [br]
     because learning is hard and boys grow old easily.

     少年老い易く学成り難し、一寸の光陰軽んずべからず

は、つぎのように整形されます。

---- Don't waste any moment easily
because learning is hard and boys grow old easily.

少年老い易く学成り難し、一寸の光陰軽んずべからず

マイナス記号4つを書き出す位置は、このマイナス記号標題環境が置かれる環境のインデントの位置に書いてください。このようにパラグラフ環境の中では文字通り行頭からかいてください。リスト環境で使うときは、そのリスト環境のインデントの位置から書いてください。

 * このようにマーク付き環境のときの中に配置するときは、マイ
   ナス記号標題環境は、そのインデントの位置から書き出してく
   ださい。
   
   ---- Don't waste any moment easily [br]
        because learning is hard and boys grow old easily.

        少年老い易く学成り難し、一寸の光陰軽んずべからず

と書いて、つぎのように整形されます。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

5.4.6 マーク付き標題環境

Referred at: [H1][H2]

"マーク付き標題" (Referred at: [H1] ) とは

01: ◇ 標題
02: ◆ 標題
03: ○ 標題
04: ● 標題
05: ◎ 標題
06: $* 標題
07: $$ 標題
08: $@ 標題
09: ■標題
10: $#標題
11: 〓標題
12: $=標題
13: ‥標題
14: $-標題

のような形の標題を言います(※)。

※ 行番号 (数字とコロン) は参照のために付けたものです。マーク ◇、◆、○、●、◎、$*、$$、$@、■、$#、〓、$=、 ‥、$- に続く"標題" の部分に標題文字列を書きます。

〓 は、「ゲタ」、‥ は、「二点リーダ」で漢字変換で変換できます。

マーク □、♯(全角)、★、☆、※ は、この「マーク付き標題」のマークとしては使用しないことにします。マーク □、♯(全角)、★、☆、※ は、特別なぶら下げインデント環境 H1 で使用されます。

1番から8番までのマーク ◇、◆、○、●、◎、$*、$$、$@ を行頭に置いても、その後に半角空白を置かずに文字を書くと、「マーク付き標題」のマークとは認識されません。

1番から8番までのマーク ◇、◆、○、●、◎、$*、$$、$@ を「マーク付き標題」のマークと認識されるようにするには、そのマークの後に、半角空白を丁度1個置き、その後に非空白文字が置かれている必要があります。

9番から14番までのマーク ■、$#、〓、$=、‥、$- を行頭に置いても、その後に半角空白を置くと、「マーク付き標題」のマークとは認識されません。

$ を1個だけ置いた場合もマーク付き標題として扱った方がいいような気もしますが、シェルプロンプトを表す記号として説明に使用することもあるので、$ を1個だけ置いた行をマーク付き標題行と見なすことはしません。

「マーク付き標題環境」は「マーク付き標題」を先頭行とする一連の文章ブロックです。「マーク付き標題」に続く一連の文章ブロックの字下げ量は、先頭の「マーク付き標題」の字下げ量と同じものとされます。この点が、つぎに述べるぶら下げインデント環境 H2 と異なるところで、ぶら下げインデント環境では、ぶら下げインデント環境の最初の開始行と、それに続く2行目以降が1行目から字下げして表示されます。

例を示します。

◇ マーク付き標題環境の例

このように、「マーク付き標題」が書かれた行があると、「マーク付き標題」の行の字下げ量を基準とした詰め込み環境 (※) が始まります。「マーク付き標題環境」はその字下げ量よりも小さい桁位置から始まる行が来ると終了します。

マーク付き標題環境の最初の「マーク付き標題」の次の行をこの例のように空白行とすることもできるし、空白行を置かずにすぐに続けて本文を書き出すこともできます。空白行を置かずに、すぐに続けて本文を書き出しても、マーク付き標題の行に詰め込まれることはありません。

※ 詰め込み処理されるところを「詰め込み環境」と言っています。

これもマーク付き標題環境の例です。

「マーク付き標題」には2つのタイプがあります。

ひとつは、最初の6行に書いたように、◇、◆、○、●、◎、$*、$$、$@ を書いて、その後に、ちょうど1個の半角空白を置き、その後に半角空白でない文字で書き始めた文字列を書いた行です。

もうひとつは、8行目から10行目に書いたように、漢字■、ゲタと呼ばれる漢字〓、二点リーダ‥を一つ書いて、その後に半角空白を置かずにすぐ文字列を書いた行です。

いずれの場合も、行末までの文字列が標題になります。

  1. ひとつ目のタイプのマーク付き標題について説明します。◇、◆、○、●、◎、$*、$$、$@ の後に半角空白をひとつ置いて、その後に標題を置くタイプです。

    例を示します。行頭に、◇、◆、○、●、$*、$$ をどれかを一つ書き、その後に半角空白を置いて

     ○ 行頭のマークも表示される
    

    のように書くと、マーク付き標題環境の先頭行として処理され、つぎのように、少し大きめのフォントで、太字で表示されます。

    ○ 行頭のマークも表示される

    行頭に ◎、$@ を置いた場合も同様ですが、標題は、通常の大きさで、青色フォントで表示されます。

    マーク付き標題の最初のマークが、◇、◆、○、●、◎、$*、$$、$@ の場合は、マークも表示されます。

    マークとして、$* や $$ を指定した場合、マークとして表示されるマークは、* や $ になります。

    * 行頭のマークは $* ではなく、* になる
    $ 行頭のマークは $$ ではなく、$ になる

  2. 二つ目のタイプのマーク付き標題について説明します。
    漢字■、またはゲタと呼ばれる漢字〓、二点リーダ ‥ を行頭に置いて、その後に半角空白を置かずにすぐ文字列を書く場合です。
    これらの二つ目のタイプのマーク付き標題では、マークの■、〓、‥ は表示されません。

    まず、

     ■行頭のマークは表示されない
    

    のような行は、マーク付き標題として処理されますが、文字■は結果として表示される先頭行には含まれません。

    行頭のマークは表示されない

    のように、少し大きめのフォントで太字で書かれます。

     〓標題
    

    は、普通のサイズですが、太字で、

    標題

    のように書かれます。

    〓標題
    このように書けば、標題付きリストで、説明文を行頭から
    書いたのとよく似た整形結果が得られます。
    

    これで、つぎのように整形されます。

    標題
    このように書けば、標題付きリストで、説明文を行頭から書いたのとよく似た整形結果が得られます。

    この例では、「〓標題」の次の行を空白行とせずに、すぐに本文を書きだしていますが、本文が標題の行に詰め込まれてはいないことに注意してください。

「マーク付き標題」は、パラグラフの途中に出てきた場合は、出てきたところで処理されますが、字下げして書きだされた場合は、標題付きリストと同様の文書環境として処理されます。

  ● 行頭マークが保存されるタイプの標題
  ◇、◆、○、●、◎、$*、$$、$@ を書いて、その後に、
  ちょうど1個の半角空
  白を置き、その後に空でない文字列を書いた行です。ここが詰め
  込み処理されていることに注意して下さい。

  〓行頭マークを除いて表示されるタイプの標題
  前の行は、行頭に〓を置いてすぐその後に文字列を書かれていま
  したが、〓は表示されません。このタイプの行頭マークは、■、
  〓、‥です。

  ここの
  文章も詰め込まれます。

と書いて、次のように整形されます。

● 行頭マークが保存されるタイプの標題 Referred at: [H1]
◇、◆、○、●、◎、$*、$$、$@ を書いて、その後に、ちょうど1個の半角空白を置き、その後に空でない文字列を書いた行です。ここが詰め込み処理されていることに注意して下さい。

行頭マークを除いて表示されるタイプの標題
前の行は、行頭に〓を置いてすぐその後に文字列を書かれていましたが、〓は表示されません。このタイプの行頭マークは、■、、‥です。

ここの文章も詰め込まれます。

● マーク付き標題による拡張見出し Referred at: [H1][H2]

この上の行は、マーク付き標題による拡張見出しの例になっています。、「● マーク付き標題による拡張見出し」は、"マーク付き標題による拡張見出し" が「マーク付き標題による拡張見出し」として登録されます。そうすると、 (H "マーク付き標題による拡張見出し") と書かれるとここの見出しにジャンプするリンクが生成されます。

マーク付き標題 H1 の中で、「● 標題」、「◎ 標題」、「$$ 標題」、「$@ 標題」、「■標題」、「$#標題」の6つの種類のマーク付き標題は、「マーク付き標題による拡張見出し」を定義していると見なされます。この見出しは 見出し H1 の一つと見なされます。全角記号を使わないマーク付き標題行 H1 も書くことができます。

※ マーク付き標題が拡張見出しになるか、ならないかで分類すると、マーク付き標題のマークははつぎのように分類されます。

拡張見出しになるマーク ●、◎、$$、$@、■、$#
拡張見出しにならないマーク ◇、◆、○、$*、〓、$=、‥、$-

□ 中が白い四角は、♯、★、☆、※ などとともに、特別なぶら下げインデント環境 H2 の先頭文字と認識されるもので、マーク付き標題環境の標題を導くものではありません。

マーク付き標題は、1個以上の空白行の後に書くようにしてください。詰め込みされる環境に、1個以上の空白行を置かずに、続けて、マーク付き標題行が置かれると、その前の行に空白行が挿入されたように整形されます。

マーク付き標題行を連続して置く Referred at: [H1]
マーク付き標題行を連続して置くことができます。その場合、整形した結果も、マーク付き標題はそのまま、間に空白行を挟まずに連続して書かれます。

@ 全角記号を使わないマーク付き標題行 Referred at: [H1]
全角記号を使わないマーク付き標題行も書けるようにしました。$ の後に、記号 *、$、@、#、=、- のいずれかを書きます。 $*、$$、$@ の場合は、その後に半角空白1個を置き、$#、$=、$- の場合は、その後に半角空白を置かずに、標題文字列を続けて書きます。

マーク 機能
$* マーク付き標題行を作成します。拡張見出しとしては登録されません。○ と同じ機能を持ちます。整形した結果では、マークの位置には、* が表示されます。
$$ マーク付き標題行を作成します。拡張見出しとして登録されます。● と同じ機能を持ちます。整形した結果では、マークの位置には、$ が表示されます。
$@ マーク付き標題行を作成します。拡張見出しとして登録されます。◎ と同じ機能を持ちます。整形した結果では、マークの位置には、@ が表示されます。
$# ■と同じ機能を持ちます。マークは表示されません。標題は、大きいフォントでゴシックで表示され、標題は、拡張見出しとして登録されます。
$= 〓と同じ機能を持ちます。マークは表示されません。 標題は、ゴシックで表示され、拡張見出しとして登録されません。
$- ‥と同じ機能を持ちます。マークは表示されません。標題は、普通書体で表示され、拡張見出しとして登録されません。

■マーク付き標題1
〓マーク付き標題2
‥マーク付き標題3

$#マーク付き標題a
$=マーク付き標題b
$-マーク付き標題c

はつぎのように表示されます。

マーク付き標題1
マーク付き標題2
マーク付き標題3

マーク付き標題a
マーク付き標題b
マーク付き標題c

マーク付き標題行が現れた行の直前が空白行でなかった場合、直前の行の行末で改行されます。html のコードで言うと、<br> が挿入されます。

[2016-04-20]
〓マーク付き標題の前が空白行ではない例
マーク付き標題行が現れた行の直前が空白行でなかった場合、直前の
行の行末で改行されます。この例では、[2016-04-20] が置かれて
います。

と書いて、つぎのように整形されます。

[2016-04-20]
マーク付き標題の前が空白行ではない例
マーク付き標題行が現れた行の直前が空白行でなかった場合、直前の行の行末で改行されます。この例では、[2016-04-20] が置かれています。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

5.4.7 ぶら下げインデント環境

Referred at: [H1][H2][H3]

行頭に & を書いてその直後に & 以外の文字から始まる文字列を書いて、つぎの行から、& があった最初の行よりは1文字以上余分に字下げした一連の行は、「ぶら下げインデント環境の見出し部分」になります。整形したとき、& は表示されません。ぶら下げインデントする範囲の行は、ぶら下げインデントを開始した行の次の行と同じ字下げ位置から書き出すようにします。

& をどうしても行頭に置きたいが、ぶら下げインデント環境を開始するのではない場合は、行頭に .. (ピリオド2つ) を置いて、.. & で書き出してください。

「ぶら下げインデント環境の見出し部分」では、あまり複雑なことはできません。行頭の .. や、@begin{html} ... @end{html} は使えます。行頭に、.. を置くと、その前の行の行末で改行します。..を置いた行の後は、詰め込み処理されます。@begin{html} を行頭に書いた行から、 @end{html} を行頭に書いた行の間は、html のタグが使えます。

ぶら下げインデント環境は、最初の見出し部分に続いて、「本体部分」を持つことができます。「ぶら下げインデント環境の本体部分」もぶら下げインデント環境の見出し部分の字下げ量と同じにします。

例を示します。

&(*ぶら下げインデント環境*) ここはぶら下げインデント環境の
  (*見出し部分*)です。ぶらさげインデント環境は、行頭に、&を
  書き、2行目以降は、&を置いた最初の行に比べて少し字下げした
  位置から書きます。
  ..   ここはまだ、ぶら下げインデント環境の見出し部分です。
  見出し
  部分では、あまり複雑なことはできません。
  行頭の .. や、@begin{html} ... @end{html} は使えます。炭酸
  ガスは
  @begin{html} ---------------------------------------------
  CO<sub>2</sub>
  @end{html} -----------------------------------------------
  と表記します。
  .. 見出し部分は、空白行で終わります。したがって、ここが
  (*ぶら下げインデント環境の見出し部分*)の
  終わりです。

  ここは(*ぶら下げインデント環境の本体部分*)です。見出し部分
  に続いて、見出し部分の字下げ量と同じ字下げで書く段落は、ぶ
  ら下げインデント環境の本体部分です。

  ぶら下げインデントの本体部分には、他のリスト環境を入れ
  ることができます。

  * ここにマーク付きリストを置いています。
  * マーク付きリストの2番目。

これはつぎのように整形されます。

ぶら下げインデント環境 ここはぶら下げインデント環境の見出し部分です。ぶらさげインデント環境は、行頭に、&を書き、2行目以降は、&を置いた最初の行に比べて少し字下げした位置から書きます。
  ここはまだ、ぶら下げインデント環境の見出し部分です。見出し部分では、あまり複雑なことはできません。行頭の .. や、@begin{html} ... @end{html} は使えます。炭酸ガスは CO2と表記します。
見出し部分は、空白行で終わります。したがって、ここがぶら下げインデント環境の見出し部分の終わりです。

ここはぶら下げインデント環境の本体部分です。見出し部分に続いて、見出し部分の字下げ量と同じ字下げで書く段落は、ぶら下げインデント環境の本体部分です。

ぶら下げインデントの本体部分には、他のリスト環境を入れることができます。

&※ user パッケージも editor パッケージも
   system を use-package していな
   いので、
   呼び出すときは si: を付けて、(si::system-root)としなけ
   ればいけません。
  
ぶら下げインデント環境の開始行の & の前に半角空白を置くと、それだけ字下げされます。

  &ぶらさげインデントの最初の行で改行[br]
    このようにぶら下げインデントの最初の行の行末に改行記号を
    入れると、標題付きリストのような感じにすることができます。
    炭酸ガスは、(h CO<sub>2</sub> /h) と書きます。

    整形したときの字下げ量として、ソーステキストの2行目の字下げ量
    が取られます。この項目の字下げ量は少し大きく取られています。

は、つぎのように整形されます。

※ user パッケージも editor パッケージもsystem を use-package していないので、呼び出すときは si: を付けて、(si::system-root)としなければいけません。

ぶら下げインデント環境の開始行の & の前に半角空白を置くと、それだけ字下げされます。

ぶらさげインデントの最初の行で改行
このようにぶら下げインデントの最初の行の行末に改行記号を入れると、標題付きリストのような感じにすることができます。炭酸ガスは、CO2 と書きます。

整形したときの字下げ量として、ソーステキストの2行目の字下げ量が取られます。この項目の字下げ量は少し大きく取られています。

[a] ぶら下げインデント環境の見出し部分は2行以上に。

ぶら下げインデント環境の見出し部分が短い場合でも、できれば、途中で改行して、2行になるようにするのが簡明です。ぶら下げインデント環境の見出し部分を一行に書いて、その次に空行がある場合、うまく整形されない可能性があります。

この項目の見出し部分は、

&[a] ぶら下げインデント環境の見出し部分は
    2行以上に。
    
    ぶら下げインデント環境の見出し部分が短い場合は、
    途中で改行して、...

のように書きました。「2行以上に」のところで改行して 2行以上になるようにしています。

この項目は、マーク付きリスト環境のように見えますが、ぶら下げインデント環境を使って書かれています。一行目を&[a] で始めて、後を字下げして書いただけです。

[b] 「ぶら下げインデント環境の見出し部分」は、2行以上に渡って書くのが簡明です。「ぶら下げインデント環境の見出し部分」が短い場合でも、できれば、途中で改行して、2行に渡って書くようにしてください。「ぶら下げインデント環境の見出し部分」が短くて、途中で改行しない場合は、本体部分は、ぶら下げインデント環境の最初の行の書き出し位置から、半角3文字分字下げして書くものとします。

ぶら下げインデント環境の出だしが短くても改行した例

この例では、ぶら下げインデント環境の見出し部分に、改行を入れて2行にしています。

ぶら下げインデント環境の出だしが短く1行にした例。

ぶら下げインデント環境の出だしが特に短くて改行しにくい場合は、ここの例のように、本体部分は、ぶら下げインデント環境の最初の行の書き出し位置から、半角3文字分字下げして書いてください。

[c] ぶら下げインデント環境を始めようとしているのではないのに、段落の最初に & を書きたい場合は、そのまえに、".. " を置きます。段落の途中で、たまたま行頭に & が来たら、改行位置を変えて、& が行頭に来ないようにします。

● 特別なぶら下げインデント環境 Referred at: [H1][H2][H3]

特別に、行頭が□、または、#(全角)、★、☆、※、##(半角#を2個)、&&(半角で&を2個) で、その後に半角を1個置き、その後に非空白文字で始まる文字列が来ると、& で始まっていなくても、ぶらさげインデント環境として処理されます。これを 特別なぶら下げインデント環境 H3 といいます。

「ぶら下げインデント環境の見出し行」と「ぶら下げインデント環境の本体部分」は、行頭の □、または、#(全角)、★、☆、※, ##(半角#を2個)、&&(半角で&を2個) の位置より、半角3文字分だけ字下げします。

□ マークで始まるぶら下げインデント
   このように、行頭が□で、その後に半角を1個置き、その後に非
   空白文
   字で始まる文字列が来ると、ぶらさげインデント環境として処
   理されます。

   □ チェックを入れるための四角1
   □ チェックを入れるための四角2[br]
      「チェックを入れるための四角1」の続きにぶら下げインデ
      ントが始まりました。最初の「チェックを入れるための四角
      1」の行を読み取ったときに、このぶら下げインデント環境の
      字下げ量を +3 に設定しています。

      ここは「チェックを入れるための四角1」に対応して決めら
      れたインデント量に対応しています。

   このような形でも使用できます。

☆ 行頭が☆でも同様です。
   ここは「ぶら下げインデントの見出し部分」なので、行頭に、
   □ などのマークが来ても新たにぶら下げインデント構文が
   開始したと見なされません。
   
   ここは「ぶら下げインデントの本文部分」です。
   詰め込まれます。

   □ ここはぶら下げインデントの見出し行
      です。

## 行頭に半角 # を2個書いて、ぶら下げインデントできます。
   整形されると、# は1個だけ表示されます。

   行頭に半角 # を1個置いて書かれた行は、普通に出てくると思
   われるので、このような仕様が採用されました。

&& 行頭に半角 & を2個書いて、ぶら下げインデントできます。
   整形されると、& は1個だけ表示されます。

と書いてつぎのように整形されます。

□ マークで始まるぶら下げインデント
このように、行頭が□で、その後に半角を1個置き、その後に非空白文字で始まる文字列が来ると、ぶらさげインデント環境として処理されます。

□ チェックを入れるための四角1

□ チェックを入れるための四角2
「チェックを入れるための四角1」の続きにぶら下げインデントが始まりました。最初の「チェックを入れるための四角1」の行を読み取ったときに、このぶら下げインデント環境の字下げ量を +3 に設定しています。

ここは「チェックを入れるための四角1」に対応して決められたインデント量に対応しています。

このような形でも使用できます。

☆ 行頭が☆でも同様です。ここは「ぶら下げインデントの見出し部分」なので、行頭に、□ などのマークが来ても新たにぶら下げインデント構文が開始したと見なされません。

ここは「ぶら下げインデントの本文部分」です。詰め込まれます。

□ ここはぶら下げインデントの見出し行です。

# 行頭に半角 # を2個書いて、ぶら下げインデントできます。整形されると、# は1個だけ表示されます。

行頭に半角 # を1個置いて書かれた行は、普通に出てくると思われるので、このような仕様が採用されました。

& 行頭に半角 & を2個書いて、ぶら下げインデントできます。整形されると、& は1個だけ表示されます。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

5.4.8 frame 環境

Referred at: [H1][H2][H3][H4]

@begin{frame}{xxxx} ... @end{frame} で囲むとその範囲を枠で囲んで示します。xxxx の部分では、先頭で、solid, dashed, dotted, double, null のいずれかを指定します。null を指定した場合は、枠線を描きません。

@begin{frame}{xxxx} のところで xxxx の部分を省略して、@begin{frame} ... @end{frame} で囲むと、 @begin{frame}{null} ... @end{frame} で囲んだものとみなされます。

frame で囲む範囲に、他の多くの文書環境を含めることができます。

例を示します。

@begin{frame}{double} --------------------------------------
@begin{frame}{xxxx} ... @end{frame} で囲むとその範囲を枠で
囲んで示します。xxxx の部分には、

 * solid
 * dashed
 * dotted
 * double
 * null
 
のいずれかを指定します。
@end{frame} ------------------------------------------------

は、つぎのように整形されます。この例では、frame 環境の中で、マーク付きリストを使っています。frame 環境は、このように他の文書環境を含むことができます。

後で述べる fpanel 環境 H1 は、frame 環境と同じく文章を枠で囲んで表示することができますが、frame 環境のように、内部に他の文書環境を含めることはできません。

@begin{frame}{xxxx} ... @end{frame} で囲むとその範囲を枠で囲んで示します。xxxx の部分には、

のいずれかを指定します。
背景色は、枠のスタイルの後に bgcolor: に続けて指定してください。 frame 環境のデフォールトの背景色は、後述するように、$default_frame_backcolor で指定さ、普通は、透明色指定されています。明示的に、背景色を透明に指定するには、bgcolor: null とします。

つぎに例を示します。

@begin{frame}{double bgcolor: beige} -----------------------
@begin{frame}{xxxx} ... @end{frame} で囲むとその範囲を枠で
囲んで示します。xxxx の部分には、

 * solid
 * dashed
 * dotted
 * double
 * null
 
のいずれかを指定します。背景色は、枠線のスタイルの後に 
bgcolor: に続けて指定してください。 背景色を透明にするには、
bgcolor:null と指定してください。
@end{frame} ------------------------------------------------

と書いて、つぎのように整形されます。

@begin{frame}{xxxx} ... @end{frame} で囲むとその範囲を枠で囲んで示します。xxxx の部分には、

のいずれかを指定します。背景色は、枠線のスタイルの後に bgcolor: に続けて指定してください。 背景色を透明にするには、 bgcolor:null と指定してください。
枠線のスタイルを指定している部分を省略することもできます。枠線のスタイルの指定を省略すると null を指定したものと見なされます。

@begin{frame}{solid bgcolor: beige} ------------------------
@begin{frame xxxx} ... @end{frame xxxx} で囲むとその範囲を枠で
囲んで示します。xxxx の部分には、

 * solid
 * dashed
 * dotted
 * double
 * null
 
のいずれかを指定します。枠線のスタイルを指定している部分を省略することもできます。枠線のスタイルの指定を省略すると null を指定したものと見なされます。
@end{frame} ------------------------------------------------

と書いて、つぎのように整形されます。

@begin{frame}{xxxx} ... @end{frame} で囲むとその範囲を枠で囲んで示します。xxxx の部分には、

のいずれかを指定します。枠線のスタイルを指定している部分を省略することもできます。枠線のスタイルの指定を省略すると null を指定したものと見なされます。
背景色、枠の幅(※)、全体の横方向の配置 (left, center, right) を指定できます。枠の幅は、比率で指定するのが基本です。

※ 細かいことを言うと...。枠の幅と書きましたが、width: に続いて設定する幅は、正確には、中に納める文章部分の横幅を意味します。枠線は、その外側に付け足されので、枠の幅は、width: に続いて設定する幅より広くなります。

@begin{frame}{solid align: center bgcolor: snow width: 70%} 
@begin{frame}{xxxx} ... @end{frame} で囲むとその範囲を枠で
囲んで示します。xxxx の部分に、

 bgcolor: snow
 width: 70%
 align: center
 
のような文字列を書いて、背景色や横幅や全体の横方向の配置を指定できます。
@end{frame} ------------------------------------------------

と書いて次のように整形されます。

@begin{frame}{xxxx} ... @end{frame} で囲むとその範囲を枠で囲んで示します。xxxx の部分に、

 bgcolor: snow
 width: 70%
 align: center

のような文字列を書いて、背景色や横幅や全体の横方向の配置を指定できます。
参考のために、枠線を null に指定した例を示します。

@begin{frame}{xxxx} ... @end{frame} で囲むとその範囲を枠で囲んで示します。xxxx の部分に、

 null
 bgcolor: beige
 width: 70%
 align: center

のような文字列を書いた例を示します。一つ前の Frame との違いを確認してください。中味の部分の幅は同じであることを確認してください。
また、frame 環境では、xxxx の部分で、フォントサイズを指定できます。 xxxx の部分に、"font-size: small" を含めると、小さめのフォントで表示されます。

frame は入れ子にすることができます。

@begin{frame}{double align: center width: 70%} -------------
frame を入れ子にすることができます。

 * マーク付きリストの中
 
   @begin{frame}{solid} ------------------------------------
   ここに書けるか。
   
     * aaa
     * bbbbbb
     
   これはどうなる?
   ;;; @(%) $endnote = "※ 背景色は " + $default_frame_backcolor + " です。"
   @end{frame} ---------------------------------------------

 * aaaaaaaaaaaaaaa
 
途中に別の frame が開かれたらどうなるか。

@begin{frame}{dotted} --------------------------------------
こんな風に。
@end{frame} ------------------------------------------------

ブラウザが問題なく処理してくれます。
;;; @(%) $endnote = "※ 背景色は " + $default_frame_backcolor + " です。この注釈文は、注釈文がどのように配置されるかを確認するために書いています。frame を中央配置した場合は、枠線は本体の外側に描かれるのだと考えられる結果です。"
@end{frame} ------------------------------------------------

はつぎのように整形されます。

frame を入れ子にすることができます。

  • マーク付きリストの中

    ここに書けるか。

    • aaa
    • bbbbbb

    これはどうなる?

    ※ 背景色は null です。

  • aaaaaaaaaaaaaaa

途中に別の frame が開かれたらどうなるか。

こんな風に。
ブラウザが問題なく処理してくれます。

※ 背景色は null です。この注釈文は、注釈文がどのように配置されるかを確認するために書いています。frame を中央配置した場合は、枠線は本体の外側に描かれるのだと考えられる結果です。

frame を入れ子にすることができます。

途中に別の frame が開かれたらどうなるか。

こんな風に。
ブラウザが問題なく処理してくれます。

※ 背景色は null です。この注釈文は、注釈文がどのように配置されるかを確認するために書いています。frame を中央配置した場合は、枠線は本体の外側に描かれるのだと考えられる結果です。

@begin{frame} ... @end{frame} を字下げした環境に置くときは、他の文書環境の「詰め込まれる箇所」に置くのを原則とします。上の例で言えば、内側に置いた @begin{frame} ... @end{frame} は、マーク付リストの説明文の字下げ位置に配置しました。

いきなり字下げした位置、つまり、字下げ環境として処理される位置に @begin{frame} ... @end{frame} を配置した場合は、内部的には、引用環境 H1 (コロン:を置いて字下げ位置を指定する環境) が挿入されます。そのため、 @end{frame} の後も詰め込み環境にあります。

例を示します。

@begin{frame}{solid} ---------------------------------------
この外側の frame の中に frame を配置します。

    @begin{frame}{double} ----------------------------------
    ここの frame 環境は、他の文書環境
    の「詰め込まれる箇所」で
    はなく、いきなり字下げした位置に配置されています。
    
    そのため、この frame 環境が始まる前に、「引用環境」が
    開始されます。
    @end{frame} --------------------------------------------

    ここにある
    文章は詰め込まれます。

ここは親の frame 環境です。
;;; @(%) $endnote = "※ 背景色は " + $default_frame_backcolor + " です。"
@end{frame} ------------------------------------------------

のように書いて、次のように整形されます。

この外側の frame の中に frame を配置します。

ここの frame 環境は、他の文書環境の「詰め込まれる箇所」ではなく、いきなり字下げした位置に配置されています。

そのため、この frame 環境が始まる前に、「引用環境」が開始されます。
ここにある文章は詰め込まれます。

ここは親の frame 環境です。

※ 背景色は null です。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

5.5 特殊環境

Referred at: [H1][H2][H3]

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

5.5.1 @begin, @end 記法

Referred at: [H1]

ODR では、文章のかたまりを @begin{xxx} ... @end{xxx} で囲んで表す方法を採用しました。

  @begin{xxx}
  この間に
  文章のかたまりが置かれます。
  @end{xxx}

のような形です。

始まりの @begin{xxx} や 終わりの @end{xxx} は、それぞれ単独の行に書かれていて、0個以上の半角空白が前にあり、後ろに、一個の半角空白と - の連続があるか、後ろには何も書かないかのいずれかとします。

@begin{xxx} と @end{xxx} は対になっていて、xxx の部分の文字列は同じでないといけません。@begin{xxx} だけ書いて、@end{xxx} を書かないというのはいけません。

対になっている @begin{xxx} と @end{xxx} の前の半角空白の個数は同じでなければいけません。@begin{xxx} と @end{xxx} に囲まれた範囲は、原則として、この半角空白の個数だけ、字下げして整形されます。

例を示します。

@begin{panel} --------------------------------------------
これは、panel 環境の例です。
@begin{panel} で始まって、@end{panel} で終わる範囲に囲まれて
います。始まりの @begin{panel} や 終わりの @end{panel} は、
それぞれ単独の行に書かれていて、
0個以上の半角空白が前にあり、後ろに、一個の半角空白と - の
連続があるか、後ろには何も書かないかのいずれかとします。
@end{panel} ----------------------------------------------

と書いて、次のように整形されます。

これは、panel 環境の例です。
@begin{panel} で始まって、@end{panel} で終わる範囲に囲まれて
います。始まりの @begin{panel} や 終わりの @end{panel} は、
それぞれ単独の行に書かれていて、
0個以上の半角空白が前にあり、後ろに、一個の半角空白と - の
連続があるか、後ろには何も書かないかのいずれかとします。

この例では、@begin{panel} が書かれた行を開始行とし、@end{panel} が書かれた行を終了行として、その間にある行が、"panel" によって指定された様式で整形されています。"panel" を指定することによって、どのように整形されるかについては、@begin{panel} ... @end{panel} H1 を参照してください。

@begin{xxx}... @end{xxx} の形で表される文章のかたまりの仕様を @begin{xxx}... @end{xxx} 環境あるいは xxx 環境と呼ぶことにします。

@begin{xxx} ... @end{xxx} のように書くと、xxx の環境がどこで始まり、どこで終わっているかが分かりやすくなります。背景色やフォントを指定するなどの補助的な指定をするには、@begin{xxx}{yyy} ... @end{xxx} のような形式をとって、yyy の部分で指定するようにします。yyy の部分を xxx 環境のオプション文字列と呼びます。

  @begin{xxx}{yyy}
  この間に
  文章のかたまりが置かれます。
  @end{xxx}

のような形です。{xxx} と {yyy} の間には何も入れずに続けて書いてください。@begin{xxx}{yyy} も、単独の行に書かれ、0個以上の半角空白が前にあり、後ろに、一個の半角空白と - の連続があるか、後ろには何も書かないかのいずれかとします。

panel 環境で、背景色を変える例を示します。panel 環境のオプション文字列に bgcolor: beige と書いて、つまり @begin{panel}{bgcolor: beige} と指定して背景色を指定できます。

これは、panel 環境で、オプション文字列を指定する例です。
@begin{panel}{bgcolor: beige} で始めることによって、
背景色を beige に指定しています。

@begin{xxx} ... @end{xxx} の xxx の部分に指定できる文字列は限られています。また、yyy の部分の文字列をどのように書くかは、xxx に依存します。

xxx が

  code
  panel
  vb
  verbatim

のいずれかで始まる場合は、特別に、その後に任意の文字列を付加することができ、空白文字が含まれていても、@begin{xxx} で開始されれば、@end{xxx}で終わるというルールが適用でき、それぞれ、code、panel, vb,verbatim 環境として処理されます。例えば、@begin{code a} で開始して、@end{code a} で終わるようにすれば、code 環境として処理されます。

例を示します。

@begin{code a}{bold} ---------------------------------------
ここは、@begin{code a} ... @end{code a} 環境の中です。
@begin{code}{bold} -----------------------------------------
ここは、@begin{code} ... @end{code} 環境の中です。
@end{code} -------------------------------------------------
ここは、@begin{code a} ... @end{code a} 環境の中です。
@end{code a} -----------------------------------------------

と書いて、つぎのように整形されます。

ここは、@begin{code a} ... @end{code a} 環境の中です。
@begin{code}{bold} -----------------------------------------
ここは、@begin{code} ... @end{code} 環境の中です。
@end{code} -------------------------------------------------
ここは、@begin{code a} ... @end{code a} 環境の中です。

xxx の部分が、code, panel, vb, verbatim 以外で始まる場合には、@begin{xxx} ... @end{xxx} の xxx の部分に空白文字を含めることはできません。

@begin{Inserted on 2016-04-13}
@begin{xxx} ... @end{xxx} の xxx の部分に空白文字が含まれている場合は、その前に、". " や ";;; " を置くなどして、@begin{xxx} ... @end{xxx} の開始行、終了行と見なされないようにしてください。
@end{Inserted on 2016-04-13}

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

5.5.2 左詰め、 DotFlushleft, CommaVerbatim, BoldFlushleft 環境, BigBoldFlushleft 環境

$ DotFlushleft 環境

行頭から半角空白を0個以上39個以下置いて、 .~ (ピリオッドとチルダー) を置いてすぐ改行した行は、左詰め環境である「DotFlushleft 環境」を開始したものと解釈し、その後、もう一度、0個以上39個以下の半角空白を行頭から入力し、.. (ピリオッドをふたつ) 置いてすぐ改行した行を読みとると左詰め環境を終了します。

.~
ここは
左詰めされます。
..

は、つぎのように整形されます。元の文章の改行位置で改行されます。フォントは固定幅フォントではなくて、もとの地の文を表示するのに使用されているフォントが使用されます。つぎの整形結果を見ると、「ここは」の長さと「左詰め」の長さが微妙に違うのが分かるでしょう。

ここは
左詰めされます。

この DotFlushleft 環境の中では、Emacs 関数 H2 を使うことができます(※1)。

.~
(Ref "labelfunc" "Label関数") のような emacs 関数を使う
ことができます。
炭酸ガスは (h CO<sub>2</sub> /h)     (※2) と表記します。
..

炭酸ガスは (h CO<sub>2</sub> /h)     (※3) と表記します。

炭酸ガスは (h CO<sub>2</sub> /h) 
...      (※4) と
表記します。

のように、.~ (ピリオドとチルダー) だけを置いた行と .. (半角ピリオドふたつ) だけを置いた行で挟むと、つぎのように整形されます。

Label関数 のような emacs 関数を使う
ことができます。
炭酸ガスは CO2     (※2) と表記します。

炭酸ガスは CO2 (※3) と表記します。

炭酸ガスは CO2      (※4) と表記します。

ここでは、emacs 関数の置き換えが起こったことを確認してください。

※1 左詰めでしかもhtmlのタグを使うには、@begin{htmlbr} ... @end{htmlbr} 環境を使用します。

※2 左詰めするときに、文中の半角空白が整形後も保存されていることに注意してください。ただし、固定幅フォントで表示されているのでなければ、半角空白を保存したからといって、複数行の間で、桁位置の関係がソースのままにはなりません。

詰め込み処理するときは複数の半角空白は一個に変換されます。左詰め (flushleft) するときは、前の行に詰め込むという処理をしないので、半角空白の個数が保存されるように処理しています。CO2 の後ろに置いてある半角5個がそのまま表示されていることに注意してください。

※3 ここは詰め込み環境なので、CO2 の後ろの半角空白5個は1個しかないように見えます。

※4 詰め込み環境の中で、複数の半角空白があったのが分かるようにするには、... を行頭に書きます。

一行だけ左詰めしたい場合、行頭に . (半角ピリオド) を1個置いて、その後に半角空白を1個以上置きます。例を示します。

. (Ref "labelfunc" "Label関数") のような emacs 関数を使えます。

これでつぎのように整形されます。

Label関数 のような emacs 関数を使えます。

行頭に . (半角ピリオド) を1個置き、その後に半角空白を1個以上置いて、他には何も書かずに改行すると、空白行が挿入されます。

DotFlushleft 環境を指定する .~ (ピリオドとチルダー) と ,. (ピリオド2つ) は、行頭に配置してください。

$ CommaVerbatim 環境 Referred at: [H1]

行頭に . (半角ピリオド) を置く DotFlushleft 環境では、emacs 関数の置き換えが起きます。この置き換えをせず、そのまま表示したいときは、「CommaVerbatim 環境」を使用します。

CommaVerbatim 環境では、ピリオドの代わりに、, (半角カンマ) を使い、,~ だけを置いた行と、,. (半角カンマとピリオド) だけを置いた行で囲みます。

※ DotFlushleft 環境は、.~ を書いた行と、ピリオド2つを書いた行で囲むので、CommaVerbatim 環境は、,~を書いた行と、,, を書いた行で囲むかと思うかも知れませんが、閉じる方は、カンマ2つではなく、カンマとピリオドです。閉じる方には、ピリオドを付加することになっています。

字下げ環境 H2 のところで、普通、字下げして書くと左詰めされるけれども、字下げしなくても左詰めされる書き方として、「CommaVerbatim 環境」を紹介しました。

例を示します。

,~
(Ref "labelfunc" "Label関数") のような emacs 関数は使う
ことができません。
炭酸ガスは (h CO<sub>2</sub> /h) と表記してもうまく行きません。
,.

のように書いて、つぎのように整形されます。

(Ref "labelfunc" "Label関数") のような emacs 関数は使う
ことができません。
炭酸ガスは (h CO<sub>2</sub> /h) と表記してもうまく行きません。

と整形されます。CommaVerbatim 環境では emacs 関数の置き換えが起きません。

一行だけ、CommaVerbatim で示したいときは、行頭に , (半角カンマ) を一個置いて、その後に半角空白を1個以上置きます。例を示します。

, (Ref "labelfunc" "Label関数") のような emacs 関数は使うことができません。

と書いて、つぎのように整形されます。

(Ref "labelfunc" "Label関数") のような emacs 関数は使うことができません。

行頭に . (半角カンマ) を1個置き、その後に半角空白を1個以上置いて、他には何も書かずに改行すると、空白行が挿入されます。

CommaVerbatim 環境を指定する ,~ (カンマとチルダー) と ,. (カンマとピリオド) は、行頭に配置してください。

CommaVerbatim 環境を指定する ,~ (カンマとチルダー) と ,. (カンマとピリオド) の後に、半角空白を置いて、行末まで、連続して , (カンマ) を書いても構いません。その方が、テキストファイルとして見やすいこともあるので、そういう記法も導入しました。例を示します。

,~ ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
(Ref "labelfunc" "Label関数") のような emacs 関数は使う
ことができません。
炭酸ガスは (h CO<sub>2</sub> /h) と表記してもうまく行きません。
,. ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

整形した結果は、,~ (カンマとチルダー) と ,. (カンマとピリオド) を置いた行で囲んだ場合と同じです。

DotFlushleft の場合は、.~ (ピリオッドとチルダー) と .. (ピリオッド2つ) の後に、半角空白を置いて、その後に、ピリオッドを連続して書くという記法は導入されていません

$ BoldFlushleft 環境, BigBoldFlushleft 環境

行頭から半角空白を0個以上、39個以下置いて、等号を2つ置き、その後に半角空白を1個置き、その後に半角空白以外の文字で始まる行が置かれると、BoldFlushleft 環境が開始したものとし、空白行に遭遇するところで BoldFlushleft 環境 が終わるものとします。

BoldFlushleft 環境では、emacs 関数の置き換えはされません。

空白行が来ると BoldFlushleft 環境は終わるという約束なので、間に空白行を入れることはできませんが、ピリオッドを2つ置いた行を挟めば、整形した結果には空白行が入ります。

例を示します。

   == double distance(
          double x1, double y1, double z1, 
          double x2, double y2, double z3
        )

のように書きます。間に空白行を入れた例は、

   == double distance(
          double x1, double y1, double z1, 
          double x2, double y2, double z3
        )
   .. 
      double distance(
          double x1, double y1,   double x2, double y2
        )

のようです。

例を示します。

   double distance(
       double x1, double y1, double z1, 
       double x2, double y2, double z3
     )

のように書きます。間に空白行を入れた例は、

   double distance(
       double x1, double y1, double z1, 
       double x2, double y2, double z3
     )

   double distance(
       double x1, double y1,   double x2, double y2
     )

のようです。

等号2つではなくて、等号3つにすると、文字サイズを大きくします。これが BigBoldFlushleft 環境です。

   === double distance(
           double x1, double y1, double z1, 
           double x2, double y2, double z3
         )

と書いて、つぎのように表示されます。

   double distance(
       double x1, double y1, double z1, 
       double x2, double y2, double z3
     )

$ 他のリスト環境の中の左詰め

他のリスト環境の中にも、左詰め環境を置くことができます。

他の環境の中に、DotFlushleft 環境を指定する .~ (ピリオドとチルダー) と ,. (ピリオド2つ)、CommaVerbatim 環境を指定する ,~ (カンマとチルダー) と ,. (カンマとピリオド) を置くときは、その環境の詰め込み環境の書き出し位置に配置してください。

例を示します。

 * 他のリスト環境の中にも置くことができます。
 
   .~
   ここに
   置くことができます。
     詰め込みモードではないので
   行頭、文中の空白は保存されます。置かれた環境の
   なかで左詰めされます。
   ..

これはつぎのように整形されます。

前に書いたのと似ていますが、

  2. 番号付きのリストの中に、
     字下げした環境を置くことができます。

     ,~
       ここは、字下げした環境であって、左詰めで表示され
       ます。パラグラフと同じフォントで表示されます。
     ,.

     ここは、番号付きの
     リストの文章のつづきとして詰め込み処理されます。

とした場合、つぎのように整形されす。

  1. 番号付きのリストの中に、字下げした環境を置くことができます。

      ここは、字下げした環境であって、左詰めで表示され
      ます。パラグラフと同じフォントで表示されます。

    ここは、番号付きのリストの文章のつづきとして詰め込み処理されます。

ここまで、.~ (ピリオドとチルダー) だけを行頭におき、何行か書いて、.. (ピリオドふたつ) だけが行頭にある一連の行が左詰めされることを説明しました。

一行だけを左詰めする場合は、. (ピリオド) を行頭に置いて、その後に、半角空白を1個以上置いて、続けて文字列を書くという記法も使用できます。

ここは詰め込みモード
で、この後は、
.       左詰めに
なります。

と書いてあると、つぎのように整形されます。

ここは詰め込みモードで、この後は、
      左詰めに
なります。

後述する .. 記法との違いについて注意しておきます。行頭に .. (ピリオドを2つ) を置くと、前の行の行末に <br> が挿入されたように整形されます。

ここは詰め込みモード
で、この後は、
..       左詰めに
なります。

と書いてあると、つぎのように整形されます。

ここは詰め込みモードで、この後は、
      左詰めになります。

行頭に . を1個だけ置いた場合、前の行で改行して、行末で改行されるのに対し、行頭に .. (ピリオド2つ) を置いた場合は、前の行で改行されるだけで、.. (ピリオド2つ)がある行の行末で改行されることはありません。

左詰め (DotFlushleft) の例を示してきましたが、詰め込む例も示しておきます。

  2. 番号付きのリストの中に、
     字下げした環境を置くことができます。

         : ここは、字下げした環境であって、
         詰め込み処理されます。
         
         == 太字で
            表示される環境

         ここも詰め込み
         ます。

     ここは、番号付きの
     リストの文章のつづきとして詰め込み処理されます。

を o2h で整形すると、つぎのようになります。

  1. 番号付きのリストの中に、字下げした環境を置くことができます。

    ここは、字下げした環境であって、詰め込み処理されます。

    太字で
    表示される環境

    ここも詰め込みます。

    ここは、番号付きのリストの文章のつづきとして詰め込み処理されます。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

5.5.3 中央合わせ

Referred at: [H1]

   ..中央合わせ..

のように書くと、.. (ピリオド2つ) と .. (ピリオド2つ) の間の文字は、中央合わせされ、

中央合わせ

のように表示されます。

つぎのように、中央合わせを2行続けることができます。

中央合わせ1
中央合わせ2

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

5.5.4 右詰め

40個以上の半角空白を行頭から入力し、.~ (ピリオッドとチルダー) を置いてすぐ改行した行は、右詰め環境を開始したものと解釈し、その後、もう一度、40個以上の半角空白を行頭から入力し、.. (ピリオッドを2つ) 置いてすぐ改行した行を読みとると右詰め環境を終了します。

.~ (ピリオッドとチルダー) を置く位置は、上記のように桁位置が 40以上であればよいのですが、通常は、エディターで行末に置くようにします。

右詰め環境に置く各行は、行末に文字列を書いてください。行末前にある半角空白文字は保存されます。行末が分かりやすいように行末に :を置くことができます。このコロン : は、o2h で整形するときに半角空白に置き換えられます。

                                                              .~
                                                    右詰めの開始
                                          右詰め継続            
                                          右詰め継続           :
                                                    右詰めを終了
                                                              ..

は、つぎのように整形されます。

右詰めの開始
右詰め継続            
右詰め継続            
右詰めを終了


行頭から、半角空白を0個以上39個以下置いて、.~ (ピリオッドとチルダー) を置いてすぐ改行した行は、左詰め環境 DotFlushleft 環境の開始と解釈されます。この違いに注意してください。

表示失敗?: ./win-odr.odr--khlogo.png


画像を右寄せする例を上に示しました。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

5.5.5 TwocommasVerbatim 環境

行頭から0個以上の半角空白を置き、その後に、,,~ (カンマ2つとチルダー) を置いてすぐ改行して、間に文字が書かれ、最後に、最初の行と同じ個数の半角空白の後に ,,. (カンマ2つとピリオド) がある行で終わる範囲は、詰め込み処理をせず、そのまま等幅フォントで表示されます。

,,~
こんな風に、,,~ があってすぐ改行して、
間に文字が書かれて
最後に、最初の行と同じ桁位置から ,,. がある行で終わる範囲は
詰め込み処理されずに固定幅フォントで表示されます。
,,.

区切りが見やすいように、開始行と終了行で、半角空白を1個置いて、その後に、行末まで、, を任意個数置いても良いことにします。つまり、

,,~ ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
こんな風に、,,~ があってすぐ改行して、
間に文字が書かれて
最後に、最初の行と同じ桁位置から ,,. がある行で終わる範囲は
詰め込み処理されずに固定幅フォントで表示されます。
,,. ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

のように書いてもいいものとします。

※ cbar が使っている xyzzy の環境では、こんな風に行末まで、, を書き並べるには、C-c l c とします。

このように書いたものは、つぎのように整形されます。

こんな風に、,,~ があってすぐ改行して、
間に文字が書かれて
最後に、最初の行と同じ桁位置から ,,. がある行で終わる範囲は
詰め込み処理されずに固定幅フォントで表示されます。

整形した結果は、固定幅フォントで表示されます。そのため、桁位置を揃えて表示する必要があるときに便利です。例を示します。

Enter              #¥C-m
Tab                #¥C-i
Backspace          #¥C-h
Delete             #¥C-?
Esc                #¥C-[
LFD(Enter+Tab)     #¥C-j

固定幅フォントで表示されることを分かりやすい例を示します。

,,~
----+----*----+----*----+----*----+----*----+----*
(Ref "labelfunc" "Label関数") のような emacs関数は
変換されません。
----+----*----+----*----+----*----+----*----+----*
ここは行頭にカンマが2つある行で囲みました。半角50
----+----*----+----*----+----*----+----*----+----*
,,.

,, (Ref "labelfunc" "Label関数") のような emacs関数

は、つぎのように整形されます。

----+----*----+----*----+----*----+----*----+----*
(Ref "labelfunc" "Label関数") のような emacs関数は
変換されません。
----+----*----+----*----+----*----+----*----+----*
ここは行頭にカンマが2つある行で囲みました。半角50
----+----*----+----*----+----*----+----*----+----*

(Ref "labelfunc" "Label関数") のような emacs関数

一行だけ、固定幅フォントで表示したいときに

  ,,~
  y = sin(x)
  ,,.

と書くのは面倒なので、

  ,, y = sin(x)

と書くことができるようにします。行頭から半角空白を置いて、,, (カンマ2つ) を置きます。その後に、半角空白を1個以上おいて、文字列を置きます。これを複数行続けて書いても構いません。

  ,,  y = sin(x)   (1)
  ,,    z = cos(x)   (2)

のように書くと、つぎのように整形されます。

 y = sin(x)   (1)
   z = cos(x)   (2)

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

5.5.6 ThreecommasVerbatim 環境

行頭から0個以上の半角空白を置き、その後に、,,,~ (カンマ3つとチルダー) を置いてすぐ改行して、間に文字が書かれ、最後に、最初の行と同じ個数の半角空白の後に ,,,. (カンマ3つとピリオド) がある行で終わる範囲は、詰め込み処理をせず、すこし小さめの固定幅フォントで表示されます。

例を示します。

,,,~ 
static void Main()
{
  Console.WriteLine("Hello World!");
}
,,,. 

のように書いて、つぎのように整形されます。

static void Main()
{
  Console.WriteLine("Hello World!");
}

区切りが見やすいように、開始行と終了行で、半角空白を1個置いて、その後に、行末まで、, を1個以上の任意個数置いても良いことにします。つまり、

,,,~ ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
static void Main()
{
  Console.WriteLine("Hello World!");
}
,,,. ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

のように書いてもいいものとします。

このように書いたものは、つぎのように整形されます。

static void Main()
{
  Console.WriteLine("Hello World!");
}

参考のために、code 環境を使って

@begin{code} ---------------------------------------------
static void Main()
{
  Console.WriteLine("Hello World!");
}
@end{code} -----------------------------------------------

と書くと、つぎのようになります。code 環境を使うと枠で囲まれます。

static void Main()
{
  Console.WriteLine("Hello World!");
}

ThreecommasVerbatim 環境は、後述する「特殊環境のキャプションの表示」に対応しています。

一行だけ、固定幅フォントで表示したいときに

  ,,,~
  y = sin(x)
  ,,,.

と書くのは面倒なので、

  ,,, y = sin(x)

と書くことができるようにします。行頭から半角空白を置いて、,,, を置きます。その後に、半角空白を1個以上おいて、文字列を置きます。これを複数行続けて書いても構いません。

  ,,,  y = sin(x)   (1)
  ,,,  z = cos(x)   (2)

のように書くと、つぎのように整形されます。

 y = sin(x)   (1)
 z = cos(x)   (2)

番号付きリストの中でも、ThreecommasVerbatim 環境を使うことができます。

  1.  y = sin(x)   (1)
    

    これは、正弦関数の式です。

● ThreecommasVerbatim 環境の見出し

ThreecommasVerbatim 環境が始まる前に、そのコードが何を意味しているか見出しを書きたいことがあります。

見出しを書いて、すぐ改行して、ThreecommasVerbatim 環境を続けるという方法を取ることができます。

例えば、

サンプル式1
,,, y = sin(x)

サンプル式2
,,, y = sin(x)
,,, z = cos(x)

サンプル式3
,,,~
y = sin(x)
z = cos(x)
,,,.

と書けば、つぎのように整形されます。

サンプル式1
y = sin(x)

サンプル式2
y = sin(x)
z = cos(x)

サンプル式3
y = sin(x)
z = cos(x)

◇ ThreecommasVerbatim 環境の字下げの調整

このように字下げされた詰め込み環境にThreecommasVerbatim 環境を置くときに、その内容のコードを左につきだして配置することができます。

例を示します。

001: nw = nb
002: nextline = $io.gets
003: $io.pushback
004: if /^([ ]*)[^ ].*$/ =~ nextline
005:    nk = $1.bytesize
006:    nw = nk if nk < nb
007: end
008: 
009: line = $io.gets.detab
010: while /^#{" " * nb},,,$/ !~ line &&
011:   /^#{" " * nb},,, ,,*$/ !~ line &&
012:   /^#{" " * nb},,, --*$/ !~ line
013:   if /^=¥*/ =~ line
014:     # 行頭に * があるのを回避するために、行頭に = を置い
015:     # たので元に戻している。
016:     line.sub!(/^=/, "")
017:   end
018:   line.sub!(/^#{" " * nw}/, "")
019:   $fp.print line.svquoteline
020:   line = $io.gets
021:   unless line
022:     FileendErrorMessage(nline, sline)
023:     exit
024:   end
025:   line.detab
026: end
027: $fp.print "</pre></b></span>¥n";

この例では、,,,~ は、3文字字下げして配置されていますが、中に置かれているコードは行頭から半角1文字置いて書かれています。このように、,,,~ の前の半角文字数 nb より、中に置かれているコードの先頭行の前の半角文字数 nk の方が小さい場合は、中に配置されているコードの前の半角文字 nk 個分を削除して表示します。

内部のコードがどれだけ左に突き出されているかは、,,,~ の次の行から判断されます。左に突き出す場合は、,,,~ と ,,,. で囲まれる範囲の最初の行が最も左に突き出されている必要があります。

Dashline Display 環境、Threedshes Display 環境、code 環境、 verbatim (vb) 環境でも同様に、中味を左に突き出して配置できます。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

5.5.7 FourcommasVerbatim 環境

行頭から0個以上の半角空白を置き、その後に、,,,,~ (カンマ4つとチルダー) を置いてすぐ改行して、間に文字が書かれ、最後に、最初の行と同じ個数の半角空白の後に ,,,,,. (カンマ4つとピリオド) がある行で終わる範囲は、詰め込み処理をせず、すこし小さめの固定幅フォントの太字で表示されます。

ThreecommasVerbatim 環境では普通のフォントで表示されるのに対して、FourcommasVerbatim 環境は太字で表示されます。

ThreecommasVerbatim 環境でのコード表示のフォントが細すぎると感じる場合は、FourcommasVerbatim 環境をお試しください。

nw = nb
nextline = $io.gets
$io.pushback
if /^([ ]*)[^ ].*$/ =~ nextline
   nk = $1.bytesize
   nw = nk if nk < nb
end

人によっては、ThreecommasVerbatim 環境より、FourcommasVerbatim 環境の方が好みに合うかも知れません。ただ、残念ながら、FourcommasVerbatim 環境では表示が乱れることがあります。

ThreecommasVerbatim 環境で書いたものがつぎ。

nw = nb
nextline = $io.gets
$io.pushback
if /^([ ]*)[^ ].*$/ =~ nextline
   nk = $1.bytesize
   nw = nk if nk < nb
end
+-------------+-------------+
|             |             |
|      C      |             |
|             |             |
+-------------+      B      |
|             |             |
|      A      |             |
|             |             |
+-------------+-------------+

これを FourcommasVerbatim 環境で整形すると

nw = nb
nextline = $io.gets
$io.pushback
if /^([ ]*)[^ ].*$/ =~ nextline
   nk = $1.bytesize
   nw = nk if nk < nb
end
+-------------+-------------+
|             |             |
|      C      |             |
|             |             |
+-------------+      B      |
|             |             |
|      A      |             |
|             |             |
+-------------+-------------+

のようになります。普通は太字にすると文字幅がわずかながら増えるのに、半角空白は太字にしても文字幅が増えないようで、そのために、半角空白を含んでいるところの文字幅が増えずに表示が乱れるようです。

FourcommasVerbatim 環境で部分的に、太字で表示するのを停止するために、FourcommasVerbatim 環境の中に、ThreecommasVerbatim 環境を置けるようにしています。つぎの例をご覧ください。

,,,,~
nw = nb
nextline = $io.gets
$io.pushback
if /^([ ]*)[^ ].*$/ =~ nextline
   nk = $1.bytesize
   nw = nk if nk < nb
end
,,,~
+-------------+-------------+
|             |             |
|      C      |             |
|             |             |
+-------------+      B      |
|             |             |
|      A      |             |
|             |             |
+-------------+-------------+
,,,.
,,,,.

と書くと、つぎのように整形されます。,,,~ と ,,,. に囲まれたところは、太字でなく、普通のフォントで表示されるようになっています。

nw = nb
nextline = $io.gets
$io.pushback
if /^([ ]*)[^ ].*$/ =~ nextline
   nk = $1.bytesize
   nw = nk if nk < nb
end
+-------------+-------------+
|             |             |
|      C      |             |
|             |             |
+-------------+      B      |
|             |             |
|      A      |             |
|             |             |
+-------------+-------------+

,,,~ と書いた行、,,,. と書いた行は、整形された結果では表示されません。

後述する @begin{verbatim} ... @end{verbatim} 環境で、オプション文字列 bold を指定すると、,,,~ と書いた行と ,,,,. と書いた行で囲んだ範囲と同じように整形されます。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

5.5.8 Dashline Display 環境, Onedash Display 環境, Threedashes Display 環境

---------------------------------------------------------~
こんな風に、長さが20桁以上の - (マイナス) の並びの後
に ~ (チルダー) を書いた行で始まり、20個以上の - 
の並びの後にピリオドで終わる範囲は
詰め込み処理せず、枠で囲んで、固定幅フォントで表示されます。
(h CO<sub>2</sub> /h)
---------------------------------------------------------.

このように書いたものは、つぎのように整形されます。

こんな風に、長さが20桁以上の - (マイナス) の並びの後
に ~ (チルダー) を書いた行で始まり、20個以上の - 
の並びの後にピリオドで終わる範囲は
詰め込み処理せず、枠で囲んで、固定幅フォントで表示されます。
(h CO<sub>2</sub> /h)

また、

-~
こんな風に、-~ (マイナスとチルダー) を置いて、すぐ改
行した行で始まり、行頭に -. (マイナスとピリオド) を置いて
すぐ改行した行で終わる範囲は、詰め込み処理せず、枠で囲ん
で、固定幅フォントで
表示されます。(h CO<sub>2</sub> /h)
-.

-~ ------------------------------------------------------
こんな風に、-~ (マイナスとチルダー) を置いて、すぐ改
行した行で始まり、行頭に -. (マイナスとピリオド) を置いて
すぐ改行した行で終わる範囲は、詰め込み処理せず、枠で囲ん
で、固定幅フォントで
表示されます。(h CO<sub>2</sub> /h)
-. ------------------------------------------------------

@begin{panel} -------------------------------------------
こんな風に、-~ (マイナスとチルダー) を置いて、すぐ改
行した行で始まり、行頭に -. (マイナスとピリオド) を置いて
すぐ改行した行で終わる範囲は、詰め込み処理せず、枠で囲ん
で、固定幅フォントで
表示されます。(h CO<sub>2</sub> /h)
@end{panel} ---------------------------------------------

のように書いたものは、つぎのように整形されます。

こんな風に、-~ (マイナスとチルダー) を置いて、すぐ改
行した行で始まり、行頭に -. (マイナスとピリオド) を置いて
すぐ改行した行で終わる範囲は、詰め込み処理せず、枠で囲ん
で、固定幅フォントで
表示されます。(h CO<sub>2</sub> /h)

こんな風に、-~ (マイナスとチルダー) を置いて、すぐ改
行した行で始まり、行頭に -. (マイナスとピリオド) を置いて
すぐ改行した行で終わる範囲は、詰め込み処理せず、枠で囲ん
で、固定幅フォントで
表示されます。(h CO<sub>2</sub> /h)

こんな風に、-~ (マイナスとチルダー) を置いて、すぐ改
行した行で始まり、行頭に -. (マイナスとピリオド) を置いて
すぐ改行した行で終わる範囲は、詰め込み処理せず、枠で囲ん
で、固定幅フォントで
表示されます。(h CO<sub>2</sub> /h)

panel 環境と Onedash Display 環境はほぼ同じように整形されます。フォントのサイズはほぼ地の文と同じです。

Dashline Display 環境と Threedashes Display 環境はほぼ同じように整形されます。プログラムコードを表示するときに使うような少し小さめの固定幅フォントが使用されます。

一行だけ、Dashline Display 環境で示したい場合、行頭に - を一個置いて、その後に半角空白を置いて ... という構文を考えたいところですが、計算式などで、マイナス記号が先頭に来ることの方が多いと思われるので、ちょっと変則ですが、--- と3個のマイナス記号とその後に半角空白を置くという方法を取ることにします。--- の直後の半角空白1個は無視されますが、その後の半角空白の個数は保存されます。

---   y = sin(x)
--- z = cos(x)

1. --- y = sin(x)
   --- z = cos(x)
   
   このように項目の中に、Display 環境を置くことができます。

これはつぎのように整形されます。

  y = sin(x)
z = cos(x)

  1.  y = sin(x)
    z = cos(x)
    
    このように項目の中に、Display 環境を置くことができます。

マイナスを3つ並べる方法は、一行だけ表示する場合だけでなく、複数行を囲んで使用することができます。

---~
y = sin(x)
z = cos(x)
---.

あるいは

---~ -------------------------------------------------------
y = sin(x)
z = cos(x)
---. -------------------------------------------------------

のように書いて、

y = sin(x)
z = cos(x)

と整形されます。

Onedash Display 環境, Threedashes Display 環境, Threecommass Display は、/色の名前/ を最初の - や --- の後に付加して背景色を指定することができます。

1. ;;; @(%) $caption = "- で囲んだときの色指定"
   -~ /lightcyan/
   y = sin(x)
   z = cos(x)
   ここのフォントは大きい。
   -.

2. ;;; @(%) $caption = "--- で囲んだときの色指定"
   ---~ /papayawhip/
   y = sin(x)
   z = cos(x)
   ここのフォントは小さい。
   ---.

3. ;;; @(%) $caption = ",,, で囲んだときの色指定"
   ,,,~ /mistyrose/
   y = sin(x)
   z = cos(x)
   ここのフォントは小さい。
   ,,,.

と書いて、つぎのように整形されます。

  1. - で囲んだときの色指定
    y = sin(x)
    z = cos(x)
    ここのフォントは大きい。
    

  2. --- で囲んだときの色指定
    y = sin(x)
    z = cos(x)
    ここのフォントは小さい。
    

  3. ,,, で囲んだときの色指定
    y = sin(x)
    z = cos(x)
    ここのフォントは小さい。
    

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

5.5.9 Two dots 記法と行末改行記号

行頭に .. (ピリオド2つ) を置いて、半角スペースを1個以上置いて、その後に半角スペース以外の文字を書くと、その前の行に詰め込まずに書き出されるという機能もあります。これを使うと、

 * tar zxvof foo.tar
   .. cd foo
   
   ここからは詰め込み
   モードになります。

と書いて、つぎのように整形されます。

行末に文字列 "[br]" を置くと、html ファイルに変換されるときに <br> が付加され、そこで改行されるようになります。

行末に、[br]
このような改行記号をおくと
そこで改行されます。

はつぎのように整形されます。

行末に、
このような改行記号をおくとそこで改行されます。

行末の改行記号 [br] と行頭の .. 記法との両方を記載したときは、改行記号は一つだけ有効とされるように調整されます。

行末に、[br]
.. このような改行記号をおくと
そこで改行されます。

はつぎのように整形されます。

行末に、
このような改行記号をおくとそこで改行されます。

行頭の .. (ピリオド2つ) の後に半角空白を1個だけ置いてすぐ後に文字列を書くと、その文字列は行頭から書かれます。行頭の .. (ピリオド2つ) の後に半角空白を2個以上置くと、その半角空白の個数に応じて半角空白が置かれます。例えば、.. (ピリオド2つ) の後に半角空白が5個あれば、1個少ない4個の半角空白が行頭に置かれます。たとえば、

行末に、[br]
..     このような改行記号をおくと、     そこで
改行されます。

は、つぎのように整形されます。

行末に、
    このような改行記号をおくと、 そこで改行されます。

.. で始まる行の .. (ピリオド2つ) の直後の半角空白は整形したとき保存され同じだけの空白が空くように整形されますが、文章が始まった後の複数の半角空白は通常のパラグラフの整形と同様に1個の半角空白を置いたのと同様に整形されます。上の例の「そこで」の前の半角空白の個数を見てください。整形したときには、半角空白は1個だったように見えます(※)。

※ html ファイルとして半角空白の個数を1個にしているのではなくて、ブラウザーが、半角空白1個のように見せているだけです。

間に空白行を置くのではなく、.. を置いて
..
のように書くと、空白行が取られます。

は、つぎのように整形されます。

間に空白行を置くのではなく、.. を置いて

のように書くと、空白行が取られます。

通常、.. をこのように置く必要はなく、単に、間に空白行を置けばいいのですが、この記法が役に立つこともあります。twTable 環境の簡易記法 H1 を参照してください。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

5.5.10 @begin{verbatim} ... @end{verbatim}

Referred at: [H1]

正規表現

  /^[ ]*@begin{verbatim([^{}]*)}(| [-]+)$/ または /^[ ]*@begin{verbatim([^{}]*)}{[^{}]*}(| [-]+)$/

にマッチする行を開始行とし、sub = $1 として、

  /^[ ]*@end{verbatim#{sub}}(| [-]+)$/

にマッチする行を終了行とする範囲の行は、詰め込み処理せず、置き換え処理 もされず、固定幅のフォントで表示されます。

@begin{verbatim}, @end{verbatim} が現れる開始行と終了行そのものは表示されません。

@begin{verbatim} -------------------------------------------
ここは、詰め込み処理
も置き換え処理もされません。
@end{verbatim} ---------------------------------------------

は、o2h を通すと、つぎのように整形されます。整形した結果では、開始行@begin{verbatim} と終了行 @end{verbatim} が表示されていないことに注意してください。

ここは、詰め込み処理
も置き換え処理もされません。

verbatim 環境は、,,,~ (カンマが3つとチルダー) の行と ,,,. (カンマが3つとピリオド) の行とで囲んだものと同じように整形されます。

,,,~
ここは、詰め込み処理
も置き換え処理もされません。
,,,.

は、o2h を通すと、つぎのように整形されます。

ここは、詰め込み処理
も置き換え処理もされません。

@begin{verbatim} ... @end{verbatim} を @begin{vb} ... @end{vb} と書くことができます。ただし、@begin{verbatim} で始めたら @end{verbatim} で終わり、@begin{vb} で始めたら @end{vb} で終わらないといけません。

verbatim 環境で標準以外の動作をするように指定するには、

@begin{verbatim}{...} ----------------------------------

のように、@begin{verbatim} や @begin{vb}の後ろに {...} の形の文字列を追加し、中括弧の中に動作を指定する情報を書きます。この追加した中括弧の中の文字列を、verbatim 環境のオプション文字列と呼びます。

例えば、verbatim 環境で背景色を指定するには、"bgcolor: 背景色の指定" を、文字色を指定するには、"color: 文字色の指定" をverbatim または vb の後のオプション文字列のところにに書きます。

例を示します。

@begin{vb}{bgcolor: beige color: crimson} ------------------
void main()
{
  cout << "Hello, world!";
}
@end{vb} ---------------------------------------------------

でつぎのように整形されます。

void main()
{
  cout << "Hello, world!";
}

verbatim 環境や vb 環境では、@end{verbatim} や @end{vb} が次に読み込まれるまでは、そのまま表示していくことになっているので、 @end{verbatim} や @end{vb} 自身を表示するには工夫が必要です。

@begin{verbatim} -------------------------------------------
@begin{vb} -------------------------------------------------
static void Main()
{
  Console.WriteLine("Hello World!");
}
@end{vb} ---------------------------------------------------
@end{verbatim} ---------------------------------------------

のように書くと、つぎのように整形されます。

@begin{vb} -------------------------------------------------
static void Main()
{
  Console.WriteLine("Hello World!");
}
@end{vb} ---------------------------------------------------

vb 環境で、行番号を付加する方法については、特殊環境を整形するときに行番号を付加する H1 を参照してください。また、プログラムソースファイルで、コードを示す方法については、proglist の指定 H1 を参照してください。

オプション文字列のところで、bold または bbold を指定すると、太字で表示されます。

@begin{vb}{bold} -------------------------------------------
static void Main()
{
  Console.WriteLine("Hello World!");
}
@end{vb} ---------------------------------------------------

で、

static void Main()
{
  Console.WriteLine("Hello World!");
}

と表示されます。太字で表示されています。

太字で表示すると、表示が乱れることがあります。例を示します。

@begin{verbatim}{bold} -------------------------------------
+-------------+-------------+
|             |             |
|      C      |             |
|             |             |
+-------------+      B      |
|             |             |
|      A      |             |
|             |             |
+-------------+-------------+
@end{verbatim} ---------------------------------------------

と書いて、つぎのように整形されます。

+-------------+-------------+
|             |             |
|      C      |             |
|             |             |
+-------------+      B      |
|             |             |
|      A      |             |
|             |             |
+-------------+-------------+

オプション文字列に bold を指定したのが表示が乱れた原因です。オプション文字列に bold を指定せず、

@begin{verbatim} -------------------------------------------
+-------------+-------------+
|             |             |
|      C      |             |
|             |             |
+-------------+      B      |
|             |             |
|      A      |             |
|             |             |
+-------------+-------------+
@end{verbatim} ---------------------------------------------

と書くと

+-------------+-------------+
|             |             |
|      C      |             |
|             |             |
+-------------+      B      |
|             |             |
|      A      |             |
|             |             |
+-------------+-------------+

と表示されます。

オプション文字列で bold と指定していても、,,,~ と ,,,. で囲まれた範囲は、太字ではなく、普通のフォントで表示されます。

したがって、

@begin{verbatim}{bold} ----------------------------------
nw = nb
nextline = $io.gets
$io.pushback
if /^([ ]*)[^ ].*$/ =~ nextline
   nk = $1.bytesize
   nw = nk if nk < nb
end
,,,~
+-------------+-------------+
|             |             |
|      C      |             |
|             |             |
+-------------+      B      |
|             |             |
|      A      |             |
|             |             |
+-------------+-------------+
,,,.
@end{verbatim} ------------------------------------------

と書くと、つぎのように整形されます。

nw = nb
nextline = $io.gets
$io.pushback
if /^([ ]*)[^ ].*$/ =~ nextline
   nk = $1.bytesize
   nw = nk if nk < nb
end
+-------------+-------------+
|             |             |
|      C      |             |
|             |             |
+-------------+      B      |
|             |             |
|      A      |             |
|             |             |
+-------------+-------------+

@begin{verbatim}{bold} ... @end{verbatim} で囲んだ範囲は、 ,,,,~ と書いた行と ,,,,. と書いた行で囲んだ範囲と同じように整形されます。

オプション文字列で、bold の代わりに、bbold と書くと、 ,,,~ と ,,,. を書いた行も表示され、,,,~ と ,,,. で囲まれた範囲は普通のフォントで表示されます。

@begin{verbatim}{bbold} ---------------------------------
nw = nb
nextline = $io.gets
$io.pushback
if /^([ ]*)[^ ].*$/ =~ nextline
   nk = $1.bytesize
   nw = nk if nk < nb
end
,,,~
+-------------+-------------+
|             |             |
|      C      |             |
|             |             |
+-------------+      B      |
|             |             |
|      A      |             |
|             |             |
+-------------+-------------+
,,,.
@end{verbatim} ------------------------------------------

と書くと、つぎのように整形されます。

nw = nb
nextline = $io.gets
$io.pushback
if /^([ ]*)[^ ].*$/ =~ nextline
   nk = $1.bytesize
   nw = nk if nk < nb
end
,,,~
+-------------+-------------+
|             |             |
|      C      |             |
|             |             |
+-------------+      B      |
|             |             |
|      A      |             |
|             |             |
+-------------+-------------+
,,,.

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

5.5.11 @begin{code} ... @end{code}

Referred at: [H1][H2][H3]

正規表現

  /^[ ]*@begin{code([^}]*)}(| [-]+)$/ または /^[ ]*@begin{code([^{}]*)}{[^{}]*}(| [-]+)$/

にマッチする行を開始行とし、sub = $1 として、

  /^[ ]*@end{code#{sub}}(| [-]+)$/

にマッチする行を終了行とする範囲の行は、プログラムコードとして、固定幅フォントで、枠で囲んで表示されます。

例えば、

@begin{code3} ----------------------------------------------
static void Main()
{
  Console.WriteLine("Hello World!");
}
@end{code3} ------------------------------------------------

は、つぎのように整形されます。

static void Main()
{
  Console.WriteLine("Hello World!");
}

{...} の中に書く code の後に任意の文字列を書くことができることに注意してください。この例では、code3 と書いています。

code 環境で標準以外の動作をするように指定するには、

@begin{code}{...} --------------------------------------

のように、@begin{code} の後ろに {...} の形の文字列を追加し、中括弧の中の ... のところに、動作を指定する情報を書きます。この追加した中括弧の中の文字列を、code 環境のオプション文字列と呼びます。

例えば、code 環境の枠のスタイルを指定するには、code 環境のオプション文字列に、solid, dashed, dotted, double のどれかを指定します。

@begin{code}{double} ---------------------------------------
static void Main()
{
  Console.WriteLine("Hello World!");
}
@end{code} -------------------------------------------------

は、つぎのように整形されます。

static void Main()
{
  Console.WriteLine("Hello World!");
}

背景色や文字色を指定する例を示します。枠の指定と同時に、他の指定をするときは、枠の指定をオプション文字列の先頭に書いてください。

@begin{code}{dashed bgcolor: beige} ------------------------
static void Main()
{
  Console.WriteLine("Hello World!");
}
@end{code} -------------------------------------------------

@begin{code}{bgcolor: beige color: crimson} ----------------
static void Main()
{
  Console.WriteLine("Hello World!");
}
@end{code} -------------------------------------------------

は、つぎのように整形されます。

static void Main()
{
  Console.WriteLine("Hello World!");
}

static void Main()
{
  Console.WriteLine("Hello World!");
}

@begin{code} ... @end{code} に囲まれた範囲に、行頭に * があると、search-headline-by-index-number 関数などはそれが見出し行だと扱って誤った結果をもたらす可能性があります。

そこで、行頭の * の前に = を置いて、=* としてください。o2h で整形するときは、行頭から * が書いてあったように処理します。

枠を表示したくない場合は、@begin{vb} ... @end{vb} で囲みます。

@begin{vb} -------------------------------------------------
static void Main()
{
  Console.WriteLine("Hello World!");
}
@end{vb} ---------------------------------------------------

と書くと、

static void Main()
{
  Console.WriteLine("Hello World!");
}

と表示されます。

オプション文字列で、bold を指定すると、太字で表示されます。

@begin{vb}{bold} -------------------------------------------
static void Main()
{
  Console.WriteLine("Hello World!");
}
@end{vb} ---------------------------------------------------

と書いて、

static void Main()
{
  Console.WriteLine("Hello World!");
}

と整形されます。

@begin{code} -----------------------------------------------
+-------------+-------------+
|             |             |
|      C      |             |
|             |             |
+-------------+      B      |
|             |             |
|      A      |             |
|             |             |
+-------------+-------------+
@end{code} -------------------------------------------------

@begin{code}{bold} -----------------------------------------
+-------------+-------------+
|             |             |
|      C      |             |
|             |             |
+-------------+      B      |
|             |             |
|      A      |             |
|             |             |
+-------------+-------------+
@end{code} -------------------------------------------------

と書いてつぎのように整形されます。

+-------------+-------------+
|             |             |
|      C      |             |
|             |             |
+-------------+      B      |
|             |             |
|      A      |             |
|             |             |
+-------------+-------------+

+-------------+-------------+
|             |             |
|      C      |             |
|             |             |
+-------------+      B      |
|             |             |
|      A      |             |
|             |             |
+-------------+-------------+

オプション文字列で bold と指定していても、,,,~ と ,,,. で囲まれた範囲は、太字ではなく、普通のフォントで表示されます。

したがって、

@begin{code}{bold} --------------------------------------
nw = nb
nextline = $io.gets
$io.pushback
if /^([ ]*)[^ ].*$/ =~ nextline
   nk = $1.bytesize
   nw = nk if nk < nb
end
,,,~
+-------------+-------------+
|             |             |
|      C      |             |
|             |             |
+-------------+      B      |
|             |             |
|      A      |             |
|             |             |
+-------------+-------------+
,,,.
@end{code} ----------------------------------------------

と書くと、つぎのように整形されます。

nw = nb
nextline = $io.gets
$io.pushback
if /^([ ]*)[^ ].*$/ =~ nextline
   nk = $1.bytesize
   nw = nk if nk < nb
end
+-------------+-------------+
|             |             |
|      C      |             |
|             |             |
+-------------+      B      |
|             |             |
|      A      |             |
|             |             |
+-------------+-------------+

オプション文字列で、bold の代わりに、bbold と書くと、 ,,,~ と ,,,. を書いた行も表示され、,,,~ と ,,,. で囲まれた範囲は普通のフォントで表示されます。@begin{verbatim} ... @end{verbatim} の場合と仕様は同じです。

code 環境で、行番号を付加する方法については、特殊環境を整形するときに行番号を付加する H2 を参照してください。また、プログラムソースファイルで、コードを示す方法については、proglist の指定 H2 を参照してください。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

5.5.12 @begin{panel} ... @end{panel}

Referred at: [H1][H2][H3]

正規表現

  /^[ ]*@begin{panel([^}]*)}(| [-]+)$/ または /^[ ]*@begin{panel([^{}]*)}{[^{}]*}(| [-]+)$/

にマッチする行を開始行とし、sub = $1 として、

  /^[ ]*@end{panel#{sub}}(| [-]+)$/

にマッチする行を終了行とする範囲の行は、詰め込み処理せず、そのまま表示されます。 置き換え処理 もされません。

左詰めの CommaVerbatim 環境とよく似ていますが、 @begin{panel} ... @end{panel} で囲まれた範囲は、枠で囲んで表示されます。

@begin{panel} ----------------------------------------------
ここは、詰め込み処理
も置き換え処理もされません。
@end{panel} ------------------------------------------------

と書いて、下のように表示されます。デフォールトで、panel 環境の背景色は、

   $default_panel_backcolor = "snow"

によって指定されています。

ここは、詰め込み処理
も置き換え処理もされません。

オプション文字列を指定して、背景色を指定できます。背景色を指定する例を示します。

@begin{panel}{bgcolor: beige} ------------------------------
ここは、詰め込み処理
も置き換え処理もされません。
@end{panel} ------------------------------------------------

は、つぎのように表示されます。

ここは、詰め込み処理
も置き換え処理もされません。

枠のスタイルを指定することもできます。panel の直後に、solid, dashed, dotted, double を指定することができます。

@begin{panel}{double bgcolor: beige} -----------------------
ここは、詰め込み処理
も置き換え処理もされません。
@end{panel} ------------------------------------------------

は、つぎのように表示されます。

ここは、詰め込み処理
も置き換え処理もされません。

詰め込んで、しかも枠で囲みたいときは、frame 環境を使ってください。つぎの例は、frame 環境を使って書いています。

@begin{frame}{solid bgcolor: beige} ------------------------
ここは、frame 環境を使っているので
詰め込こまれます。
詰め込み処理されて全体がひとつの段落として整形
されます。
中に、番号付きリストなどを置くこともできます。

間に空白行を置くこともできます。
@end{frame} ------------------------------------------------

これはつぎのように整形されます。

ここは、frame 環境を使っているので詰め込こまれます。詰め込み処理されて全体がひとつの段落として整形されます。中に、番号付きリストなどを置くこともできます。

間に空白行を置くこともできます。
panel 環境は、太字で表示されますが、オプション文字列で、notbold を指定すると、普通のフォントで表示されます。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

5.5.13 @begin{fpanel} ... @end{fpanel}

Referred at: [H1][H2]

fpanel 環境 Referred at: [H1]

正規表現

  /^[ ]*@begin{fpanel}(| [-]+)$/ または /^[ ]*@begin{fpanel}{[^{}]*}(| [-]+)$/

にマッチする行を開始行とし、

  /^[ ]*@end{fpanel}(| [-]+)$/

にマッチする行を終了行とする範囲の行は、パラグラフとして処理され、枠で囲んで表示されます。@begin{fpanel} と @end{fpanel} の間の行は、パラグラフとして詰め込み処理処理されます。ただし、間に空白行が来たら、その行に、<br><br> が書かれたように整形されます。

例を示します。

@begin{fpanel} ---------------------------------------------
ここは詰め込み処理されます。全体が一つの段落として整形されます。
ただし、間に空白行が来たら、その間で段落が終わり、つぎの行で段落が開始するように整形されます。

ここはつぎの段落のように整形
されます。
@end{fpanel} -----------------------------------------------

と書いて、つぎのように整形されます。

ここは詰め込み処理されます。全体が一つの段落として整形されます。ただし、間に空白行が来たら、その間で段落が終わり、つぎの行で段落が開始するように整形されます。

ここはつぎの段落のように整形されます。

fpanel 環境のデフォールトの背景色は、panel 環境と同じ色とされ、

   $default_panel_backcolor = "snow"

によって指定されています。

背景色を指定したいときは、つぎのようにします。

@begin{fpanel}{bgcolor: beige} -----------------------------
ここは詰め込み処理
されます。全体が一つの段落として整形されます。ただし、間に空白行が
来たら、その間で段落が終わり、つぎの行で段落が開始するように
整形されます。

ここはつぎの段落のように整形
されます。
@end{fpanel} -----------------------------------------------

これで、つぎのようになります。

ここは詰め込み処理されます。全体が一つの段落として整形されます。ただし、間に空白行が来たら、その間で段落が終わり、つぎの行で段落が開始するように整形されます。

ここはつぎの段落のように整形されます。

間に、箇条書きなど複雑な環境が含まれる場合は、 @begin{frame}{solid} ... @end{frame} の項目で説明する仕組みを利用してください。

別に、箇条書きなど複雑な環境が含まれなくても、frame 環境を使って構いません。fpanel を frame に変えて、枠線に solid を指定すると、と次のように整形されます。

ここは詰め込み処理されます。全体が一つの段落として整形されます。ただし、間に空白行が来たら、その間で段落が終わり、つぎの行で段落が開始するように整形されます。

ここはつぎの段落のように整形されます。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

5.5.14 @begin{ignore} ... @end{ignore}

@begin{ignore} ---------------------------------------------
ここは無視
します。
@end{ignore} -----------------------------------------------

のように書かれた部分は、o2h を使って html 文書に整形するときに無視されます。

ここに
@begin{ignore} ---------------------------------------------
ここは無視
します。
@end{ignore} -----------------------------------------------
無視された領域があります。

のように書かれていると、つぎのように整形されます。

ここに無視された領域があります。

@begin{ignore}で始まる行から @end{ignore}で始まる行までが全く無視されて、

ここに
無視された領域があります。

と書いてあったように。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

5.5.15 @begin{xTable} ... @end{xTable}

定型的な表を作成する環境として、つぎの 5つの環境が用意されています。

  1. cTable 環境 H1
  2. wTable 環境 H1
  3. tcTable 環境 H1
  4. twTable 環境 H1
  5. subTable 環境 H1

"xTable 環境"
ODR で提供されている、これらの、定型的な表を作成する環境である、cTable 環境、wTable 環境、tcTable 環境、twTable 環境、 subTable 環境を総称して、xTable 環境と呼ぶことにします。

定型的な表を作成するこれらの環境の説明文の中では、特に指定しなければ、html のタグを使用することができ、Emacs 関数 H3を使用することができます。

● cTable 環境 Referred at: [H1][H2][H3][H4][H5][H6]

@begin{cTable} ... @end{cTable} は 定型的な表を作成する特殊環境です。 cTable の c は color の c です。

列の数や、行の数は自由に設定できますが、セルの背景色は予め決められていて、利用者が指定することはできません。セルの中の文字列を左詰め、中央配置、右詰めに指定することができます。列全体に渡る行を配置して文章を書くことができます。

例を示して説明していきます。行番号は説明のために付加したものです。

001: @_cTable 環境の使用例
002: @begin{cTable}{center 80% 10% 20% null} --------------------
003: ============================================================
004: 県名
005:   ----------------------------------------------------------
006:   県庁所在地
007:     --------------------------------------------------------
008:     >< 特徴
009: ------------------------------------------------------------
010: 京都府
011:   ----------------------------------------------------------
012:   > 京都市
013:     --------------------------------------------------------
014:     京都府(きょうとふ)は、日本国・近畿地方(関西地方)
015: 016:  都道府県。
017:     <br><br>
018:     794年の平安京遷都以来、天皇の御所がある。令制国
019:       でいう山城国の
020:     全域、丹波国の東部および丹後国の全域を府域とする。
021: ------------------------------------------------------------
022: 長崎県
023:   ----------------------------------------------------------
024:   . 
025:     --------------------------------------------------------
026:     長崎県(ながさきけん)は、日本の九州西端部にある県。
027:     
028:     東に佐賀県と隣接する他は、周囲を海に囲まれている。対馬、
029:     壱岐、五島列島などの島嶼が971あり、その数は日本一である。
030: ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
031: □京都府と長崎県の比較表。Wikipedia に記載されていたものを参
032: 考にしました。
033: 長い文章を書いても自動的に折り返されます。
034: (H "Emacs 関数")を使用することができます。[br]
035: html のタグを使用できるので、箇条書きもできます。
036: <dl>
037:     <dt>罹災証明書
038:     <dd>災害対策基本法で、「市町村長は、当該市町村の地域
039:         に関わる災害が発生した場合において、当該地域の被災者
040:         から申請があったときは、遅滞なく、住家の被害その他の
041:         当該市町村長が定める種類の被害の状況を調査し、罹災証
042:         明書 (災害による被害の程度を証明する書面) を交付しな
043:         ければならない。」と定められている。
044:     <dt>被災者支援と罹災証明書
045:     <dd>被災者への支援策としては、給付、融資、減免・猶予、現物
046:         支給などの各種対策があり、それらの支援を受けるときに、
047:         罹災証明書の提示を求められることがある。
048: </dl>
049: @end{cTable} -----------------------------------------------

のように書いて、次のように整形されます。

cTable 環境の使用例 Referred at: [H1][H2][H3]
県名 県庁所在地 特徴
京都府 京都市  京都府(きょうとふ)は、日本国・近畿地方(関西地方)の都道府県。

794年の平安京遷都以来、天皇の御所がある。令制国でいう山城国の全域、丹波国の東部および丹後国の全域を府域とする。
長崎県
長崎県(ながさきけん)は、日本の九州西端部にある県。

東に佐賀県と隣接する他は、周囲を海に囲まれている。対馬、壱岐、五島列島などの島嶼が971あり、その数は日本一である。
□京都府と長崎県の比較表。Wikipedia に記載されていたものを参考にしました。長い文章を書いても自動的に折り返されます。 Emacs 関数 H4を使用することができます。
html のタグを使用できるので、箇条書きもできます。
罹災証明書
災害対策基本法で、「市町村長は、当該市町村の地域に関わる災害が発生した場合において、当該地域の被災者から申請があったときは、遅滞なく、住家の被害その他の当該市町村長が定める種類の被害の状況を調査し、罹災証明書 (災害による被害の程度を証明する書面) を交付しなければならない。」と定められている。
被災者支援と罹災証明書
被災者への支援策としては、給付、融資、減免・猶予、現物支給などの各種対策があり、それらの支援を受けるときに、罹災証明書の提示を求められることがある。

cTable 環境の開始行 (002行) は、

@begin{cTable}{center 80% 10% 20% null}

のような形をしていて、@begin{cTable}{...} の中の {...} のところで、表全体の配置位置、幅と、表の列の幅を指定する文字列を表の列の個数分だけ書きます。

この例では、center を指定して表全体を中央配置にし、表全体の幅は、行の幅の 80%にしています。その後に3個の文字列 10% 20% null があるので、表の列は、3個あり(※)、最初の列の幅が全体の幅の10%、2番目の列の幅が全体の幅の20%、3番目の列の幅は指定していません。null は幅を指定しないことを意味し、残り全部の幅を持つことになります。この場合は、3番目の列は、70%に指定したことになります。どれか一つの列の幅を null と指定してください。結局、3番目の列の幅は、80% X 0.7 で、行全体の幅の56%になりま。

※ この例では、"10% 20% null" とあることで表の列が 3 列であると指定していることになりました。"null" だけを指定すると、列は 1 列ということになります。

列の幅を指定するところでは、この例のように、数字の最後に %をつけて、割合で指定することも可能ですが、整数値だけを指定して、ドット数で指定するということも可能です。

※ Google 日本語入力を使っている場合は、簡単な四則演算ができます。全角文字 15 字分の幅は、余裕を含めて、15*16 + 10 を計算すればいいのですが、全角で、15*16+10=と入力して、TAB を押して改行すれば、250 と入力されます。

003行のように行頭から行末まで = を5個以上連続して書いて改行した行は、標題行を指定する行の開始を意味します。また、009行や 020行のように、行頭から行末まで - を5個以上連続して書いた行は、データ行を指定する行の開始を意味します。

特に指定しなければ、セルの中の文字列は左寄せされますが、008行のように、データの先頭に、">< " を置くと中央配置されます。012行のように、データの先頭に、"> " を置くと、右寄せされます。字下げして書いた cTable 環境 H1 の人口のデータのところは、先頭に"> " を置いて右寄せしています。

表の内容は、行頭に1個以上の任意個数の空白を置いてその後に -を連ねた行 (005行、007行、011行、013行、022行、023行) で区切って、行ごとに書いて行きます。各セルの内容を記述する部分では、html のコードを直接書くことができ、<br> で改行を指定できます。

004行、010行、022行のように第1列のデータを書く行は、@begin{cTable} と同じ字下げ位置から書き出す必要があります。

第2列以降のデータは、@begin{cTable}の字下げ位置より、1文字以上下げて、- を5個以上連続して書いた区切り線を書き、その次の行から同じ字下げ量で書きます。

字下げして書いた区切り線の字下げ量に等しいか少ない字下げ量で書かれた行の先頭の半角空白文字列は整形のときに削除されます。字下げして書いた区切り線の字下げ量より大きい字下げ量で書かれた行では、区切り線の字下げ量分の半角空白文字列が削除されます。

例えば、013行から020行に、「京都府」の行の第3列のデータが書かれています。013行の区切り線は、半角4文字分字下げして書かれているので、014行から020行までのデータも半角4文字分字下げして書くのが原則ですが、016行は、半角1文字分しか字下げされていません。この場合、016行の行頭の1文字分の半角空白文字列が無視されます。019行は、013行の区切り線より大きい字下げ量で書かれています。これらの 014行から020行までの、行頭の半角空白文字列は無視されます。

024行に書くべきデータ「長崎市」のところにピリオド1個書いています。この例のように、データをピリオド1個とすると、そのセルは空欄になります。ピリオド自身をデータとして置きたいときは、". ." (ピリオド+半角空白+ピリオド) を書きます。

030行のように、行頭から行末まで + を5個以上連続して書いて改行した行は、全コラムを1コラムに統合して書くデータ行が次に書かれることを示します。

034行のように、セルのデータを書くところ、及び $endnote で、Emacs 関数を使用することができます。

@begin{cTable} ... @end{cTable} の間で、セルに書かれた文章を読み取るとき、区切り線の字下げ量と等しいか小さい字下げ量の行頭の半角空白文字列は削除されます。この機能を利用して、データ行のデータを見やすく字下げすることができます。

$caption を指定すると、見出しとして扱われて、cTable 環境の使用例 H1 のように参照すると、$caption を表示する部分で、参照している箇所へのリンクが表示されます。

cTable 環境を置く親の詰め込み環境の字下げ位置より、cTable 環境の開始位置が大きく字下げした位置で始まると、その位置で、引用環境 H2 が内部的に生成されて、その最初の要素として cTable 環境が置かれたように処理されます。この場合は、表全体の配置位置を指定するところで、center を指定しない方が分かりやすいでしょう。left と指定することもできますが、省略すれば、自動的に left を指定したものと見なされます。この仕組は、xTable 環境に共通です。

字下げして書いた cTable 環境 Referred at: [H1][H2]
県名 県庁所在地 人口 特徴
京都府 京都市 261 万人  京都府(きょうとふ)は、日本国・近畿地方(関西地方)の都道府県。
長崎県
137 万人  長崎県(ながさきけん)は、日本の九州西端部にある県。
□京都府と長崎県の比較表。中央合わせや右寄せの例

□京都府と長崎県の比較表。Wikipedia に記載されていたものを参考にしました。ここの文章は、 cTable 環境の後の部分に書いています。詰め込み処理されるので表に対する補足を書くことができます。

cTable 環境を字下げして配置するときは、center を指定せず、サイズとして 98% を指定すると、cTable 環境で作成された表とその後の文章のバランスがとれます。2文字字下げして、98% が丁度いいと思います。

字下げして書いた cTable 環境 H2 の例では、@begin 行は

@begin{cTable}{98% 10% 15% 15% null}

と書いています。

一行に複数列のデータを纏めて書くこともできます。

行頭に "= " (= の後に半角空白) があるとタイトル行、"- " (- の後に半角空白) があるとデータ行です。

列のデータの間に " : " (コロンの前後に半角空白) を置きます。列のデータの区切り記号を置くと一行に複数列のデータを書くことができます。データを空白にするときは、. (ピリオド) を1個置いてください。ピリオド自身をデータとして表示するには、. . (ピリオド+半角空白+ピリオド) を置いてください。

@begin{cTable}{60% 25% 25% 25% null} -----------------------
= 県名    : 県庁所在地 : 県人口      : 県面積
- 京都府  : 京都市     : > 261 万人  : > 4613 km<sup>2</sup>
- 長崎県  : .          : > 137 万人  : > 4093 km<sup>2</sup>
@end{cTable} -----------------------------------------------

と書いて、つぎのように整形されます。

県名 県庁所在地 県人口 県面積
京都府 京都市 261 万人  4613 km2
長崎県
137 万人  4093 km2

@begin{cTable}{60% 25% 25% 25% null} -----------------------
= 県名   : 県庁所在地 : 県人口      : 県面積
- 京都府 : 京都市     : > 261 万人  : > 4613 km<sup>2</sup>
- 長崎県
    --------------------------------------------------------
    .    : > 137 万人  : > 4093 km<sup>2</sup>
@end{cTable} -----------------------------------------------

あるいは、

@begin{cTable}{60% 25% 25% 25% null} -----------------------
= 県名   : 県庁所在地 : 県人口      : 県面積
- 京都府 : 京都市     : > 261 万人  : > 4613 km<sup>2</sup>
- 長崎県
    - .      : > 137 万人  : > 4093 km<sup>2</sup>
@end{cTable} -----------------------------------------------

のように書くこともできます。行のデータで、2列目以降のデータを書くときには、- で始めるときは、- は字下げして書き出してください。

ここで、

    - .     : > 137 万人  : > 4093 km<sup>2</sup>

は、

    --------------------------------------------------------
    .       : > 137 万人  : > 4093 km<sup>2</sup>

のように書くのと同等です。

タイトル行を始める "= " やデータ行を始める "- " の機能によらず、単に行頭に "= " や "- " を置きたいときは、".. = " や ".. - " のように書いてください。また、データの列の区切りの ":" の意味ではないコロンを書きたいときは、"¥:" のようにコロンの前に ¥ を置いてください。

ファイルの種類と startdoc 文 H1 も参照してください。セルの行の背景色が互い違いに変わっているのが良く分かります。

一列の表を作成することもできます。例を示します。

@begin{cTable}{40% null} --------------------------------
---------------------------------------------------------
Upgrade to v1.1.24.00 (Unicode 64-bit)
---------------------------------------------------------
Custom Installation
@end{cTable} --------------------------------------------

これは、

@begin{cTable}{40% null} --------------------------------
- Upgrade to v1.1.24.00 (Unicode 64-bit)
- Custom Installation
@end{cTable} --------------------------------------------

のように書くこともできます。これを整形すると、つぎのように表示されます。

Upgrade to v1.1.24.00 (Unicode 64-bit)
Custom Installation

<br> を置いて列の中で改行することもできます。 grepコマンドとPowerShellのsls (Select-String)の比較 のページに書いてある表を書いてみたものです。grep の列で、複数行を書いたセルがあります。

grepとの比較表
やりたいこと grep Select-String
大文字・小文字の区別 -i -CaseSensitive
正規表現 -E -SimpleMatch
マッチしない行を検索 -v -NotMatch
前後表示 -A 《行数》
-B 《行数》
-Context 《行数
文字コード指定 不可 -Encoding 《文字エンコーディング名》
ディレクトリを再帰的に検索 -r (dir -recurse 《ファイル名パターン》)
ファイル名のみ出力 -l
-L
(後述)

● wTable 環境 Referred at: [H1][H2][H3][H4][H5]

wTable は定型的な表を書くのに使用する環境です。

同様な環境としてcTable があり、cTable と書くところを wTableと書く以外はcTable 環境 H2とほとんど同じ書き方をして表を作成できます。

この wTable 環境は、cTable 環境と異なり、デフォールトでは、背景を色付けしません。wTable の w は white の w です。

背景色を指定するときは、オプション文字列の先頭に

bgcolor: beige

のような指定を入れて下さい。bgcolor: は短く bgc: と書くこともできます。wTable 環境の背景色の設定 H1 を参考にしてください。

wTable 環境ではセルのデータのところに、html のタグを書くことができます。

  : @_wTable 環境の使用例
  @begin{wTable}{left 700 25% null} ------------------------
  ==========================================================
  リストの名前
    --------------------------------------------------------
    リストの概要
  ----------------------------------------------------------
  番号付きリスト
    --------------------------------------------------------
    見出しに番号がつけられるリスト。番号の代わりにアルファベ
    ットも使用できる。
  ----------------------------------------------------------
  マーク付きリスト
    --------------------------------------------------------
    ++、* または ** を見出しにするリスト。
  ----------------------------------------------------------
  標題つきリスト
    --------------------------------------------------------
    標題とその説明という形のリスト。標題の部分をボールドにす
    ることができる。標題を表示するのに一行とる。<br>
    改行もできる。
  ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  □京都府と長崎県の比較表。Wikipedia に記載されていたものを
  参考にしました。長い文章を書いても自動的に折り
  返されます。<br>
  (H "Emacs 関数")を使用することができます。
  @end{wTable} ---------------------------------------------

と書いてつぎのように整形されます。

wTable 環境の使用例 Referred at: [H1][H2]
リストの名前 リストの概要
番号付きリスト 見出しに番号がつけられるリスト。番号の代わりにアルファベットも使用できる。
マーク付きリスト ++、* または ** を見出しにするリスト。
標題つきリスト 標題とその説明という形のリスト。標題の部分をボールドにすることができる。標題を表示するのに一行とる。
改行もできる。
□京都府と長崎県の比較表。Wikipedia に記載されていたものを参考にしました。長い文章を書いても自動的に折り返されます。
Emacs 関数 H5を使用することができます。

cTable 環境と同様、一行に複数列のデータを纏めて書くこともできます。

@begin{wTable}{50% 35% 35% null} -------------------------
= 県名    : 県庁所在地 : 人口
- 京都府  : 京都市     : > 261 万人
- 長崎県  : 長崎市     
          : > 137 万人
@end{wTable} ---------------------------------------------

と書いて、つぎのように整形されます。

県名 県庁所在地 人口
京都府 京都市 261 万人 
長崎県 長崎市 137 万人 

wTable 環境を使って、コードとそれから作成された画像を並べて表示できます。

\begin{tikzpicture}
\fill[yellow] (-0.1, -0.1) rectangle (2.1,1.1);
\draw[-latex] (0,0) -- (2,0);
\draw[-latex] (0,0) -- (0,1);
\draw[very thick] (0,0) .. controls (1,0) .. (2,1);
\end{tikzpicture}
表示失敗?: ./win-odr.odr--sample.png

● tcTable 環境 Referred at: [H1][H2][H3][H4]

列が2つの場合に特化した cTable 環境です。

tcTable の t は Two columns の t です。

tcTable 環境の、cTable 環境との違いは、tcTable 環境では列が2つに特定されたので、列幅指定が1つだけでよいことになったことです。cTable の場合は、例えば、列が3つある場合は、3つの列幅を指定して、そのうち1つを null にするという方式でしたが、tcTable 環境では、第2列を null とすることに決め打ちして(※)、第1列の列幅だけを指定することにします。

※ 特別に、第1列の幅を null に指定し、第2列の列幅を指定することもできます。

tcTable は基本的に cTable環境と同じなので、emacs 関数を使えます。セルの中で、行末に [br] を置いて、改行を指定することもできます。セルの中で html のタグを使うこともできます。

行頭から "= " に続けて文字列を書くと、ヘッダ行第1列を指定したものと見なされます。第1列のヘッダ行が続く場合は、行頭から書きます。

ヘッダ行の第2列のデータ (第2列のヘッダ) は、字下げして書きます。

行頭から "- " に続けて文字列を書くと、データ行の第1列を指定したものとみなされます。第1列のデータが続く場合は、行頭から書きます(※)。

※ 次に示す tcTable 環境の使用例のコード H1の005行がその例です。006 行の「リスト」は、行頭からデータが書かれているので、その前の 005 行の「番号付き」の続きと見なされます。

第2列のデータは、同じ字下げ量で、字下げして書きます。

行頭から + を連続して書いて改行した行の後に、全コラムを1コラムに統合して書くデータを書けることは、wTable 環境と同様です。

cTable 環境と同様に、背景色は書き換えプログラムで指定されるので、ユーザは背景色を指定できません。

例を示します。内容は、cTable 環境の使用例 H2 と内容と大体同じですが、コンパクトに書くことができています。

tcTable 環境の使用例のコード Referred at: [H1]
001:   @_tcTable 環境の使用例
002:   @begin{tcTable}{left 98% 130} ----------------------------
003:   = >< リストの名前
004:       >< リストの概要
005:   - 番号付き
006:   リスト
007:       見出しに番号がつけられるリスト。
008:       .. 番号の代わりにアルファベットも使用できる。
009:   - マーク付きリスト
010:       ++、* または ** を見出しにするリスト。
011:   - 標題つきリスト
012:       標題とその説明という形のリスト。標題の部分をボールドに
013:       することができる。標題を表示するのに一行とる。[br]
014:       改行もできる。
015:   - 第1欄でも[br]で[br]
016:   改行可能
017:       この例のように第1欄でも [br] を書くことが
018:       できます。[br][br]
019:       行末に置いた [br] は複数個数でもすべて改行記号に置き換
020:       えられます。
021:   - . ,,, を書いた行で挟む
022:       プログラムコードなどを示したい場合は、,,, を書いて
023:       すぐ改行した行と ,,,. を書いた行で囲みます。
024: 
025:       ,,,~
026:       static void Main()
027:       {
028:         Console.WriteLine("Hello World!");
029:       }
030:       ,,,.
031:   - . --- を書いた行で挟む
032:       プログラムコードなどを示したい場合に、--- を書いて
033:       すぐ改行した行で囲むと枠で囲んで示します。
034: 
035:       ---~
036:       static void Main()
037:       {
038:         Console.WriteLine("Hello World!");
039:       }
040:       ---.
041:   ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
042:   □ これらのリスト環境は、「説明文」を書く部分を持っていて、
043:   その部分は、詰め込み処理される。詰め込み処理される部分に、
044:   また、入れ子にして、
045:   これらのリスト環境を置くことができる。[br][br]
046:   tcTableでは、(H "番号付きリスト") のように (H "Emacs 関数")
047:   を使用できる。
048:   @end{tcTable} --------------------------------------------

と書いてつぎのように整形されます。cTable 環境で必要だった区切り線が不要になった分、コンパクトに書くことができています。

tcTable 環境の使用例 Referred at: [H1]
リストの名前 リストの概要
番号付きリスト 見出しに番号がつけられるリスト。
番号の代わりにアルファベットも使用できる。
マーク付きリスト ++、* または ** を見出しにするリスト。
標題つきリスト 標題とその説明という形のリスト。標題の部分をボールドにすることができる。標題を表示するのに一行とる。
改行もできる。
第1欄でも[br]で
改行可能
この例のように第1欄でも [br] を書くことができます。

行末に置いた [br] は複数個数でもすべて改行記号に置き換えられます。
,,,~ と ,,,. を書いた行で挟む
プログラムコードなどを示したい場合は、 ,,,~ と ,,,. を書いた行で囲みます。

static void Main()
{
  Console.WriteLine("Hello World!");
}
---~ と ---. を書いた行で挟む
プログラムコードなどを示したい場合に、--- を書いてすぐ改行した行で囲むと枠で囲んで示します。

static void Main()
{
  Console.WriteLine("Hello World!");
}

□ これらのリスト環境は、「説明文」を書く部分を持っていて、その部分は、詰め込み処理される。詰め込み処理される部分に、また、入れ子にして、これらのリスト環境を置くことができる。

tcTableでは、番号付きリスト H1 のように Emacs 関数 H6を使用できる。

一行に2列のデータを纏めて書くこともできます。

@begin{tcTable}{40% 45%} ----------------------------------
= 県名   : 人口
- 京都府 : > 261 万人
- 長崎県 : > 137 万人
@end{tcTable} ---------------------------------------------

@begin{tcTable}{98% 20%} --------------------------------
= キー     : 機能の説明
- F2       : バッファリストが表示され、表示されたリストから
    ジャンプしたいリストを選択します。
    .. select-buffer
- F3       : 現在表示されているバッファ以外のバッファを閉じ
             ます。
- F5       : 次を検索 (ファイラーでは、すべて選択)
- C-x 9 ¥: : C-¥: を押したときの動作を決めます。
@end{tcTable} --------------------------------------------

と書いて、つぎのように整形されます。

県名 人口
京都府 261 万人 
長崎県 137 万人 

キー 機能の説明
F2 バッファリストが表示され、表示されたリストからジャンプしたいリストを選択します。
select-buffer
F3 現在表示されているバッファ以外のバッファを閉じます。
F5 次を検索 (ファイラーでは、すべて選択)
C-x 9 : C-: を押したときの動作を決めます。

第2列の幅を指定する例を示します。

@begin{tcTable}{40% null 30%} -----------------------------
= 県名   : 人口
- 京都府 : > 261 万人
- 長崎県 : > 137 万人
@end{tcTable} ---------------------------------------------

でつぎのように整形されます。

県名 人口
京都府 261 万人 
長崎県 137 万人 

● twTable 環境 Referred at: [H1][H2][H3][H4][H5]

列が2つの場合に特化した wTable 環境です。

twTable の t は Two columns の t です。

twTable 環境の、wTable 環境との違いは、twTable 環境では列が2つに特定されたので、列幅指定が1つだけでよいことになったことです。wTable の場合は、例えば、列が3つある場合は、3つの列幅を指定して、そのうち1つを null にするという方式でしたが、twTable 環境では、第2列を null とすることに決め打ちして、第1列の列幅を指定することにします。

※ 特別に、第1列の幅を null に指定し、その後に第2列の列幅を指定するという様式で第2列の列幅の方を指定することもできます。

twTable は基本的に wTable環境と同じなので、emacs 関数を使えます。セルの中で、行末に [br] を置いて、改行を指定することもできます。セルの中で html のタグを使うことはできません。

行頭から "= " に続けて文字列を書くと、ヘッダ行の第1列を指定したものと見なされます。第1列のヘッダ行が続く場合は、行頭から書きます。

ヘッダ行の第2列のデータ (第2列のヘッダ) は、字下げして書きます。

行頭から "- " に続けて文字列を書くと、データ行の第1列を指定したものとみなされます。第1列のデータが続く場合は、行頭から書きます。

第2列のデータは、字下げして書きます。

行頭から + を連続して書いて改行した行の後に、全コラムを1コラムに統合して書くデータを書けることは、wTable 環境と同様です。

wTable 環境と同様に、デフォールトでは、背景を色付けしません。

背景色を指定するときは、オプション文字列の先頭に

bgcolor: beige

のような指定を入れて下さい。 wTable 環境の背景色の設定 H2 を参考にしてください。

例を示します。内容は、wTable 環境の使用例 H1 と内容と大体同じですが、コンパクトに書くことができています。

001:   @_twTable 環境の使用例
002:   @begin{twTable}{left 700 25%} ----------------------------
003:   = リストの名前
004:       リストの概要
005:   - 番号付きリスト
006:       見出しに番号がつけられるリスト。番号の代わりにアルファ
007:       ベットも使用できる。
008:   - マーク付きリスト
009:       ++、* または ** を見出しにするリスト。
010:   - 標題つきリスト
011:       標題とその説明という形のリスト。標題の部分をボールドに
012:       することができる。標題を表示するのに一行とる。[br]
013:       改行もできる。
014:   ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
015:   □ これらのリスト環境は、「説明文」を書く部分を持っていて、
016:   その部分は、詰め込み処理される。詰め込み処理される部分に、
017:   また、入れ子にして、
018:   これらのリスト環境を置くことができる。[br][br]
019:   twTableでは、(H "番号付きリスト") のように Emacs 関数を使用
020:   できる。
021:   @end{twTable} --------------------------------------------

と書いてつぎのように整形されます。wTable 環境で必要だった区切り線が不要になった分、コンパクトに書くことができています。

twTable 環境の使用例 Referred at: [H1]
リストの名前 リストの概要
番号付きリスト 見出しに番号がつけられるリスト。番号の代わりにアルファベットも使用できる。
マーク付きリスト ++、* または ** を見出しにするリスト。
標題つきリスト 標題とその説明という形のリスト。標題の部分をボールドにすることができる。標題を表示するのに一行とる。
改行もできる。
□ これらのリスト環境は、「説明文」を書く部分を持っていて、その部分は、詰め込み処理される。詰め込み処理される部分に、また、入れ子にして、これらのリスト環境を置くことができる。

twTableでは、番号付きリスト H2 のように Emacs 関数を使用できる。

一行に2列のデータを纏めて書くこともできます。

@begin{twTable}{bgc: beige 40% 45%} -----------------------
= 県名   : 人口
- 京都府 : > 261 万人
- 長崎県 : > 137 万人
@end{twTable} ---------------------------------------------

と書いて、つぎのように整形されます。

県名 人口
京都府 261 万人 
長崎県 137 万人 

● twTable 環境の簡易記法 Referred at: [H1][H2][H3][H4]

特別に、

@begin{twTable}{100% 20%} ---------------------------------
= 項目名     : 説明
- 項目名1    : 説明1
- 項目名2    : 説明2
@end{twTable} ---------------------------------------------

と書く代わりに

= 項目名     : 説明
- 項目名1    : 説明1
- 項目名2    : 説明2

のように書くことができます。この記法を、twTable 環境の簡易記法と呼ぶことにします。

twTable 環境の簡易記法では、@begin{twTable} の行と @end{twTable} の行とを省略し、@end{twTable} を書いた行を置く代わりに、空白行を置くものとします。

※ twTable 環境の簡易記法では、第2列に空白行を置くと、twTable 環境自身が終了するとみなされることになるので、普通には、第2列に空白行を置くことができなくなってしまいます。twTable 環境の簡易記法を使いながら、第2列に空白行を置くには、.. だけを置いた行を挿入します。

この twTable 環境の簡易記法により、

= 項目名     : 説明
- 項目名1    : 説明1
- 項目名2    : 説明2
               ..
               説明2の続き

と書いて次のように整形されます。

項目名 説明
項目名1 説明1
項目名2 説明2

説明2の続き

最初の行では、第2欄の開始を示す : も含めて書かないといけません。

twTable 環境の簡易記法では、第1欄の幅は、最初の行の文字列から決められます。この例では、最初の行の、

  = 項目名     : 説明

から決められています。第1欄は、"= " の後で " : " の前にある文字列 "項目名    " の幅から決められます。"項目名" が全角文字3文字、その後に半角空白文字4文字があり、これから、第一欄の幅として、16 × 3 + 12 × 4 + 24 ドットと計算して出しています。

※ 半角文字が表示されるときの横幅は文字によって異なりますが、英大文字の場合大体12ドット幅と見積もられるので、半角文字は、1字12ドットとして計算しています。英大文字の I や、英小文字の幅は、これより小さいので、英小文字が含まれている場合には、少し広めに見積もることになります。

通常は、twTable 環境の表は字下げ分を除いた残りの幅を全幅とし、このようにして第一欄の幅が決定され、第二欄の幅は、第一欄の幅を差し引いた幅とされます。

第2欄の幅も指定したい場合は、

= 区間         : 金額       .
- 京都--東京   : >  13,080 円
- 京都--桃山   : >     190 円

のように、最初の行の第2欄の最後に " ." (ピリオッドの前に半角空白を1個以上置き、ピリオッドで行を終える) を書きます。このピリオッドは表示されません。

ピリオッドを表示させたい場合は、ピリオッドの後に半角空白を入れてください。つまり、ピリオッドで終わらないということです。そうすれば、第2欄の幅を指定するという意味は持たないことになります。

※ 第2欄のセル内の先頭に > を書いているのは、その後の内容 (この例では、"13,080 円" や "190 円") を右寄せすることを指示しています。このように第2欄のデータを右寄せするときは、第2欄の幅を指定する必要があります。そうでないと、ページの右端に寄せることになってしまいます。

このように第2欄がピリオッドで終わっていると、そこの第2欄の長さも考慮して、表の全体の幅が決められます。twTable 全体の幅は、第1欄による指定の長さと第2欄の指定による長さの合計に設定されます。それで、つぎのように整形されます。

区間 金額
京都--東京 13,080 円 
京都--桃山 190 円 

第1欄の幅の設定に失敗することもあります。例を示します。

= 環境変数名 : 値
- DESKTOPWRK : C:¥Users¥me¥Desktop¥desktopWork
- DIRLINK    : C:¥Users¥me¥Dropbox¥dirlink
- DROPBOX    : C:¥Users¥me¥Dropbox

これでつぎのように整形されます。

環境変数名
DESKTOPWORK C:\Users\me\Desktop\desktopWork
DIRLINK C:\Users\me\Dropbox\dirlink
DROPBOX C:\Users\me\Dropbox

この例では、第1欄の幅の設定がうまく行っていません。第1欄の DESKTOPWORK が第1欄の幅より大きく、詰まりすぎています。固定幅フォントのときは、半角英数字は全角文字の半幅になりますが、普通のフォントで表示すると、半角英数字の幅は平均的にみて、固定幅フォントの全角文字の半幅より広くなるのが原因です。

この問題を回避するために、第一欄の長さが一番長い行を最初に置いて、その行からは、第一欄の長さだけを読み取るようにするために、行頭の記号である = や - の代わりに、+ を書いた行を置くことができます。

※ このように、欄幅を指定するために置く、+ で書き始める行を欄幅指定行と呼ぶことにします。

それで、

+ DESKTOPWORK : C:¥Users¥me¥Desktop¥desktopWork
= 環境変数名  : 値
- DESKTOPWORK : C:¥Users¥me¥Desktop¥desktopWork
- DIRLINK     : C:¥Users¥me¥Dropbox¥dirlink
- DROPBOX     : C:¥Users¥me¥Dropbox

あるいは、

+ ----------- : -------------------------------
= 環境変数名  : 値
- DESKTOPWORK : C:¥Users¥me¥Desktop¥desktopWork
- DIRLINK     : C:¥Users¥me¥Dropbox¥dirlink
- DROPBOX     : C:¥Users¥me¥Dropbox

と書くとつぎのように整形されます(※)。

環境変数名
DESKTOPWORK C:\Users\me\Desktop\desktopWork
DIRLINK C:\Users\me\Dropbox\dirlink
DROPBOX C:\Users\me\Dropbox

※ 2番目の書き方の方が、その行が欄幅指定行であることが分かりやすいと思います。

欄幅指定行は、欄の幅を指定するためだけに用いられ、その内容には意味がないので、半角文字のところには半角のハイフンを、全角文字のところには、全角の−やー(漢字の長音記号)や全角空白 を置いて構いません。

第2欄を " ." で終えるという記法は、欄幅指定行でも使えるので、

+ ーーーーーー : ーーーーーー .
= 区間         : 金額
- 京都--東京   : >  13,080 円
- 京都--桃山   : >     190 円

のように書くこともでき、

区間 金額
京都--東京 13,080 円 
京都--桃山 190 円 

のように整形されます。

● tcTable 環境の簡易記法

[2017-11-15] twTable 環境の簡易記法を tcTable 環境でも利用できるようにしました。ただし、表の記述のうち、一行目だけ、先頭文字の +、 =, - のところを +., =., -. に替えるものとします。先頭文字が +., =., -. であることが、tcTable 環境の始まりであることを示しているとされます。

例を示します。

+. ーーーーーー : ーーーーーー .
=  区間         : 金額
-  京都--東京   : >  13,080 円
-  京都--桃山   : >     190 円

=. キー     : 機能の説明
-  F2       : バッファリストが表示され、表示されたリストから
              ジャンプしたいリストを選択します。
              .. select-buffer
-  F3       : 現在表示されているバッファ以外のバッファを閉じ
              ます。
-  F5       : 次を検索 (ファイラーでは、すべて選択)
-  C-x 9 ¥: : C-¥: を押したときの動作を決めます。

-. nil   : 選択なし
-  1     : 行モード選択状態
-  2     : 文字モード選択状態
-  3     : 矩形選択状態

のように書いて

区間 金額
京都--東京 13,080 円 
京都--桃山 190 円 

キー 機能の説明
F2 バッファリストが表示され、表示されたリストからジャンプしたいリストを選択します。
select-buffer
F3 現在表示されているバッファ以外のバッファを閉じます。
F5 次を検索 (ファイラーでは、すべて選択)
C-x 9 : C-: を押したときの動作を決めます。

nil 選択なし
1 行モード選択状態
2 文字モード選択状態
3 矩形選択状態

のように整形されます。欄幅指定行の最初の文字が +. の行、それから見出し行が =. や -. で始まっている行は、それが tcTable 環境の始まりであることを示しています。

● subTable 環境 Referred at: [H1][H2]

subTable 環境は、特殊です。xTable 環境の説明文の部分で使用するための表作成環境です(#)。subTable 環境を使用すると、表の中に表を書くことができます。subTable 環境は、wTable 環境と同じ記述法で記載します。

# subTable 環境は、cTable 環境, wTable 環境, tcTable 環境, twTable 環境, subTable 環境の中だけで使用できます。

例を示します。つぎの表は、cmd.exe のオプションを説明する表の一部です。表の「動作」のところに書かれている表は、subTable環境によって作成されています。

subTable 環境の使用例 Referred at: [H1]
オプション 動作
/t:bf 背景色と前景色(文字色)を設定する。bfには16進2桁で背景色と前景色を指定する。色コードについては次の表を参照。デフォルトは"/t:07"(背景色は0の黒色で、文字色は7の白色)。

色コードと色の対応
数値 数値 数値
0 6 黄色 C 明るい赤
1 7 D 明るい紫
2 8 灰色 E 明るい黄色
3 水色 9 明るい青 F 明るい白
4 A 明るい緑
5 B 明るい水色


上の表はつぎのように書いて実現されました。この書き方では、subTable 環境の記述の行数が多くなっていますが、後で示すように(より簡潔な subTable の記述 H1)より簡潔に書くことできます。

@begin{tcTable}{100% 20%} ----------------------------------
= オプション
    動作
- /t:bf
    背景色と前景色(文字色)を設定する。bfには16進2桁で背景
    色と前景色を指定する。色コードについては次の表を参照。デ
    フォルトは"/t:07"(背景色は0の黒色で、文字色は7の白色)。
    
    @_色コードと色の対応
    @begin{subTable}{bgc: beige center 450 60 90 60 90 60 90}
    ========================================================
    数値
       -----------------------------------------------------
       色
       -----------------------------------------------------
       数値
       -----------------------------------------------------
       色
       -----------------------------------------------------
       数値
       -----------------------------------------------------
       色
    --------------------------------------------------------
    0
       -----------------------------------------------------
       黒
       -----------------------------------------------------
       6
       -----------------------------------------------------
       黄色
       -----------------------------------------------------
       C
       -----------------------------------------------------
       明るい赤
    --------------------------------------------------------
    1
       -----------------------------------------------------
       青
       -----------------------------------------------------
       7
       -----------------------------------------------------
       白
       -----------------------------------------------------
       D
       -----------------------------------------------------
       明るい紫
    --------------------------------------------------------
    2
       -----------------------------------------------------
       緑
       -----------------------------------------------------
       8
       -----------------------------------------------------
       灰色
       -----------------------------------------------------
       E
       -----------------------------------------------------
       明るい黄色
    --------------------------------------------------------
    3
       -----------------------------------------------------
       水色
       -----------------------------------------------------
       9
       -----------------------------------------------------
       明るい青
       -----------------------------------------------------
       F
       -----------------------------------------------------
       明るい白
    --------------------------------------------------------
    4
       -----------------------------------------------------
       赤
       -----------------------------------------------------
       A
       -----------------------------------------------------
       明るい緑
       -----------------------------------------------------
       -----------------------------------------------------
    --------------------------------------------------------
    5
       -----------------------------------------------------
       紫
       -----------------------------------------------------
       B
       -----------------------------------------------------
       明るい水色
       -----------------------------------------------------
       -----------------------------------------------------
    @end{subTable}
@end{tcTable} ----------------------------------------------

この例では、subTable 環境の記述が長くなっています。

● より簡潔な subTable の記述 Referred at: [H1]

subTable 環境で、一行に複数列のデータを纏めて書くことができます。列のデータの間にコロンを置きます。行頭が "= " ならタイトル行、- ならデータ行です。行頭の "= " や "- " の後ろに置かれた半角空白文字列は無視されます。また、列のデータの区切り記号である : の前後に置かれた半角空白文字列は無視されます。

例を示します。つぎの例で、subTable 環境は、tcTable 環境のデータ行の部分に置かれています。

@begin{tcTable}{100% 20%} ----------------------------------
= オプション
    動作
- /t:bf
    背景色と前景色(文字色)を設定する。bfには16進2桁で背景
    色と前景色を指定する。色コードについては次の表を参照。デ
    フォルトは"/t:07"(背景色は0の黒色で、文字色は7の白色)。
    
    @@_色コードと色の対応
    @begin{subTable}{bgc: beige center 450 60 90 60 90 60 90}
    = 数値  : 色   : 数値 : 色         : 数値 : 色
    -  0    : 黒   : 6    : 黄色       : C    : 明るい赤
    -  1    : 青   : 7    : 白         : D    : 明るい紫
    -  2    : 緑   : 8    : 灰色       : E    : 明るい黄色
    -  3    : 水色 : 9    : 明るい青   : F    : 明るい白
    -  4    : 赤   : A    : 明るい緑   :      :
    -  5    : 紫   : B    : 明るい水色 :      :
    @end{subTable}
@end{tcTable} ----------------------------------------------

と書いて次のように整形されます。

オプション 動作
/t:bf 背景色と前景色(文字色)を設定する。bfには16進2桁で背景色と前景色を指定する。色コードについては次の表を参照。デフォルトは"/t:07"(背景色は0の黒色で、文字色は7の白色)。

色コードと色の対応
数値 数値 数値
0 6 黄色 C 明るい赤
1 7 D 明るい紫
2 8 灰色 E 明るい黄色
3 水色 9 明るい青 F 明るい白
4 A 明るい緑

5 B 明るい水色



他の例を示します。

SENDSTR( ID, 文字列, [番号, 送信モード, ACC指定] )

引数 意味
ID Windowを識別するID
(ID = 0 であれば クリップボードへ)
文字列 送りたい文字列
番号 左上から数えたエディトコントロールの順番 (1から指定、マイナスを付けた場合には Disable状態のものもカウント)
(0:デフォルトはフォーカスを持ったエディトコントロール)
送信モード
FALSE 追加 (デフォルト)
TRUE 置き換え
2 一文字ずつ送信 (PostMessage,WM_CHAR)


ここの表は subTable 環境を使って書いています。
ACC指定
FALSE APIによる (デフォルト)
TRUE アクセシビリティ用インターフェースを利用


 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

5.5.16 xTable 環境の説明文内の特殊記法

xTable 環境 (cTable 環境、wTable 環境、tcTable 環境、twTable 環境や subTable 環境) の説明文を記述するところでも、ODR 文書のほかのところで使用できる特殊記法の一部が使えるようになっています。例えば、行頭から ,,,~ (カンマ3個とチルダー) を置いてすぐ改行した行と、行頭から ,,,. (カンマ3個とピリオド) を置いてすぐ改行した行とで行を囲むと詰め込み処理をせず、そのまま表示されます。つぎの表では、このような記述法を纏めて解説しています。

"bar" Referred at: [H1]
表の中から参照する例を示すために、ここに拡張見出し「bar」を置いています。

xTable 環境の説明文内の特殊記法
記述法/記述例 説明/整形結果
○改行記号[br]を行末に書く。 □行末に置いた [br] は複数個数でもすべて改行記号に置き換えられます。行内に書いた
行1[br][br]
行2
行1

行2
○.~ (ピリオドとチルダー) を書いてすぐ改行した行と .. (ピリオドを2個) を書いてすぐ改行した行で行を囲む。 □左詰めにする。Emacs 関数による置き換えをする。 html のタグは有効。行頭に半角空白文字列があれば、その分、字下げされます。

Emacs 関数による置き換えを抑止したければ、Emacs 関数呼び出しの左括弧の前に = を書けばいいので、普通に左詰めにしたいときは、この、 .~ (ピリオドとチルダー) を書いてすぐ改行した行と .. (ピリオドを2個) を書いてすぐ改行した行で行を囲むという記法を使うのが便利です。
.~
行1 (H "bar")
行2 =(H "bar")
 行3 <span style="color:red">文字色を赤く。</span>
行4
..
行1 bar H1
行2 (H "bar")
 行3 文字色を赤く。
行4
○行頭からピリオドを3個置き、半角空白1個を置いて、その後に非空白文字を含む文字列を書く □行頭のピリオド3個と続く半角空白文字1個を削除し、その後の文字列のタグ文字を代替文字表現に置き換えます。Emacs 関数の置き換えはしません。
あああ
...  (H "bar")
    いいい
.. あああ (Vb (H "bar") /Vb) いいいと書くこともできます。
あああ (H "bar") いいい
あああ (H "bar") いいいと書くこともできます。
○行頭からピリオドを3個置き、すぐ改行する □その行は読み飛ばされます。

セルの中の文字列を左寄せ、右寄せ、あるいは中央合わせするために > や < や >< を先頭に書いた行を置く場合は、その行の前に、ピリオドを3個置いて、すぐ改行する行を置くことはできません。
あああ
...
いいいい
あああいいいい
○行頭から ,~ (カンマとチルダー) を書いてすぐ改行した行と ,. (カンマとピリオド) を書いた行で行を囲む。 □左詰めにします。Emacs 関数による置き換えをしません。html のタグは有効です。行頭に半角空白文字列があれば、その分、字下げされます。
,~
行1 (H "bar")
 行2 <span style="color:red">文字色を赤く。</span>
行3
,.
行1 (H "bar")
 行2 文字色を赤く。
行3
○行頭から ,,~ (カンマを2個とチルダー) を書いてすぐ改行した行と ,,. (カンマを2個とピリオド) を書いた行で行を囲む。 □間に囲まれたコードをそのまま表示します。html のタグ文字は代替文字表現に置き換えます。Emacs 関数の置き換えはしません。
,,~
static void Main()
{
  Console.WriteLine("Hello World!");
}
,,.
static void Main()
{
  Console.WriteLine("Hello World!");
}
○行頭から ,,,~ (カンマ3個とチルダー) を書いてすぐ改行した行と、,,,. (カンマ3個とピリオド) を書いてすぐ改行した行で、行を囲む。 □間に囲まれたコードをそのまま表示します。html のタグ文字は代替文字表現に置き換えます。Emacs 関数の置き換えはしません。
,,,~
static void Main()
{
  Console.WriteLine("Hello World!");
}
+----------+---------+
|          |    B    |
|    A     +---------+
|          |    C    |
+----------+---------+
,,,.
static void Main()
{
  Console.WriteLine("Hello World!");
}
+----------+---------+
|          |    B    |
|    A     +---------+
|          |    C    |
+----------+---------+
○行頭から ---~ (マイナス記号3個とチルダー) 書いて改行した行と、---. (マイナス記号3個とピリオド) を書いた行で行を囲む。 □間に囲まれたコードを枠で囲んで表示します。
---~
static void Main()
{
  Console.WriteLine("Hello World!");
}
---.
static void Main()
{
  Console.WriteLine("Hello World!");
}

○ (Vb ... /Vb) で囲んで、不等号を書く □間に囲まれた中では不等号がそのまま表示されます。
(Vb <abc> /Vb) と書く。
... <abc> 
と書くこともできます。
<abc> と書く。
<abc> と書くこともできます。
○ (h ¥( ... ¥)/h) で囲んで数式を書く □間に囲まれた数式が表示されます。
(h ¥(y = ax^2 + bx + c¥)/h) \(y = ax^2 + bx + c\)
○ (Code ... /Code) で囲んでコードを書く □ 間に囲まれたコードが表示されます。
(code /^[==]+[ ]*\.$/ /code) /^[==]+[ ]*\.$/
○ (Xv "...") □ ... に書いている画像ファイルを表示します。
> (Xv "./win-odr.odr--khlogo.png")
セルの先頭に > を書くと後の文字列は右寄せされます。
> 表示失敗?: ./win-odr.odr--khlogo.png
セルの先頭に > を書くと後の文字列は右寄せされます。
○ セルの中にリストを書きたい □ 普通に html のタグを使います。
普通に html のタグを使って書きます。
この例を見てください。
<ol>
<li> 第1項目</li>
<li> 第2項目</li>
</ol>
この例を見てください。
  1. 第1項目
  2. 第2項目

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

5.5.17 @begin{html} ... @end{html}

"html 環境" Referred at: [H1]

@begin{html} -----------------------------------------------
<p><table  border="1"><tr><td>表の</td>
<td>挿入</td></tr>
</table></p>
@end{html} -------------------------------------------------

のように書かれた部分は、o2h を使って html 文書に整形するときにそのまま書き込まれます。

表の 挿入

:表の挿入
  標題つきリストの説明の中にも挿入できます。
  
  @begin{html} ---------------------------------------------
  <p><table  border="1"><tr><td>表の</td>
  <td>挿入</td></tr>
  </table></p>
  @end{html} -----------------------------------------------
  
  @begin{html} ---------------------------------------------
  <table border=4 width=250>
   <caption>【テーブルの例】</caption>
   <tr bgcolor="#cccccc">
    <th><br></th>
    <th>列-a</th>
    <th>列-b</th>
    <th>列-c</th>
   </tr>
   <tr align=center>
    <td>行-1</td>
    <td>a1</td>
    <td>b1</td>
    <td rowspan=2>c1-c2</td>
   </tr>
   <tr align=center>
    <td>行-2</td>
    <td>a2</td>
    <td>b2</td>
   </tr>
   <tr align=center>
    <td>行-3</td>
    <td>a3</td>
    <td colspan=2>a3-b3</td>
   </tr>
  </table>
  <p>
  @end{html} -----------------------------------------------
  
    ## <table> タグに、align=left あるいは align=right と指定
       すると、文章が表の横に
       回り込みます。文章が表の周りに回り
       込まないようにするには、align=center とするか、
       <table> で align を指定せず、</table> の後に <p> を挿
       入してください。
       (Net "http://www.1uphp.com/con1/table/float.html")

       table タグの詳細については、
       .. (Net "http://www.tohoho-web.com/html/table.htm") 
       を参照してください。
    
  @begin{html} ---------------------------------------------
  炭酸ガスは、CO<sub>2</sub> のように書きます。
      特に強調したい箇所を色を付けて表示するには、
  <span style="color: red;">html コードを挿入して色づけ</span>
  すればいいでしょう。
  @end{html} -----------------------------------------------

  @begin{htmlbr} -------------------------------------------
  炭酸ガスは、CO<sub>2</sub> のように書きます。
      特に強調したい箇所を色を付けて表示するには、
  <span style="color: red;">html コードを挿入して色づけ</span>
  すればいいでしょう。
  @end{htmlbr} ---------------------------------------------
  
  炭酸ガスは、(Html CO<sub>2</sub> /Html) のように書きます。
  特に強調したい箇所を色を付けて表示するには、
  (Html <span style="color: red;">html コードを挿入して色づけ</span> /Html)
  すればいいでしょう。
  
  普通に文章を書いていて、
  @begin{html} ---------------------------------------------
  html のタグを使って書きたいとしたら、CO<sub>2</sub> のように
  書くことができます。<span style="color: red;">html コードを挿
  入して色づけ</span>して
  @end{html} -----------------------------------------------
  書くことができます。そのまま挿入されます。

は、つぎのように整形されます。@begin{htmlbr} ... @end{htmlbr} で囲まれた範囲は、行末に <br> が付加されて出力されるので、一行ごとに改行されます。

表の挿入
標題つきリストの説明の中にも挿入できます。

表の 挿入

【テーブルの例】

列-a 列-b 列-c
行-1 a1 b1 c1-c2
行-2 a2 b2
行-3 a3 a3-b3

# <table> タグに、align=left あるいは align=right と指定すると、文章が表の横に周り込みます。文章が表の周りに回り込まないようにするには、align=center とするか、<table> で align を指定せず、</table> の後に <p> を挿入してください。http://www.1uphp.com/con1/table/float.html

table タグの詳細については、
http://www.tohoho-web.com/html/table.htm を参照してください。

炭酸ガスは、CO2 のように書きます。特に強調したい箇所を色を付けて表示するには、 html コードを挿入して色づけすればいいでしょう。炭酸ガスは、CO2 のように書きます。
    特に強調したい箇所を色を付けて表示するには、
html コードを挿入して色づけ
すればいいでしょう。

炭酸ガスは、CO2 のように書きます。特に強調したい箇所を色を付けて表示するには、 html コードを挿入して色づけすればいいでしょう。

普通に文章を書いていて、 html のタグを使って書きたいとしたら、CO2 のように書くことができます。html コードを挿入して色づけして書くことができます。そのまま挿入されます。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

5.5.18 @begin{foo} ... @end{foo}

Referred at: [H1]

@begin{foo} ... @end{foo} の形の環境で、foo の部分が ODR では未定義の場合、@begin{code} ... @end{code} と書かれていたものとして、foo の部分をキャプションとして表示します。

@begin{foo} ------------------------------------------------
ここの部分は、@begin{code} ... @end{code} で囲まれていたかの
ように整形されますfoo がキャプションとして表示されます。
@end{foo} --------------------------------------------------

は、

;;; @(%) $caption = 'foo'
@begin{code} -----------------------------------------------
ここの部分は、@begin{code} ... @end{code} で囲まれていたかの
ように整形されます。foo がキャプションとして表示されます。
@end{code} -------------------------------------------------

と書かれていたものと見なして、つぎのように整形されます。

foo
ここの部分は、@begin{code} ... @end{code} で囲まれていたかの
ように整形されます。foo がキャプションとして表示されます。

詳しくは、特殊環境のキャプションや注釈 H1を参照して下さい。キャプションを参照したい場合は、@begin{code} ... @end{code} H1 環境を使い、$caption を指定してください。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

5.5.19 特殊環境のキャプションや注釈

Referred at: [H1][H2][H3]

一部の特殊環境

@begin{code} ... @end{code}
@begin{panel} ... @end{panel}
@begin{fpanel} ... @end{fpanel}
threecommasverbatim 環境
@begin{verbatim} ... @end{verbatim}
@begin{cTable} ... @end{cTable}
@begin{frame} ... @end{frame}

では、その特殊環境に書かれた内容に対するキャプションや注釈を、その特殊環境の直前または直後に表示できます。

○ code 環境のキャプションや注釈の表示

code 環境が始まる直前に

;;; @(%) $caption = 'sample code'

;;; @(%) $caponly = 'sample code'

を置いてキャプションを指定できます(※)。

※ 後で、$caption, $caponly, $endnote の簡易記法 H1 のところで簡易な記述方法について述べます。

$caption や $caponly は、前に置くキャプションを指定します。

$caption は後述するように拡張見出しとして登録されますが、$caponly はそこで表示されるだけで、参照できる拡張見出しとして登録されることはありません。

code 環境の直後に表示する注釈を指定する $endnote も利用できます。ただし、整形したときは、code 環境の直後に表示されますが、code 環境の直前で指定しておく必要があります。

;;; @(%) $endnote = 'sample code'

例を示します。

@begin{frame} ----------------------------------------------
○ キャプションを置く例

;;; @(%) $caption = 'sample code'
@begin{code} -----------------------------------------------
if $opt_version
  puts "#{file.basename($0)}: #{verstring}"
  exit 0
end
@end{code} -------------------------------------------------

○ 注釈を書く例

;;; @(%) $endnote = 'sample note'
@begin{code} -----------------------------------------------
if $opt_version
  puts "#{file.basename($0)}: #{verstring}"
  exit 0
end
@end{code} -------------------------------------------------
@end{frame} ------------------------------------------------

と書くと、次のように整形されます。

○ キャプションを置く例

sample code
if $opt_version
  puts "#{file.basename($0)}: #{verstring}"
  exit 0
end

○ 注釈を書く例

if $opt_version
  puts "#{file.basename($0)}: #{verstring}"
  exit 0
end

sample note

panel 環境、threecommasverbatim 環境、verbatim 環境でも同様にしてキャプションや注釈を表示することができます。

前に置くキャプションは、ゴシック、青色で表示され、後に置く注釈は普通の書体、黒色で表示されます。

後に置く注釈でも、

;;; @(%) $endnote = '<strong>sample code</strong>'

のように、<strong> ... </strong> で囲めばゴシックにすることができます。$endnote では、Emacs 関数を使うことができます。

;;; @(%) $caption = 'OR検索'
;;; @(%) $endnote = '"hello"または"world"がある行にマッチする。'
@begin{code} -----------------------------------------------
select-string -path "*.txt" -pattern "hello","world"
@end{code} -------------------------------------------------

と書いて、つぎのように整形されます。

OR検索 Referred at: [H1][H2]
select-string -path "*.txt" -pattern "hello","world"

"hello"または"world"がある行にマッチする。

○ frame 環境のキャプションの表示

frame 環境のキャプションも、code 環境と同じように

   ;;; @(%) $caption = '前に置くキャプション'

を前に置いてキャプションを表示することができます。

;;; @(%) $caption = '前に置くキャプション'
@begin{frame}{double} --------------------------------------
frame の中に次のようにリストを置くことができます。

 * aaa
 * bbbbbb
@end{frame} ------------------------------------------------

のように書いて、つぎのように整形されます。

前に置くキャプション
frame の中に次のようにリストを置くことができます。

注釈文を後ろに置くときは、

   ;;; @(%) $endnote = '注釈文'

を @end{frame} の直前に置くこともできます。

frame 環境は他の環境と入れ子にできるので、このような仕様にしました。

例を示します。frame 環境が入れ子になっています。

@begin{frame}{double} --------------------------------------
frame の中に次のようにリストを置くことができます。

 * aaa
 * bbbbbb

   ;;; @(%) $endnote = 'dotted の例'
   @begin{frame}{dotted} -----------------------------------
   こんな風に。
   @end{frame} ---------------------------------------------

;;; @(%) $endnote = '後に置く注釈'
@end{frame} ------------------------------------------------

これで次のように整形されます。

frame の中に次のようにリストを置くことができます。

後に置く注釈

○ 複数行にわたるような長い注釈文

注釈文が長い場合は、"一行目<br>二行目" のように、改行位置に改行記号を入れることもできます。

   ;;; @(%) $endnote = '一行目<br>二行目'

のように書きます。

@begin{endnote} --------------------------------------------
長い $endnote を書くときは、
@begin{endnote} ... @end{endnote} を使うのが簡単でしょう。[br]
改行したい場合は、[br] コードを書きます。[br]
(H "特殊環境のキャプションや注釈") のような Emacs 関数を
書くこともできます。
@end{endnote} ----------------------------------------------
@begin{fpanel} ---------------------------------------------
◎ fpanel 環境の endnote

ここは、$endnote の例を示すために
書いています。
@end{fpanel} -----------------------------------------------

と書いて、次のように整形されます。

◎ fpanel 環境の endnote

ここは、$endnote の例を示すために書いています。

長い $endnote を書くときは、@begin{endnote} ... @end{endnote} を使うのが簡単でしょう。
改行したい場合は、[br] コードを書きます。
特殊環境のキャプションや注釈 H2 のような Emacs 関数を書くこともできます。

@begin{endnote} ... @end{endnote} の間の各行の行頭にある半角空白文字列は無視されます。

@begin{endnote} ... @end{endnote} を使わなくても、 frame 環境を使って、注釈文のように見えるようにすることができます。

  @begin{code} ---------------------------------------------
  (a)           ≡ (a . nil)
  (a b c)       ≡ (a . (b . (c . nil)))
  ((a b) (c d)) ≡ ((a . (b . nil)) . (c . (d . nil))) [訂正] '02-4-15
  ((a b) (c d)) ≡ ((a . (b . nil)) (c . (d . nil))) [訂正] '02-6-27
                ≡ ((a . (b . nil)) . ((c . (d . nil)) . nil))
  ((a b) c d)   ≡ ((a . (b . nil)) . (c . (d . nil)))
  @end{code} -----------------------------------------------
  @begin{frame}{null font-size: small} ---------------------
  @begin{code} ... @end{code} 環境とは独立して、コメントを付
  加することもできます。

   1. 普通の番号付きリストを書くこともできます。
   2. ここは小さなサイズで書かれています。
  @end{frame} ----------------------------------------------

と書いて、つぎのように整形されます。

(a)           ≡ (a . nil)
(a b c)       ≡ (a . (b . (c . nil)))
((a b) (c d)) ≡ ((a . (b . nil)) . (c . (d . nil))) [訂正] '02-4-15
((a b) (c d)) ≡ ((a . (b . nil)) (c . (d . nil))) [訂正] '02-6-27
              ≡ ((a . (b . nil)) . ((c . (d . nil)) . nil))
((a b) c d)   ≡ ((a . (b . nil)) . (c . (d . nil)))

@begin{code} ... @end{code} 環境とは独立して、コメントを付加することもできます。

  1. 普通の番号付きリストを書くこともできます。
  2. ここは小さなサイズで書かれています。
frame 環境を使ってコメントを付加しています。枠を描かないように、null を指定して、font-size を small に指定しています。

● 特殊環境のキャプション $caption による拡張見出し Referred at: [H1][H2][H3]

特殊環境のキャプションの $caption も自動的に見出し H2の一つとして登録されます。例えば、OR検索 H1 は、$caption = "OR検索" とした特殊環境のキャプション部分へのリンクを意味します。

○ 拡張見出しではない特殊環境の見出し

$caption と同じように特殊環境のキャプションとして前に表示したいけれども、「見出し」として登録する必要が無いときは、単に前に見出し文字列を書いて改行します。

前に置くキャプション
ここでは、直前に、文字列を書いてすぐ改行しています。

当然のことながら、直前に書いた文字列は拡張見出しとしては登録されません。したがって、重複することも許されます。


○ @begin{endnote} ... @end{endnote}

@begin{endnote} の行から @end{endnote} の範囲に書かれたパラグラフは、$endnote に格納されるようにしました。

@begin{endnote} --------------------------------------------
エンドノート1
エンドノート2
@end{endnote} ----------------------------------------------

と書くのと

;;; @(%) $endnote = 'エンドノート1_ 
                     エンドノート2'

と書くのと同等です。

@begin{endnote} ... @end{endnote} で囲む方法では、行末にアンダースコアを書く必要がなく編集しやすいので、$endnote に含める文字列が長い場合は、@begin{endnote} ... @end{endnote} で囲む方法の方が利用しやすいでしょう。

@begin{endnote} ... @end{endnote} で囲まれる範囲の各行には、Emacs 関数を書くことができ、各行の行末には[br] を1個以上置くことができます。

● $caption, $caponly, $endnote の簡易記法 Referred at: [H1][H2]

@_見出し文字列

のように、@_ (@ の後にアンダースコア) の後に文字列を書くと、

;;; @(%) $caption = '見出し文字列'

のように書いてあったものと処理されます。引用符号で囲む手間も省略できるようにしています。

@_ の後の文字列の先頭文字が ' (シングルクォート) か $ の場合は、シングルクォートで囲まずに、文字列を返す ruby の式が書いてあるものとみなして、@_ の後の文字列を一旦変数 heading に格納して

;;; @(%) $caption = heading

と書かれているように処理します。見出し文字列は、拡張見出しとして処理されます。

@@_標題だけ文字列

のように、@@_ (@@ の後にアンダースコア) の後に文字列を書くと、

;;; @(%) $caponly = '標題だけ文字列'

のように書いてあったものと処理されます。引用符号で囲む手間も省略できるようにしています。@_ と @@_ の違いは、前者 @_ が、$caption に代入しているのに対して、後者 @@_ が $caponly に代入しているところです。

@@_ の後の文字列の先頭文字が ' (シングルクォート) か $ の場合は、シングルクォートで囲まずに、文字列を返す ruby の式が書いてあるものとみなして、@@_ の後の文字列を一旦変数 heading に格納して

;;; @(%) $caponly = heading

と書かれているように処理します。引用符号で囲む手間も省略できるようにしています。

書き換えプログラム o2h.rb の中で

require 'date'
$today = Date.today.to_s

として、$today を定義しているので、

  @@_$today

のように書けば日付が入ります。下の例は、そのようにしました。

2019-05-12
code 環境の標題に日付を
書く例を示します。

@@@_注釈文字列

のように、@@@_ (@@@ の後にアンダースコア) の後に文字列を書くと、

;;; @(%) $endnote= '注釈文字列'

のように書いてあったものと処理されます。

@@@_ の後の文字列の先頭文字が ' (シングルクォート) か $ の場合は、シングルクォートで囲まずに、文字列を返す ruby の式が書いてあるものとみなして、@@@_ の後の文字列を一旦変数 heading に格納して

;;; @(%) $endnote = heading

と書かれているように処理します。

例を示します。

"panel 環境"の前の見出し
この panel 環境が始まるところで、@begin{panel} の前に

@_"panel 環境"の前の見出し
@@@_'※ panel 環境を使って書いています。_ 
      背景色は ' + $default_panel_backcolor + ' です。'

と書いています。

※ panel 環境を使って書いています。背景色は floralwhite です。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

5.5.20 特殊環境に前置文字列を置く

Referred at: [H1]

verbatim (vb), code, panel, fpanel の4つの環境には、前置文字列の仕組みがあります。「前置文字列の仕組み」とは、@begin ... @endの範囲で、範囲のすべての行の行頭に指定する前置文字列を置き、o2h で整形するときはその前置文字列がないように整形されるというものです。

前置文字列は、@begin{vb}{...} と @end{vb} のオプション文字列 "..." のところに、

  prefix: "..."

のような形で指定します。

@begin{vb} と @end{vb} の範囲にある各行について、prefix で指定された文字列が行頭にあると、その文字列を削除したものが処理されます。

例を示します。次の例は、前置文字列として、"| " (縦棒と半角空白1個) を指定して、@begin{vb} と @end{vb} に囲まれる範囲の行の行頭に、"| " を置いています。各行の行頭の "| " は削除され、無かったものとして処理されます。

@begin{vb}{prefix: "| "} -----------------------------------
| * 注釈
| 
| (note "emacs から xyzzy へ")
| cbar は、最近は、xyzzy を主として使用していて、emacs ではなく
| て、xyzzy で odr 文書を編集しています。emacs の outline mode 
| は、xyzzy には移植されていませんが、xyzzy には、outline-tree 
| というすばらしいモードがあります。
@end{vb} ---------------------------------------------------

整形した結果を次に示します。行頭の "| " が整形した結果には含まれていないことに注意してください。

* 注釈

(note "emacs から xyzzy へ")
cbar は、最近は、xyzzy を主として使用していて、emacs ではなく
て、xyzzy で odr 文書を編集しています。emacs の outline mode 
は、xyzzy には移植されていませんが、xyzzy には、outline-tree 
というすばらしいモードがあります。

この仕組を利用すれば、整形した結果では、行頭に * があるけれども、元になった行では、行頭に * がないようにできます(※)。

※ 例えば、行頭から * が現れる行を調べて、見出し行の番号システムを用いて見出し行を特定する方式は、行頭から * が現れる行が、アウトライン見出しを表現するところ以外では使われないということを前提としています。説明のために引用する文章で、行頭から * を書く部分があると、その前提が崩れます。そうした困った事態を避けるために、「前置文字列の仕組み」が導入されました。

@begin{code} ... @end{code} のところで述べたように、行頭に * が来るところで、その前に = を置いて、=* のようにするという方法もあります。

他の場合も同様です。fpanel 環境の例を次に示します。

@begin{fpanel}{prefix: "| "} -------------------------------
| ここは詰め込み処理
| されます。全体が一つの段落として整形されます。ただし、
| 間に空白行が
| 来たら、その間で段落が終わり、つぎの行で段落が開始するように
| 整形されます。
| 
| ここはつぎの段落のように整形
| されます。
@end{fpanel} -----------------------------------------------

と書いて、次のように整形されます。

ここは詰め込み処理されます。全体が一つの段落として整形されます。ただし、間に空白行が来たら、その間で段落が終わり、つぎの行で段落が開始するように整形されます。

ここはつぎの段落のように整形されます。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

5.5.21 特殊環境を整形するときに行番号を付加する

Referred at: [H1][H2]

@begin{verbatim}{...} ... @end{verbatim} や@begin{code}{...} ... @end{code} のオプション文字列 {...} のところに、linenum と書くと、o2h で整形するときに"行番号を付加" (Referred at: [H1] ) して表示します。

例えば、

@begin{vb}{linenum} ----------------------------------------
static void Main()
{
  Console.WriteLine("Hello World!");
}
@end{vb} ---------------------------------------------------

は、つぎのように整形されます (※)。

001: static void Main()
002: {
003:   Console.WriteLine("Hello World!");
004: }

※ code 環境でも、オプション文字列のところに linenum を指定できます。

verbatim (vb) 環境や code 環境で linenum を指定して行番号表示するように指示する方法では、元の文書ファイルに行番号が挿入されるのではなく、整形された html ファイルで行番号が表示されます。

元の文書ファイルで、行番号を付与するという方法もあります。 (cbar の場合は、文書ファイルの編集に xyzzy を使っていて、行番号を付与する領域を範囲指定して、M-x insert-linenum とします。)

オプション文字列のところに linenum を指定した場合の行番号は3桁で表示され、99以下のときは、100 の位や 10 の位には、0 が埋められます。

付加する行番号の最初の番号を指定するには、

linenum: 15

のように、linenum: の後に、最初の行番号を指定します。

@begin{vb}{linenum: 15} ------------------------------------
static void Main()
{
  Console.WriteLine("Hello World!");
}
@end{vb} ---------------------------------------------------

は、つぎのように整形されます。

015: static void Main()
016: {
017:   Console.WriteLine("Hello World!");
018: }

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

6 ODR 文書作成のための記述法

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

6.1 特殊記法

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

6.1.1 セミコロン3個に続く文字列による指定

Referred at: [H1]

---- o2h.rb が読み込んで処理するファイルの中に、文字通り行頭から、セミコロンを3個書いて、@(#) に続いて書いた行は ODR 文書のキャプションを指定するものと解釈されます。

例を示します。

;;; @(#) ODR 文書の書き方

行頭から上の行のように書くと、文書のタイトルとして「ODR 文書の書き方」を指定したことになります。

---- 行頭から半角空白を0個以上置いて、つまり、字下げもありで、セミコロンを3個書いて、@(%) に続いて書いた文字列は、その位置で、書き換えプログラム o2h.rb に書かれていたものとして「評価」されます。

例を示します。

;;; @(%) $default_fontcolor = "Blue"

上の行のように書くと、$default_fontcolor を Blue に設定します。

---- 行頭から半角空白を0個以上置いて、つまり、字下げもありで、セミコロンを3個書いて、前の2項に書いたものに合致しない行 (つまり、;;; の後に 、@(#) も @(%) も書かれていない行) は、その行自体が書かれていなかったように処理されます。

整形したときは表示されないので、メモや動的に評価するコードなどを書くことができます。

例を示します。

;;; (File "C:/home/me/foo.txt")

上の行のように書くと、整形したときは表示されませんが、 cbar が使っている xyzzy の環境では、行末にカーソルを置いて、M-x my-eval-last-sexp を実行すると、 C:/home/me/foo.txt にジャンプします。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

6.1.2 行を継続する

Referred at: [H1][H2]

o2h が ODR 文書を読み込むときは、元文書を一行ずつ読み込んで処理して行きます。そのときに、特別に、2行以上が元々一行に書かれていたかのように読み取るよう指示できます。

行の継続についてつぎのように取り決めています。

  1. 行末にアンダースコアがあって、すぐその後で改行すると、行末のアンダースコアを削除し、次の行が、アンダースコアのあった位置に接続されます。次の行の行頭の半角空白の並びは接続する前に削除されます。

    ただし、行末のアンダースコアの直前に、アンダースコアはないものとします(※)。

    例を示します。

    あいうえおかきくけこさしすせそたちつてと
    ここの行のアンダースコア_ 
      の後が継続されます。
    

    は、

    あいうえおかきくけこさしすせそたちつてと
    ここの行のアンダースコアの後が継続されます。
    

    と書いてあったのと同じとして読み込まれます。

  2. 行末にアンダースコアがあって、すぐその後で改行した行のつぎの行の行頭に、半角空白の並びがあって、アンダースコアが 1個または連続して2個あり、その後に半角空白が1個以上あると、

    行頭の、半角空白の並び、アンダースコア(1個または2個)、その直後の半角空白1個

    は取り除かれて前の行に接続されます。

    例を示します。

    あいうえおかきくけこさしすせそたちつてと
    ここの行のアンダースコア_ 
      _   の後が継続されます。
    

    は、

    あいうえおかきくけこさしすせそたちつてと
    ここの行のアンダースコア  の後が継続されます。
    

    と書いてあったのと同じとして読み込まれます。

これらの行の継続の処理は、変換プログラム o2h が元文書を読み取る時点でされるので、これらの継続行がどのような構文の中にあるかは関係ありません。構文解析の前の、行の読み取りのところで、行継続が処理されます。

※ 「行末に、アンダースコアがあり、その直前がアンダースコアでない場合に、つぎの行に継続されるという」ルールが副作用を起こすようなプログラム言語では、プログラムファイルに ODR 文書を埋め込むときに、プログラムの表示の部分でうまく行かないことが起こる可能性があります。

lisp では問題ありません。

VBScript のコードの表示の時に困りました。VBScript では、行末にアンダースコアがあると、つぎの行に継続することになっているので、VBScript のコードの中で、行末にアンダースコアが書かれることは良くあります。

そこで、code 環境と verbatim (vb) 環境では、行継続の機能をオフにするようにしました。VBScript のプログラムファイルに ODR 文書を埋め込んで、ODR 文書として整形するときには、行末にアンダースコアによる継続があっても、その機能は無視され、行末にアンダースコアがあるところで、そのままアンダースコアが表示されます。

行末にアンダースコア _ を置いてすぐ改行したら継続行として処理されますが、行末にアンダースコア _ を置いて、その後に半角空白を1個以上置いて改行した場合は、継続行として処理されません。見た目には、行末にアンダースコアを置いてすぐ改行した場合と区別がつきませんが、html 文書への変換プログラム o2h.rb はこれを区別します。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

6.1.3 小さな目次を埋め込む

Referred at: [H1]

子供のレベルの見出しがあるようなレベルのところに、

 [childrenlist] 

のように書くと、そこに、子供のレベルの見出しのリストが挿入されます。

ただし、[childrenlist] は、行頭から書き、すぐに改行しないと有効になりません。ここでは、[childrenlist] の前後に、半角空白を置いているので、子供のレベルの見出しを挿入するという効果が生まれません。

特殊環境 H2 の項目に、[childrenlist] を記述している例があります。そちらを参照してください。

 [parentlist] 

のように書くと、そこに、* が一個のレベルの見出しのリストが挿入されます。

ただし、[parentlist] も、行頭から書き、すぐに改行しないと有効になりません。ここでは、[parentlist] の前後に、半角空白を置いているので、* が一個のレベルの見出しのリストを挿入するという効果が発揮されていません。

[childrenlist] や [parentlist] は、code 環境や vb 環境の中に置いても、行頭から書き、すぐに改行すると、その効果を発揮するので注意が必要です。通常、code 環境や vb 環境の中に、[childrenlist] や [parentlist] を書くとすれば、それは説明のためであると思われます。そういう場合は、すぐ改行せずに、半角空白を追加してから改行するようにすればいいでしょう。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

6.1.4 見出しの一覧

Referred at: [H1]

見出しの一覧は、標準で、整形した文書の最初の方に ALL HEADINGLIST という標題のところで示されます。その一覧は、最初は、閉じられていますが、「表示」というボタンをクリックすると、表示されます。

「見出しの一覧」に示されるリンクをクリックすると、最初に出てくる見出しの定義位置にジャンプできます。しかし、そこへジャンプした後に、元の位置へ戻るリンクはありません。「見出しの一覧」の元の位置に戻るには、ビューアーの戻るボタンを使ってください。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

6.2 表を書く

ODR 文書で、表を書くには 2 つの方法があります。

  1. html 環境 H1 を用いる。
  2. cTable 環境 H3wTable 環境 H2tcTable 環境 H2twTable 環境 H2 を用いる。

このうち、2. の方法は、簡便と思われる表の記法を考えて、その記法によって書いたデータ行を書き換えプログラム o2h に、htmlコードに変換させるというものです。

表をhtml コードで書けるなら、それを @begin{html} と @end{html}で囲めばいいわけですから、1. の方法が最も強力で汎用的ですが、簡単とは言えない面もあります。

お勧めは、2. の cTable 環境、wTable 環境、tcTable 環境、twTable 環境を用いる方法です。まずは、これらの方法を試して、これらの方法でうまく書けないような複雑な表は、1. の html 環境を利用して、html コードで書くという方針をとるのが良いと思います。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

6.2.1 ODR で用意されている表作成環境

ODR で用意されている表作成環境である cTable 環境、wTable 環境、tcTable 環境、twTable 環境, subTable 環境の特徴を比較します。

この中で、subTable 環境は、他の Table 環境と役割が少し違っていて、独立した Table 環境ではなく、ほかの Table 環境の説明文の中で入れ子で使用するための Table 環境です。

一長一短ですが、cbar のお勧めは、cTable 環境です。

Table 環境 背景色の指定 列の数 データの書き方
cTable 環境 H4 標準色指定。
変更不可。
1列以上任意 html コードを書く。つまり、html のタグが有効(以下同様)。 Emacs 関数を使える。
cTable 環境の使用例 H3 を参照
wTable 環境 H3 無地が基本。
指定可能。
1列以上任意 html コードを書く。Emacs 関数を使える。
wTable 環境の使用例 H2 を参照
tcTable 環境 H3 標準色指定。
指定不可。
2列に固定 html コードを書く。Emacs 関数を使える。
tcTable 環境の使用例 H1 を参照
twTable 環境 H3 無地が基本。
指定可能。
2列に固定 html コードを書く。Emacs 関数を使える。
twTable 環境の使用例 H1 を参照
subTable 環境 H2 無地が基本。
指定可能。
1列以上任意 他の xTable 環境の説明文の中で使用するための表作成環境。単独では使用しない。 html コードを書く。Emacs 関数を使える。
subTable 環境の使用例 H1 を参照。数式の例:\(y = ax^2 + bx + c\)
□この表は、cTable 環境を使って書いています。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

6.2.2 html のコードで表を書く

いろいろ細かいことも指定できるので、@begin{html} と @end{html} で囲んで、html のコードで表を書く方が簡単なこともあります。

表の途中のセルを結合したりすることは、 cTable 環境 H5wTable 環境 H4tcTable 環境 H4twTable 環境 H4ではできないので、html のコードを書く必要があります。

例を示します。

align=center の部分は、align=left や align=right にすることもできます。その場合、その後に書いた文章が表の横に回り込みます。その文章の回り込みを止めて、表の下から文章が書かれるようにするために、最後に、<br clear="all"> を入れます。

@begin{html} -----------------------------------------------
<table border=0 width=700 bgcolor="beige" cellpadding="6" align=center>
 <tr><td colspan=3><hr size="3" noshade></td></tr>

<tr>
  <th width="10%" align="left">項目</th>
  <th width="50%" align="left">第1欄</th>
  <th width="40%" align="left">第2欄</th>
 </tr>
 
 <tr><td colspan=3><hr></td></tr>
 
 <tr>
  <td width="10%" valign="top">京都府</td>
  <td width="50%" valign="top">
    ああああああああああああああああああああああああああああああ。</td>
  <td width="40%" valign="top">
    いいいいいいいいいいいいいいいいいいいいいいいいいいいい。<br>
    ううううううううううううううううううううううう。</td>
 </tr>
 
 <tr>
  <td width="10%" valign="top">長崎県</td>
  <td width="50%" valign="top">
    セルの中に、リスト環境が置けるか試しました。
    <ol>
      <li> 県庁所在地は、長崎市。</li>
      <li> 
        ああああああああああああああああああああああああああああああ。
    </ol>
  </td>
  <td width="40%" valign="top">いいいいいいいいいいいいいいいいいい。<br>
  ううううううううううううううううううううううううううううううう。</td>
  </tr>
  
 <tr><td colspan=3><hr size="3" noshade></td></tr>
</table>
<br clear="all">
@end{html} -------------------------------------------------

このように書くことで、つぎのように整形されます。


項目 第1欄 第2欄

京都府 ああああああああああああああああああああああああああああああ。 いいいいいいいいいいいいいいいいいいいいいいいいいいいい。
ううううううううううううううううううううううう。
長崎県 セルの中に、リスト環境が置けるか試しました。
  1. 県庁所在地は、長崎市。
  2. ああああああああああああああああああああああああああああああ。
いいいいいいいいいいいいいいいいいい。
ううううううううううううううううううううううううううううううう。


html で書くのもいいですが、これは、cTable 環境で書けます。

@begin{cTable}{center 700 10% 50% null} --------------------
============================================================
  項目
  ----------------------------------------------------------
  第1欄
  ----------------------------------------------------------
  第2欄
------------------------------------------------------------
  京都府
  ----------------------------------------------------------
  あああああああああああああああああああああああああああああ
  あ。
  ----------------------------------------------------------
  いいいいいいいいいいいいいいいいいいいいいいいいいいいい。
  <br>
  ううううううううううううううううううううううう。
------------------------------------------------------------
  長崎県
  ----------------------------------------------------------
  セルの中にリスト環境を置けるか試しました。
  <ol>
  <li> 県庁所在地は、長崎市。</li>
  <li> あああああああああああああああああああああああああ
  あああああ。
  </ol>
  ----------------------------------------------------------
  いいいいいいいいいいいいいいいいいい。<br>
  ううううううううううううううううううううううううううううう
  うう。 
@end{cTable} -----------------------------------------------

と書いて、つぎのように整形されます。

項目 第1欄 第2欄
京都府 ああああああああああああああああああああああああああああああ。 いいいいいいいいいいいいいいいいいいいいいいいいいいいい。
ううううううううううううううううううううううう。
長崎県 セルの中にリスト環境を置けるか試しました。
  1. 県庁所在地は、長崎市。
  2. ああああああああああああああああああああああああああああああ。
いいいいいいいいいいいいいいいいいい。
ううううううううううううううううううううううううううううううう。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

6.3 よく使う色の名前とその見本

どんな色名があり、その色名が実際にどんな色かは、WEB色見本 で確認できます。

lightcyan            beige            khakai           
papayawhip            lightyellow            lavender           
lightgray            mistyrose            palegreen           
wheat            lemonchiffon            lightpink           
powderblue            lightsalmon            aquamarine           
若菜色 #d8e698            淡紅藤 #e6cde3            薄梅鼠 #dcd6d9           

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

6.4 背景色や文字色を指定する

Referred at: [H1]

● @begin{bgcolor}{colorname} ... @end{bgcolor} による背景色の設定

パラグラフに背景色を指定できます。

@begin{bgcolor}{beige} -------------------------------------
この範囲の文章は、背景色が beige で表示されます。
.. 背景色の指定は、入れ子にできます。

@begin{bgcolor}{色名} ... @end{bgcolor} で囲んだ範囲の
背景色がその色名の色になります。
@end{bgcolor} ----------------------------------------------

のように書くと、つぎのように整形されます。

この範囲の文章は、背景色が beige で表示されます。
背景色の指定は、入れ子にできます。

@begin{bgcolor}{色名} ... @end{bgcolor} で囲んだ範囲の背景色がその色名の色になります。

背景色を指定するパラグラフの前後に何行か空白行を加えて背景色を指定したい場合は、行頭に .. を置きます。例を示します。

@begin{bgcolor}{beige} -------------------------------------
..
この範囲の文章は、背景色が beige で表示
されます。
..
..
@end{bgcolor} ----------------------------------------------
この行には背景色の指定は及びません。

と書いて次のように整形されます。


この範囲の文章は、背景色が beige で表示されます。


この行には背景色の指定は及びません。

@begin{bgcolor}{beige color: crimson} ----------------------
文字色の指定を追加できます。
@end{bgcolor} ----------------------------------------------

のように、文字色を color: の後に指定できます。これで、つぎのように整形されます。

文字色の指定を追加できます。

@begin{bgcolor}{color: crimson} ----------------------------
背景色の指定のところに色を指定せず、
.. 文字色だけを指定することができます。
@end{bgcolor} ----------------------------------------------

のように書くと、文字色だけが指定されてつぎのように整形されます。

背景色の指定のところに色を指定せず、
文字色だけを指定することができます。

ODR では、一般には、@begin{xxx} ... @end{xxx} の @begin{xxx}、 @end{xxx} の前は半角空白文字だけが置けるという規則ですが、 @begin{bgcolor} ... @end{bgcolor} の @begin{bgcolor} の場合は、つぎの特別な文字列は置くことができます。

Indentation 環境の開始を意味するコロン :
番号付きリストの番号 1. や 2. など
マーク付きリストのマーク ++ や *

色々な文書環境の中で、@begin{bgcolor} ... @end{bgcolor} を使って背景色を指定する例を示します。

ここは Indentation 環境なので詰め込まれます。

番号付きリストや、マークつきリストでの背景色の指定の例を示します。ここの例で示すように、@begin{bgcolor} の前に、番号付きリストの番号、マーク付きリストのマークを配置することができます。

  1. 番号付きリストの中で、ひとつの項目全体を指定した背景色で表示するように指定することができます。

    この項はつぎのように書いて実現しています。

    1. @begin{bgcolor}{#98fb98} -----------------------------
       番号付きリストの中で、ひとつの項目全体を指定した背景色
       で表示するように指定することができます。
       ...
       この方法は、マーク付きリストにも適用できます。
       @end{bgcolor} ----------------------------------------
    

    この方法は、マーク付きリストにも適用できます。

    色名の指定のところで、#98fb98 と書いています。これは、色名 palegreen に対応する色番号です。

  2. もちろん、項目の一部だけに限定して色をつけることができます。

    @begin{bgcolor}{lemonchiffon} ---------------------------
    マークつきリストの項目を色づけすることももちろんできます。
    ..
    @end{bgcolor} -------------------------------------------
    @begin{bgcolor}{palegreen} ------------------------------
    * マーク付きリストの全体の色をつけることもできます。
    
    * @begin{bgcolor}{#AAEE00} ------------------------------
      色づけを入れ子にすることができます。
      @end{bgcolor} -----------------------------------------
    
    * ここでは元の背景色が採用されます。
    @end{bgcolor} -------------------------------------------
    

    でつぎのように整形され、背景色が設定されます。

    マークつきリストの項目を色づけすることももちろんできます。

    • マーク付きリストの全体の色をつけることもできます。

    • 色づけを入れ子にすることができます。

    • ここでは元の背景色が採用されます。

  3. 標題つきリストでも色づけできます。

    @begin{bgcolor}{lightyellow} ----------------------------
    ::標題つきリスト
       @begin{bgcolor}{lightcyan} ---------------------------
       標題部分と説明部分を違う背景色にするにはこのようにします。
       @end{bgcolor} ----------------------------------------
    @end{bgcolor} -------------------------------------------
    

    でつぎのように整形され、背景色が設定されます。

    標題つきリスト
    標題部分と説明部分を違う背景色にするにはこのようにします。
左詰め環境で背景色を指定したい場合は、つぎのようにします。

: @begin{bgcolor}{lightcyan} ----------------------------
,~
ここは
  DotFlushleft 環境
です。
,.
@end{bgcolor} -------------------------------------------

これで、つぎのように表示されます。

ここは
  DotFlushleft 環境
です。

● twTable 環境の簡易記法による表の背景色を $twbgcolor で指定する

twTable 環境の簡易記法 H2 によって作成する表の背景色を指定する例を示します。

:
;;; @(%) $twbgcolor = "beige"
+ ----------------- : ================= .
- メニューテキスト  : > xyzzyfiler
- アイテムの種類    : > フォルダ
- アイテムのみ      : いいえ
- プログラム        : C:¥home¥me¥bin¥xyzzyfiler.exe
- 引数              : "%FILEPATH1%"

表の背景色の指定の例を
示しています。

と書いて、次のように整形されます。

メニューテキスト xyzzyfiler 
アイテムの種類 フォルダ 
アイテムのみ いいえ
プログラム C:\home\me\bin\xyzzyfiler.exe
引数 "%FILEPATH1%"

表の背景色の指定の例を示しています。

  1. twTable 環境の簡易記法では、

      ;;; @(%) $twbgcolor = "beige"

    のような行を、twTable 環境の簡易記法による表の直前におきます。

  2. twTable 環境の簡易記法による表を整形すると、$twbgcolor = "" に戻されるので、

      ;;; @(%) $twbgcolor = "beige"

    のような背景色の指定は一度だけしか有効ではありません。背景色を指定したい表ごとに、毎回、このような指定が必要です。

ブラウザで名前が定義されている色名と実際の色との対応は、 http://www.colordic.org/ で確認できます。

● /背景色名/、/背景色名, 文字色名/ による背景色や文字色の設定

もう少し簡単に色づけできるようにしました。/yellow/ のように /.../ の間に色名を一つ指定したときは、それは背景色を指定したものとみなされます。/yellow, crimson/ や /, crimson/ のようにすると、文字色を crimson と指定したものとみなされます。

1. .~ /lightyellow/
   ここは DotFlushleft 環境
   です。emacs 環境の置き換えあり。
   (Net "http://www.colordic.org/") 
   ..

2. .~ /lightyellow, crimson/
   ここは DotFlushleft 環境
   です。emacs 環境の置き換えあり。
   (Net "http://www.colordic.org/") 
   ..

3. ,~ /lightcyan/
   ここは
   CommaVerbatim 環境
   です。emacs 環境の置き換えなし。
   (Net "http://www.colordic.org/") 
   ,.

4. ,~ /lightcyan, crimson/
   ここは
   CommaVerbatim 環境
   です。emacs 環境の置き換えなし。
   (Net "http://www.colordic.org/") 
   ,.

5. ,,,~ /beige/
   void main()
   {
      cout << "Hello, world!";
   }
   ,,,.

6. ,,,~ /beige, crimson/
   void main()
   {
      cout << "Hello, world!";
   }
   ,,,.

7. ---~ /beige/
   void main()
   {
      cout << "Hello, world!";
   }
   ---.

8. ---~ /beige, crimson/
   void main()
   {
      cout << "Hello, world!";
   }
   ---.


でつぎのように整形されます。

  1. ここは DotFlushleft 環境
    です。emacs 環境の置き換えあり。
    http://www.colordic.org/

  2. ここは DotFlushleft 環境
    です。emacs 環境の置き換えあり。
    http://www.colordic.org/

  3. ここは
    CommaVerbatim 環境
    です。emacs 環境の置き換えなし。
    (Net "http://www.colordic.org/") 

  4. ここは
    CommaVerbatim 環境
    です。emacs 環境の置き換えなし。
    (Net "http://www.colordic.org/") 

  5. void main()
    {
       cout << "Hello, world!";
    }
    

  6. void main()
    {
       cout << "Hello, world!";
    }
    

  7. void main()
    {
       cout << "Hello, world!";
    }
    

  8. void main()
    {
       cout << "Hello, world!";
    }
    

引用環境でも、同じような記法で色づけできます。

: /beige/
ここは引用環境です。

引用環境なので
詰め込まれます。

は、つぎのように整形されます。

ここは引用環境です。

引用環境なので詰め込まれます。

コロンの後で (: /beige/ の /beige/ で)、背景色を指定しています。ここで指定した背景色の指定は、引用環境が終わるときに解除されます。

引用環境が続くときに、背景色の指定を途中で終了したい場合は、

  @end{bgcolor}

を入れます。

: /beige/
ここは引用環境です。

引用環境なので
詰め込まれます。
@end{bgcolor}

ここは背景色が指定されていません。
引用環境は続いているので
詰め込まれます。

は、つぎのように整形されます。

ここは引用環境です。

引用環境なので詰め込まれます。

ここは背景色が指定されていません。引用環境は続いているので詰め込まれます。

引用環境を明示的に閉じるには、. : (ピリオド+半角空白+コロン) だけを書いた行をおきます。

: /beige/
万事において負けること自体は恥ではない。
負けを恥と思う心を恥じよ。

引用環境なので
詰め込まれます。
. :

ここは
背景色が指定されていません。
もう引用環境ではないので詰め込まれません。

は、つぎのように整形されます。

万事において負けること自体は恥ではない。負けを恥と思う心を恥じよ。

引用環境なので詰め込まれます。

  ここは
  背景色が指定されていません。
  もう引用環境ではないので詰め込まれません。

※ この例では、引用環境を明示的に閉じるには、. : (ピリオド+半角空白+コロン) だけを書いた行をおきました。
.:
のようにピリオドとコロンの間に半角空白を置かない文字列だけを書いた行は、標題部分を : で始める標題付きリスト H2 で、書き出し位置を標題部分の書き出し位置と同じにしたときに、説明文の終わりの位置を明示するときに使用します。

● code 環境、verbatim 環境、panel 環境、frame 環境の背景色の設定

code 環境、panel 環境、frame 環境の背景色を指定する例を示します。

1. ;;; @(%) $caption = "code 環境の背景色を指定する"
   @begin{code}{bgcolor: beige} ----------------------------
   void main()
   {
     cout << "Hello world.";
   }
   @end{code} ----------------------------------------------

2. ;;; @(%) $caption = "verbatim 環境、vb 環境の背景色を指定する"
   @begin{vb}{bgcolor: beige} ------------------------------
   void main()
   {
     cout << "Hello world.";
   }
   @end{vb} ------------------------------------------------

3. ;;; @(%) $caption = "verbatim 環境、vb 環境の文字色を指定する"
   @begin{vb}{color: black} ------------------------------
   void main()
   {
     cout << "Hello world.";
   }
   @end{vb} ------------------------------------------------

4. ;;; @(%) $caption = "panel 環境の背景色を指定する"
   @begin{panel}{bgcolor: beige} ---------------------------
   ここは
   パネル環境です。
   @end{panel} ---------------------------------------------

5. ;;; @(%) $caption = "frame 環境の背景色を指定する1"
   @begin{frame}{solid bgcolor: lightyellow} ---------------
   ここは
   frame 環境です。

   ++ abc
   ++ def
   @end{frame} ---------------------------------------------

6. ;;; @(%) $caption = "frame 環境の背景色を指定する2"
   @begin{frame}{double bgcolor: lightcyan} ----------------
   ここは
   frame 環境です。

   ++ abc
   ++ def
   @end{frame} ---------------------------------------------

  1. code 環境の背景色を指定する
    void main()
    {
      cout << "Hello world.";
    }
    

  2. verbatim 環境、vb 環境の背景色を指定する
    void main()
    {
      cout << "Hello world.";
    }
    

  3. verbatim 環境、vb 環境の文字色を指定する
    void main()
    {
      cout << "Hello world.";
    }
    

  4. panel 環境の背景色を指定する
    ここは
    パネル環境です。
    

  5. frame 環境の背景色を指定する1
    ここは frame 環境です。

    • abc
    • def
  6. frame 環境の背景色を指定する2
    ここは frame 環境です。

    • abc
    • def
● wTable 環境、twTable 環境の背景色の設定

wTable 環境の背景色の設定 Referred at: [H1][H2]
wTable 環境で背景色を指定する例を示します。オプション指定文字列の先頭に

bgcolor: beige

のような指定を入れます。例えば、

@begin{wTable}{bgcolor: beige left 650 18% null} -----------
- BUFFER : 出力するバッファ
- POINT  
  - 出力をするポイントを指定します。
    指定しない場合には、バッファの先頭から出力されます。
- BODY : 実行するフォーム
@end{wTable} -----------------------------------------------

@begin{twTable}{bgcolor: aquamarine 650 18%} ----------------
- BUFFER : 出力するバッファ
- POINT  
  - 出力をするポイントを指定します。
    指定しない場合には、バッファの先頭から出力されます。
- BODY : 実行するフォーム
@end{twTable} ----------------------------------------------

と書いて、つぎのように整形されます。

BUFFER 出力するバッファ
POINT 出力をするポイントを指定します。指定しない場合には、バッファの先頭から出力されます。
BODY 実行するフォーム

BUFFER 出力するバッファ
POINT 出力をするポイントを指定します。指定しない場合には、バッファの先頭から出力されます。
BODY 実行するフォーム

● 部分的な文字列の背景色や文字色の指定

まとまった範囲の背景色や文字色を指定するのではなくて、段落の途中の文字列の背景色や文字色を指定するには、(h <span ...> 文字列 </span> /h) を使うことができます。

ここは(h <span style="background-color: yellow;">背景色が
黄色です。<span style="color: crimson;">その中に、赤い色</span>
で文字列を</span> /h)書いています。

と書いてつぎのように整形されます。

ここは背景色が黄色です。その中に、赤い色で文字列を書いています。

Html 関数 H1の説明を参照してください。

簡単に、部分的な文字列の色指定ができるように、Color 関数 H1 を用意しています。その中に、赤い色のように、部分的に色を指定できます。

● 色の名前に関する情報

■ WEB色見本 では、色の名前と色の対応に関する情報を取得できます。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

6.5 デフォールトの背景色、フォントの色の指定と一時的変更

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

6.5.1 文書環境の背景色の指定

デフォールトの文書環境の背景の色は、html 文書への変換プログラム o2h.rb の中で、変数 $default_bgcolor に格納されていて、

   $default_bgcolor = "null"

と設定されています。この文書固有の設定の効果も含めて、現在の $default_bgcolor の値は、"null" です。

背景色の指定が "null" である場合は、背景色の指定をしません。

特定の文書環境が始まるときに一時的に背景色を変更するために使用する変数として、$bgcolor が用意されていて、最初は、

   $bgcolor = ""

とされています。$bgcolor がこのように空き文字列であるときは、一時的に指定したい背景色はないことを意味しています。

背景色を指定したいとき、例えば、背景色を beige にしたい場合は、文書の途中に

   ;;; @(%) $bgcolor = "beige"

のように書いた行を挿入します。このように、セミコロンを3個書いて、その後に @(%) と書いた行を、html 文書への変換プログラム o2h.rb が読み込むと、その後に書いてあるコードを、ruby のコードとして読み込みます。

html 文書への変換プログラム o2h.rb は、背景色を指定する必要があるときに、$bgcolor が空き文字列でないときは、そこに格納された文字列が表す色を背景色として優先的に使用します。

場合によっては、特定の文書環境に固有のデフォールトの背景色が指定されています。例えば、

このようにダッシュラインで囲まれた範囲の文字列は、
デフォールトで指定しているダッシュライン環境の背景色
$default_dashline_backcolor によって
表示されます。

は、ダッシュラインで囲んで書きだされたものですが、囲まれている範囲の背景色のデフォールト値は、html 文書への変換プログラム o2h.rbの中で、

   $default_dashline_backcolor = "whitesmoke"

と指定されています。この文書固有の設定の効果も含めて、現在の $default_dashline_backcolor の値は、"whitesmoke" です。

ダッシュラインで囲まれている範囲の背景色は、$bgcolor が空き文字列でない場合は、$bgcolor を背景色として採用します。

$bgcolor が空き文字列である場合は、$default_dashline_backcolor を背景色として採用します。

bgcolor = $bgcolor
if bgcolor.bytesize == 0
  bgcolor = $default_dashline_backcolor
end

として定まる bgcolor が背景色として採用されます。

以上の仕様により、

;;; @(%) $bgcolor = "beige"
----------------------------------------------------------~
このようにダッシュラインで囲まれた範囲の文字列は、
デフォールトで指定しているダッシュライン環境の背景色
$default_dashline_backcolor によって
表示されます。
----------------------------------------------------------.

のようにして、$bgcolor = "beige" と指定することにより、つぎのように整形されます。

このようにダッシュラインで囲まれた範囲の文字列は、
デフォールトで指定しているダッシュライン環境の背景色
$default_dashline_backcolor によって
表示されます。

この例では、

   ;;; @(%) $bgcolor = "beige"

と指定したので、背景色が beige に変更されました。この後、$bgcolor の定義をそのままにしておくと、他の文書環境でも、ここで指定した背景色 beige が使用されます。

背景色の指定を元に戻すには、

   ;;; @(%) $bgcolor = ""

と書いた行を挿入します。

html 文書への変換プログラム o2h.rb の中では、ダッシュラインで囲まれる文書環境以外で、デフォールトの背景色としては、枠で囲む場合に使われる変数として、$default_frame_backcolor,$default_panel_backcolor が定義されています。例えば、これらはつぎのような形で記述されています。

   $default_frame_backcolor = "null"
   $default_panel_backcolor = "null"

$default_frame_backcolor は、frame 環境の背景色のデフォールト値を与えています。

この文書固有の設定の効果も含めて、現在の $default_frame_backcolor、 $default_panel_backcolor の値は、

  $default_frame_backcolor = "null" 
  $default_panel_backcolor = "floralwhite" 

です。

$default_frame_backcolor = "null" にしておくと、 frame 環境の背景色を指定しないのがデフォールトということになります。

つぎの枠は、@begin{frame} ... @end{frame} を使って書いています。

$default_frame_backcolor は frame 環境の背景色に使用されます。

この背景色の名前は、$default_frame_backcolor = "null" です。
つぎの枠は @begin{panel} ... @end{panel} を使って書いています。

$default_panel_backcolor  は、ダッシュライン環境、frame 環境以外の、枠で囲む環境の背景色に使用されます。

@begin{panel} ... @end{panel} 環境のデフォールトの背景色は、$default_panel_backcolor とされます。

この他の文書環境の背景色は、$default_bgcolor と $bgcolor で制御されます。

---~ /beige/ --------------------------------------------
このように、背景色を /.../ で指定した場合は、
$default_dashline_backcolor の指定よりも優先して採用され
ます。
---. ----------------------------------------------------

のように書くと、つぎのように整形されます。

このように、背景色を /.../ で指定した場合は、
$default_dashline_backcolor の指定よりも優先して採用され
ます。

デフォールトの背景色の指定、$bgcolor による背景色の指定などを考慮した後で、最終的に背景色の指定が "null" になった場合は、背景色は指定されません。

背景色の指定が "white" であるのと "null" であるのとは意味が違います。背景色の指定が "white" であると背景を白色で塗るのに対して、背景色の指定が "null" であると、背景色の指定をしません。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

6.5.2 文書環境のフォントの色の指定

デフォールトのフォントの色は、html 文書への変換プログラム o2h.rbの中で

   $default_fontcolor = "Black"
   $default_vbcode_color = "mediumblue"

によって定められています。$default_fontcolor は、一般的に、デフォールトのフォントの色を指定するものです。$default_vbcode_color は、vb 環境など、枠で囲まない、プログラムコードを示すときに使用される文書環境のフォントのデフォールトの色を指定するものです。

文書環境のフォントの色を決めようとしているときに

   $fontcolor = ""

であれば、フォントの色は、$default_fontcolor または $default_vbcode_color に指定されている色が使用されます。

特に、プログラムコードを表示するための文書環境の中で、枠がない文書環境では、フォントの色は、$default_vbcode_color が使用されるので、

void main()
{
   cout << "Hello, world!";
}

のように、青い色のフォントで表示されます。

文書環境のフォントの色を変更したいときは、

   ;;; @(%) $fontcolor = "crimson"

のように、$fontcolor を変更します。$fontcolor は、直後の文書環境に適用されれば、すぐに、$fontcolor = "" に戻されます。

したがって

;;; @(%) $fontcolor = "crimson"
,,,~ ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
void main()
{
   cout << "Hello, world!";
}
,,,. ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

のように書くと、つぎのように整形されます。

void main()
{
   cout << "Hello, world!";
}

フォント色を指定するには、;;; @(%) $fontcolor = "crimson" を置いて指定する方法の他に、つぎのような指定方法もあります。

,,,~ /,green/ ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
void main()
{
   cout << "Hello, world!";
}
,,,. ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

これで、つぎのように整形されます。

void main()
{
   cout << "Hello, world!";
}

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

6.6 数式を書く

Referred at: [H1][H2][H3][H4][H5]

MathJax (※) の仕組みを利用して数式を書くことができます。数式を書くときは、行頭から、0個以上の半角空白を置き、その後に、$mathと書いて改行する行を置いてください。例を示します。

  $math

このように $math を書いた行は、文書のどこにあっても何度あっても構いません。

このように $math を書いた行があれば、o2h は、文書を html ファイルに変換したときに、html ファイルの最初の方に

<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML">
</script>

と書き込みます。これにより、数式が整形されるようになります。

※ MathJax については、http://genkuroki.web.fc2.com/ を参照してください。

数式を書いたり、表示したりするために何かをインストールをする必要はありません。$math を入れることによって挿入されるタグが全て面倒を見てくれます。

ただし、このタグは、mathjax のページを参照するので、インターネットに接続されていなければ、数式を表示することはできません。たぶん。

試したところ、インターネットに接続しない場合でも、数式を表示できたので、良く分かりません。

● inlineMath

文中の数式は、(h ¥( ¥)/h) で囲みます。
例を示します。(h ¥(¥pi¥)/h) のように書くと、\(\pi\) と表示されます。(h の後に半角空白を 1個以上置く必要があります。 \(\sum_{n=1}^\infty \frac{1}{n^2} = \frac{\pi^2}{6}\) のような文中数式も書けます。

※ [2017-05-08] より前は、html コードの中であっても、そうでなくても、文中の数式を、¥( ¥) で囲めば文中数式になっていましたが、[2017-05-08] に気づいたときには、文中数式は、さらに (h ... /h) で囲まないとうまく整形できなくなっていました。

1. (Html ¥(y = ax^3 + bx^2 + cx + d¥) /Html)
2. ¥(y = ax^2 + bx + c¥)
3. (Vb ¥(y = ax^2 + bx + c¥) /Vb)
4. ... ¥(y = ax^2 + bx + c¥)
5. (Code ¥(y = ax^2 + bx + c¥) /Code)

と書いて、次のように整形されます。

  1. \(y = ax^3 + bx^2 + cx + d\)
  2. ¥(y = ax^2 + bx + c¥)
  3. ¥(y = ax^2 + bx + c¥)
  4. ¥(y = ax^2 + bx + c¥)
  5. \(y = ax^2 + bx + c\)

有名なオイラーの公式は,\(e^{i\theta}=\cos\theta+i\sin\theta\) です.

● displayMath

別立ての数式は、@begin{html} ... @end{html} で囲んで書くようにします。
式番号は、¥tag{ } で入れられます。

数式の参照に、Anchor 関数 H1 を使用しています。

(Anchor "式(1)")
@begin{html} -----------------------------------------------
¥[
  ¥sum_{n=1}^¥infty ¥frac{1}{n^2} = ¥frac{¥pi^2}{6}
  ¥tag{1}
¥]
@end{html} -------------------------------------------------

と書いて、つぎのように整形されます。(Anchor "式(1)") と書いている部分が、整形の後、□ Referred at: [1][2] ... のように変換されていることを確認してください。(Anchor "式(1)") と書いて示した数式を参照するところでは、(H "式(1)") のように書きます。

□ Referred at: [H1][H2][H3][H4]
\[ \sum_{n=1}^\infty \frac{1}{n^2} = \frac{\pi^2}{6} \tag{1} \]

(Anchor "式(2.1)")
(Anchor "式(2.2)")
@begin{html}
¥[
¥begin{eqnarray}
{¥rm Prob}[Q_p > Q_{p1}] &=& 
¥sum_{i=1}^{N} p_{i} ¥ {¥rm Prob} ¥left [ Q_p > Q_{p1} ¥; | 
¥; ¥xi =¥xi_i ¥right ] ¥tag{2.1} ¥¥
&=& ¥sum_{i=1}^{N} p_i ¥ {¥rm Prob} 
¥left [ ¥boldsymbol{R} > R_{i}(Q_{p1}) ¥right ] 
¥tag{2.2}
¥end{eqnarray}
¥]
@end{html}

と書いてつぎのように整形されます。

\[ \begin{eqnarray} {\rm Prob}[Q_p > Q_{p1}] &=& \sum_{i=1}^{N} p_{i} \ {\rm Prob} \left [ Q_p > Q_{p1} \; | \; \xi =\xi_i \right ] \tag{2.1}\\ &=& \sum_{i=1}^{N} p_i \ {\rm Prob} \left [ \boldsymbol{R} > R_{i}(Q_{p1}) \right ] \tag{2.2} \end{eqnarray} \]

● AMSmath

(Anchor "(式3)")
@begin{html} 
¥[
¥begin{align*}
A & = B ¥tag{3} ¥¥
  & = C ¥¥
  & = D.
¥end{align*}
¥]
@end{html} 

と書いて、つぎのように表示されます。

\[ \begin{align*} A & = B \tag{3} \\ & = C \\ & = D. \end{align*} \]

(H "式(1)") は、「解析概論」の p.236 に示されています。式の誘導もそこに示されています。
と書いて、つぎのように整形されます。

式(1) H1 は、「解析概論」の p.236 に示されています。式の誘導もそこに示されています。


○ yamamoto さんのページ に書いてあった例

http://www.yamamo10.jp/yamamoto/comp/WEB/MathJax/index.php

ガウスの発散定理は,
@begin{html} -----------------------------------------------
¥[
  ¥begin{align}
    ¥int_V ¥nabla¥cdot AdV=¥int_S A¥cdot n dS
    ¥tag{4}
    ¥label{eq:gauss}
  ¥end{align}
¥]
@end{html} -------------------------------------------------
です.式(h ¥eqref{eq:gauss}/h)は,微分の体積分はもとの関数の面積分になる,と言っています.

と書いて、つぎのように整形されます。。

ガウスの発散定理は, \[ \begin{align} \int_V \nabla\cdot{}A dV=\int_S A\cdot{}n dS \tag{4} \label{eq:gauss} \end{align} \]です.式\eqref{eq:gauss}は,微分の体積分はもとの関数の面積分になる,と言っています.

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

6.7 区切り線を入れる

全角の横線 ━(「よこ」で変換すれば表示されます。) を、その横線が挿入された箇所で有効な環境で、行頭から10個以上書けば、<hr> を挿入したのと同じ効果があります。

  1. 文字通り行頭から、全角の横線 ━ を10個以上かけば、左端から始まる横線が描かれます。

  2. マーク付きリスト環境、番号付き環境などの環境が開始されている場合に、インデントの位置から、全角の横線 ━ を10個以上かけば、その環境の中で、<hr> が挿入されます。


    上の行の横線は、番号付きリストの内側で、<hr> を挿入されたように描かれます。

ここは Paragraph 環境なので、文字通り行頭から書くと、行頭からの区切り線が挿入されます。


直前に横線が描かれていることを確認してください。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

6.8 同じ環境を異なる記述法で書く

odr では、同じ環境を異なる記述法で書くことができるようになっているものがあります。これは、冗長なように思われるかも知れませんが、その環境の使用方法を説明するときなどに、同じ環境を異なる記述法で書くことができると便利だからです。また、@begin ... @end で表現すれば、その環境の初めと終わりの対応が見やすいという利点もあります。

例えば、

---~
void main()
{
  cout << "Hello world.";
}
---.

---~ -----------------------------------------------------
void main()
{
  cout << "Hello world.";
}
--- ------------------------------------------------------

----------------------------------------------------------~
void main()
{
  cout << "Hello world.";
}
----------------------------------------------------------.

@begin{code} ---------------------------------------------
void main()
{
  cout << "Hello world.";
}
@end{code} -----------------------------------------------

は同じ効果があり、すべて

void main()
{
  cout << "Hello world.";
}

のように整形されますが、間に表示するコードが長くなれば、@begin ... @end の表記法が分かりやすくなります。

--~
ここは普通のフォントサイズで
表示されます。
--.

--~ ------------------------------------------------------
ここは普通のフォントサイズで
表示されます。
--. ------------------------------------------------------

@begin{panel} --------------------------------------------
ここは普通のフォントサイズで
表示されます。
@end{panel} ----------------------------------------------

とは同じ効果があり、すべて

ここは普通のフォントサイズで
表示されます。

と整形されます。

,,,~
void main()
{
  cout << "Hello world.";
}
,,,.

,,,~ ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
void main()
{
  cout << "Hello world.";
}
,,,. ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

@begin{vb} -----------------------------------------------
void main()
{
  cout << "Hello world.";
}
@end{vb} -------------------------------------------------

とは、すべて同じ効果があり、すべて

void main()
{
  cout << "Hello world.";
}

と整形されます。

,,,,~ ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
void main()
{
  cout << "Hello world.";
}
,,,,. ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

@begin{vb}{bold} -----------------------------------------
void main()
{
  cout << "Hello world.";
}
@end{vb} -------------------------------------------------

は、同じ効果があり、いずれも

void main()
{
  cout << "Hello world.";
}

と整形されます。

整形した結果は同じなので、ODR 文書のときの分かりやすさ、好みでどの書き方にするか選択してください。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

7 Emacs 関数

Referred at: [H1][H2][H3][H4][H5][H6][H7][H8]

ODR 文書の中に、(Net ...) のような形のリスプ式を埋め込んでo2h に対する指示を書き込むことができるようにしています。

o2h が解釈できるこのようなリスプ式を [Emacs 関数] (引用箇所: [N1][N2] ) と呼ぶことにします。

ODR 文書の中に、(Foo ...) の形の文字列があっても、そのすべてがo2h に対する指示とは限りません。特定のものだけが o2h に対する指示として取り扱われます。(FooBar ...) を解釈できる Emacs 関数 FooBar が定義されていなければ、文中に (FooBar ...) と書いてあっても何も起きず、ただの文字列として処理されます。

Emacs 関数として定められたものを、文中で説明しようとするとちょっと困ることがあります。ただの文字列として書きたいときにも、Emacs 関数の機能が呼び出されてしまいます。

その場合、つまり、Emacs 関数の機能の呼び出しを抑制して、ただの文字列として処理して欲しい場合は、

... (Foo ...) のように

行頭にピリオッドを3個置いて書くと、Emacs 関数の評価を回避することができます(※)。

ピリオド3つを行頭に置く H1 を参照してください。詰め込み処理される環境で、行頭にピリオドを3つ置いて、その後に半角空白を1 個おき、その後に書いた文字列は、行末まで、Emacs 関数の処理はせず、タグ文字は代替コードに置き換えて表示されます。

例を示します。

あるいは、Emacs 関数を呼び出す ( の前に = を書いて、
... =(H "H 関数") のように書くと、
Emacs 関数とは解釈されません。
そうすると =(H "H 関数") のように地の文の中に書くことができます。

と書いて、次のように整形されます。

あるいは、Emacs 関数を呼び出す ( の前に = を書いて、=(H "H 関数") のように書くと、 Emacs 関数とは解釈されません。そうすると (H "H 関数") のように地の文の中に書くことができます。

Emacs 関数の記述が正しくない場合は、o2h H1 は、整形した文書中に、その旨を表記し、作業を先に進めます。

例えば、つぎのように書くと

例えば、=(H "..." の後に、右丸括弧が来ないと、置き換えをしません。(H "Emacs 関数" ) (右括弧の前に半角空白がある。)とか、(H " "Emacs 関数") (間違えて、" を入れてしまったので引用符号の対応がとれていない。) とかは置き換えられません。

(H abc のように、引数が二重引用符号で始まっていない場合、置き換え処理しません。

(H "o2h") では、Emacs 関数の記述の誤りを発見したときには、誤りを表示して先に処理を進めようとします。

(File "foo" あ (H "Emacs 関数")

つぎのように表示されます。

例えば、(H "..." の後に、右丸括弧が来ないと、置き換えをしません。?(incomlete)==>(H "Emacs 関数" ) (右括弧の前に半角空白がある。)とか、?(incomlete)==>(H " "Emacs 関数") (間違えて、" を入れてしまったので引用符号の対応がとれていない。) とかは置き換えられません。

(H abc のように、引数が二重引用符号で始まっていない場合、置き換え処理しません。

o2h H2 では、Emacs 関数の記述の誤りを発見したときには、誤りを表示して先に処理を進めようとします。

?(incomlete)==>(File "foo" あ Emacs 関数 H7

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

7.1 引数の個数による Emacs 関数の分類

引数の個数 Emacs 関数
引数はいつも1個 (Head "abc"), (H "abc"), (Hd "abc"), (Note "abc"), (N "abc"), (Anchor "abc"),
(Html ... /Html), (h ... /h), (Code .../Code), (Vb ... /Vb)
引数はいつも2個 (Show "abc" "xyz"), (Ref "abc" "xyz"), (Label "abc" "xyz"),
引数は1個または2個 (Net "abc"), (Net "abc" "xyzzy"), (File "abc"), (File "sitelisp.lnk" "kh-base.l"), (Folder "foldername"), (Folder "sitelisp.lnk" "subfolder")
引数は1個、2個または3個 =(Xv, "./foo.png"), =(Xv, "./foo.png" "title"), =(Xv, "sitelisp.lnk" "20%" "30%")

(Html ... /Html), (h ... /h), (Vb ... /Vb) の 3つは他の Emacs 関数と違って、... のところの文字列を "..." のようにダブル引用符号で囲みませんし、呼び出し形式が異なっています。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

7.2 Net 関数、File 関数、Folder 関数、FileNet 関数

● Net 関数 Referred at: [H1][H2]

Net 関数は、引数を一つ、または2つ取ります。いずれの引数も文字列です。

まず、引数が一つの場合。ODR 文書の中に、(Net "http://rfri.org")という文字列があると、それを、
<a href="http://rfri.org">http://rfri.org</a>に置き換えます。(Net "url") と書けば、
<a href="url">url</a> に置き換えられるということです。

つぎの行に、(Net "http://rfri.org") と書いてみます。html ファイルに変換されると、リンクになっていることを確認してください。

http://rfri.org

つぎに、引数が2つある場合。 ODR 文書の中に、(Net "http://rfri.org" "流出予測研究所") という文字列があると、それを、 <a href="http://rfri.org">流出予測研究所</a>に置き換えます。 (Net "url" "show") と書けば、<a href="url">show</a> に置き換えられるということです。

つぎの行に、(Net "http://rfri.org" "流出予測研究所") と書いてみます。

流出予測研究所

url の部分に書く文字列は長くなりがちです。url の部分に書く文字列が長くなったら、継続行の規約(行を継続する H2を参照)を利用して、

: (Net "http://xyzzy.s53.xrea.com/wiki/index.php?_ 
  QuickTour%2Fetc%2F%A4%D8%A4%CA%A4%C1%A4%E7%A4%B3%A5_ 
  %EA%A5%D5%A5%A1%A5%EC%A5%F3%A5%B9%A4%CE%BB%C8%A4%A4_ 
  %CA%FD" _ 
  _ 
  "■ QuickTour/etc/へなちょこリファレンスの使い方 - XyzzyWiki")

のように書くことができます。これで、

■ QuickTour/etc/へなちょこリファレンスの使い方 - XyzzyWiki

のように整形されます。

● File 関数 Referred at: [H1]

File 関数、Folder 関数についても全く同様に処理されます。すなわち、 ODR 文書の中に、
(File "C:/home/me/foo.txt") という文字列があると、それを、
<a href="C:/home/me/foo.txt">C:/home/me/foo.txt</a>
に置き換えます。

(File "filename") と書けば、<a href="filename">filename</a> に置き換えられます。

● Folder 関数

同様に、(Folder "foldername") と書けば、<a href="foldername">foldername</a>に置き換えられます。

また、(Folder "sitelisp.lnk" "subfolder") と書けば、第一引数は、"C:/dirlink/sitelisp.lnk" を指定したものとして処理され、そのショートカットファイルが指すパス "C:/tools/xyzzy/site-lisp" に置換され、その後の "subfolder" と結合されて、 (Folder "C:/tools/xyzzy/site-lisp/subfolder") と指定したように処理されます。

この機能を実現するために、ライブラリ win32-shortcut を利用しました。win32-shortcut をインストールするには、

  PS> gem install win32-shortcut

とします。

● FileNet 関数

(FileNet "./foobar.cpp") と書けば、<a href="./foobar.cpp.html">./foobar.cpp.html</a> に置き換えられます。

xyzzy で編集中は、xyzzy の FileNet 関数 を (File "./foobar.cpp") と書いてあったように動作させることにしておき、xyzzy の中では、./foobar.cpp を参照できるようにしておき、 o2h で html ファイルに変化したときには、引数で指定されたファイルではなく、それを html に変換したファイルを参照するように書き換えられます。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

7.3 Ref 関数

Referred at: [H1]

Ref 関数は、(Ref "foo" "Foo") のような形で使います。引数は2つで、いずれも文字列です。

● o2hから見たRef関数の処理

o2h が、ODR 文書を html 文書に変換しているときに、ODR 文書中に (Ref "foo" "Foo") という文字列があると、それを、<a href="#foo">Foo</a>と書きかえます。

その結果、その html 文書をブラウザで見たときには、文書内のその位置こにリンクがあることが分かるようなスタイルで、文字列Foo がその位置に示され、リンク先を指定する文字列が "foo" になります(※)。

※ このように、href="..." の ... の部分の文字列の先頭に # を置くと、その html ファイル内の文字列をアンカー文字列とするアンカーへのリンクになります。... の部分の文字列の先頭が # でなければ、その文字列を URL としたページへのリンクになります。

この Ref 関数は、Label 関数 と対になって使用します。Ref 関数で設定したリンクの先(アンカー)を Label関数で設定します。(Ref "foo" "Foo") を書いたときは、(Label "foo" "Bar") のような記述が同じ ODR 文書内に置かれなければなりません。"Bar" の部分は、(Label "foo" "Bar") が置かれた箇所に表示されます。

Ref 関数によって生成されたリンクをクリックすると、Label 関数によって置かれたアンカーに jump します。

● ODR 文書を編集中にRef関数の記述を評価する(xyzzyでの実行)

xyzzy を使っていない場合は、ここの説明は無視してください。

xyzzy 編集中の ODR 文書に、(Ref "foo" "Foo") という文字列があるとします。この文字列の右括弧の後ろにカーソルを置いて、M-x my-eval-last-sexp を実行すると、この (Ref "foo" "Foo")を関数として評価することになります。

関数 Ref をつぎのように定義しておけば、このとき、「同じ文書内の、(Label "foo" を検索して、カーソル位置をそこに移動」します。

; * Ref
; (Ref "foo" "Foo") のように書かれた箇所で、
; C-c C-e (my-eval-last-sexp) を実行すると、
; (Label "foo" を探して、そこに jump します。
(defun Ref (tag displayWord)
  (interactive)
  (let (searchword)
    (setq searchword (concat "[^=]¥(Label " "¥¥¥"" tag "¥¥¥""))
    ; (message-box searchword)
    (if (re-search-forward searchword t)
        (progn
          (search-forward ")")
          (forward-char 1))
      (if (re-search-backward searchword t)
          (progn
            (search-forward ")")
            (forward-char 1))
        (message-box "対応する Label がありません。"))
      )
    ))

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

7.4 Label 関数

Referred at: [H1]

Label 関数は、(Label "foo" "Foo") のような形で使います。引数は2つで、いずれも文字列です。

● o2hから見たLabel関数の処理

o2h が、ODR 文書を html 文書に変換しているときに、ODR 文書中に (Label "foo" "Bar") という文字列があると、それを、 <a name="foo">Bar</a> と書きかえます。

その結果、o2h によって生成された html 文書をブラウザで見たときには、文字列 Bar がその位置に表示されます。また、その位置に "foo" という名前のアンカーが設置されます。

通常、Label 関数の方では、第2引数は、ヌル文字にして、(Label "foo" "") のように書きます。このようにするとアンカーは設置されますが、その位置には何も表示されないので、アンカーが設置されていることは見かけだけでは分かりません。

● ODR 文書を編集中にLabel関数を評価する(xyzzyでの実行)

xyzzy を使っていない場合は、ここの説明は無視してください。

xyzzy で ODR 文書を編集中であるとし、文書中に(Label "foo" "Foo") という文字列があるとします。このとき、その文字列の右括弧の後ろにカーソルを置いて、M-x eval-last-sexp を実行すると、同じ文書内の、(Ref "foo"を検索して、カーソル位置がそこに移動します。

; * Label
; (Label "foo" "Foo") のように書かれた箇所で、
; C-c C-e (my-eval-last-sexp) を実行すると、
; (Ref "foo" を探して、そこに jump します。
;
(defun Label (tag displayWord)
  (interactive)
  (let (searchword)
    (setq searchword (concat "[^=]¥(Ref " "¥¥¥"" tag "¥¥¥""))
    (if (re-search-backward searchword t)
        (progn
          (search-forward ")")
          (forward-char 1))
      (if (re-search-forward searchword t)
          (progn
            (search-forward ")")
            (forward-char 1))
        (message-box "対応するRefがありません。"))
      )
    ))

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

7.5 N 関数

Referred at: [H1][H2][H3][H4]

N 関数と Note 関数は注釈を書くために使用します。
N 関数は、(N "Foo") の形の、Note 関数は、(Note "Foo") の形の Emacs 関数 N1 です。

(Note "Foo") という形の文字列と(N "Foo") という形の文字列は互いに呼応するものとして使用します。
(Note "Foo") の形の文字列は注釈文を書くところで使用します。
(N "Foo") の形の文字列は、注釈を参照するところで使用します。

● o2hから見た N 関数の処理

o2h が、ODR 文書を html 文書に変換しているときに、ODR 文書中に(N "Foo") という文字列があると、そこに、(Note "Foo") へのリンクを置きます(※)。

※ プログラム上での工夫。(Note "Foo") であれ、(N "Foo") であれ、Note 関数、または N 関数の引数として最初に出現した時点で、文字列 "Foo" に対応して使用されるアンカー文字列を内部的に乱数を用いて生成しています。

リンクの右上に、小さなフォントで示される文字 N に続く数字は、その注釈への参照が文中で何番目にされたかを示しています。例えば、Foo N2 という形のリンクは語 Foo に対する注釈文をその文書の中で 2 番目に参照していることを示しています。

● ODR 文書を編集中に N 関数を評価する(xyzzyでの実行)

xyzzy を使っていない場合は、ここの説明は無視してください。

ODR 文書中に N 関数が記述されていて、(N "Foo") のようであったとして、右側の ) の後ろにカーソルを置いて、M-x eval-last-sexp を実行すると、同じ文書内の、(Note "Foo") を検索して、カーソル位置がそこに移動します。

これにより、ODR 文書を xyzzy で編集しているときに、注釈を参照している箇所から注釈を書いている箇所にジャンプできます。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

7.6 Note 関数

Referred at: [H1][H2][H3][H4]

Note 関数は、注釈文を書くために使用します。注釈文には、それ自身が重要な内容を含んでいる事項を記載し、本文にその事項との関連を記載します。本文の内部で、相互に関連する部分を引用し合うには、見出しを引用する H 関数 H1 の方を使用するようにします。

本文の記述に補足的にコメントを書くときは、ぶら下げインデント環境 H3 を使用します。

● Note 関数の形と使用例

文書中に、(Note "...") のようなコードを書くことができます。このように、(Note "...") のようなコードが、詰め込み処理される文書環境に書かれると、... に書かれた文字列が注釈文の項目名として登録されます。(Note "...") が書かれた位置に置かれるアンカーのところには、"..." を [ ]で囲んだ文字列が表示されます。

注釈文の項目名は、見出し H3 とは別に管理されます。

(Note "...") の右括弧の後ですぐ改行されるか、右括弧の後に文字列が続くかで、html 文書に変換されたときの表示が異なります。 (Note "...") の右括弧の後ですぐ改行されると、html 文書に変換されたときに、行末で改行されます。(Note "...") の右括弧の後に文字列が続くと、文の途中に書かれたものとして処理されます。

[Note 関数による注釈項目] 引用箇所: [N1]
この上の行に、(Note "Note 関数による注釈項目") と書いてすぐ改行しています。o2h.rb によって整形すると、 [Note 関数による注釈項目] のように表示され、すぐ改行されます。書かれた Note 関数呼び出しの注釈項目に対する引用があると、[Note 関数による注釈項目] を書いた後、すぐ改行せず、その後に、引用箇所: の後に引用箇所が [1] のように [] で囲んだ数字で表示されます。

Note 関数は、この例のように右括弧の後ですぐ改行する方法の他に、文の途中に (Note "文の途中に書く Note 関数による注釈項目") のように書くこともできます。 実際に書くと、[文の途中に書く Note 関数による注釈項目] (引用箇所: [N1] ) のように整形されます。Note 関数を文の途中に書くときは、右側の ) の後に文字列を置いてください。文の途中に書かれた Note関数呼び出しの注釈項目に対する引用があると、引用箇所が丸括弧に囲んで表示されます。

同じ言葉を引数にする Note 関数が文書の中の複数箇所に出てきた場合、最初に出てきたものだけが有効で、その後に出てきた Note 関数は置き換え処理されず、そのまま書きだされ、

   重複しています。 (Note "...")

のようなメッセージが html ファイルの最後に表示されます。

Note 関数によって作成した注釈項目を引用するには、N 関数 H1 を使用します。

● Note 関数と Head 関数が作成する見出しの違い

Note 関数が作成した注釈項目は、[...]で囲まれていますが、
Head 関数が作成した見出しは、"..." で囲まれています。

● ODR 文書を編集中に Note 関数呼び出しを評価する(xyzzyでの実行)

xyzzy を使っていない場合は、ここの説明は無視してください。

ODR 文書中に Note 関数呼び出しが、(Note "Foo") のように書かれているとして、右側の ) の後ろにカーソルを置いて、M-x eval-last-sexp を実行すると、同じ文書内の、(N "Foo" を検索して、カーソル位置がそこに移動します。

これにより、注釈文が書かれている箇所から注釈を参照している箇所にジャンプできます。同一の注釈文に対して、複数の箇所で参照している場合は、M-x NoteSearchAgain とすると、同じ注釈文を参照している別の箇所にジャンプできます。

● Note 関数で参照した注釈文が無い場合どうなるか

N 関数呼び出し文が書かれた位置に、Note 関数呼び出し文で書かれる注釈文へのリンクが埋め込まれますが、対応する Note 関数呼び出しが書かれないこともありえます。

html 文書の最後で、N 関数呼び出しに対応する Note 関数呼び出しが無いもののリストが表示されます。そのようなものが一つも無ければ何も表示されません。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

7.7 Head 関数

Referred at: [H1][H2][H3][H4][H5]

● Head 関数の形と使用例

文書中に、(Head "...") のようなコードを書くことができます。このように、(Head "...") のようなコードが、詰め込み処理される文書環境に書かれると、... に書かれた文字列が 「Head 関数による拡張見出し」として登録されます。「Head 関数による拡張見出し」は 見出し H4 の一つです。(Head "...") が書かれた位置に置かれるアンカーのところには、... を ""で囲んだ文字列が表示されます。

(Head "...") の右括弧の後ですぐ改行されるか、右括弧の後に文字列が続くかで、html 文書に変換されたときの表示が異なります。(Head "...") の右括弧の後ですぐ改行されると、html 文書に変換されたときに、行末で改行されます。(Head "...") の右括弧の後に文字列が続くと、文の途中に書かれたものとして処理されます。

"Head 関数による拡張見出し" (Referred at: [H1][H2] ) この上の行に、(Head "Head 関数による拡張見出し") と書いてすぐ改行しています。o2h.rb によって、整形すると、行頭から、"Head 関数による拡張見出し" のように表示され、すぐ改行されます。"Head 関数による拡張見出し" に対する参照があると、行末に参照箇所が表示されます。

参照箇所は、

  Referred at: [1][2][3]

のような形で表示されます。

Head 関数による拡張見出しは、この例のように、行頭から書く方法の他、文の途中に、(Head "文の途中に書く拡張見出し") のように書くこともできます。 実際に書くと、"文の途中に書く拡張見出し" (Referred at: [H1] ) のように整形されます。文の途中に書かれたHead 関数呼び出しの見出しに対する参照があると、参照箇所が丸括弧に囲んで表示されます。

Head 関数によって作成した見出しを参照するには、H 関数 H2 を使用します。

Head 関数、H 関数の使用方法については、見出しへのリンクを作成する H1 でも解説します。

● Head 関数と Note 関数が作成する見出しの違い

Head 関数が作成した見出しは、"..." で囲まれていますが、
Note 関数が作成した注釈項目は、[...] で囲まれています。

● 数式の参照に Head 関数を利用する

一時、数式を参照するのに、Head 関数を利用して見ました。しかし、参照されるかどうか分からない数式のところにHead 関数を用いてアンカーを設置するのはあまり好ましくないので、Anchor 関数 H2 を考えました。

数式を書く H2 を参照してください。Anchor 関数を導入してからは、Anchor 関数を用いて、数式を参照することにしています。式(1) H2 を参照してください。

● 表を参照するのに、Head 関数を利用する。

一時、表を参照するのに Head 関数を利用して見ました。しかし、"" で囲むのがあまり適切ではないので、Hd 関数 H1 を導入しました。 Hd 関数の方は、見出し文字列を "" で囲みません。

● ODR 文書を編集中に Head 関数を評価する (xyzzyでの実行)

xyzzy を使っていない場合は、ここの説明は無視してください。

(Head "Foo") という形の文字列の最後の括弧の右側にカーソルを置いて、M-x my-eval-last-sexp を実行すると、ファイルの先頭にカーソルを移動して、(H "Foo") を検索します。 M-x NoteSearchAgain とタイプすると、後続の(H "Foo") を検索します。

これを利用すると、同一の「Head 関数見出し」に対して複数のリンクが設定されているとき、それらのリンクが置かれている場所を順次、確認していくことができます。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

7.8 Hd 関数

Referred at: [H1][H2]

Hd 関数は、(Hd "...") の形で使用し、Head 関数とほぼ同じ機能を持っています。

● o2h から見た Hd 関数の処理

(Hd "...") のようなコードが、詰め込み処理される文書環境に書かれると、... に書かれた文字列が 「Hd 関数による拡張見出し」として登録されます。

Hd 関数による拡張見出し Referred at: [H1][H2]
この上の行に、(Hd "Hd 関数による拡張見出し") と書いてすぐ改行しています。o2h.rb によって整形すると、行頭から「Hd 関数による拡張見出し」(「」は書かれません) と書かれてすぐ改行されます。
(Head "...") が書かれた位置に置かれるアンカーのところには、 "..." を "" で囲んだ文字列が表示されますが、 (Hd "...") と書いた場合は、(Hd "...") が書かれた位置に置かれるアンカーのところには、... のところの文字列が "" で囲まないで、そのまま表示されます。

● ODR 文書を編集中に Hd 関数を評価する (xyzzyでの実行)

xyzzy を使っていない場合は、ここの説明は無視してください。

(Hd "Foo") という形の文字列の最後の括弧の右側にカーソルを置いて、M-x my-eval-last-sexp を実行すると、ファイルの先頭にカーソルを移動して、(H "Foo") を検索します。M-x NoteSearchAgain とタイプすると、後続の(H "Foo") を検索します。

これを利用すると、同一の「Hd 関数見出し」に対して複数のリンクが設定されているとき、それらのリンクが置かれている場所を順次、確認していくことができます。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

7.9 Anchor 関数

Referred at: [H1][H2][H3]

□ Referred at: [H1][H2]
Anchor 関数は、(Anchor "...") の形で使用し、Head 関数 H1Hd 関数 H2 と同じ機能を持っています。(Anchor "...")のようなコードが、詰め込み処理される文書環境に書かれると、...に書かれた文字列が 「Anchor 関数による拡張見出し」として登録されます(見出し H5参照)。見出しは、(H "...") の形の H 関数を使って参照されます。

※ 上のパラグラフは、つぎのように書かれました。

(Anchor "Anchor 関数による拡張見出し")
Anchor 関数は、=(Anchor "...") の形で使用し、Head 関数や Hd 
関数と同じ機能を持っています。=(Anchor "...") のようなコード
が、詰め込み処理される文書環境に書かれると、... に書かれた文
字列が 「Anchor 関数による拡張見出し」として登録されます((H 
"見出し")参照)。=(H "...") の形の H 関数を使って参照されます。

Head 関数や Hd 関数と Anchor 関数との違いは、表示の仕方にあります。 (Anchor "...") と書いて、対応する参照 (H "...") が文書の中に一つも無かったら、つまり、参照されることが全く無かったら、(Anchor "...") が書かれた位置に置かれるアンカーのところには、アンカーは置かれるのですが、Html ファイルのビューアーで見た場合そこには何も表示されません(※)。

ここに書いた例、(Anchor "Anchor 関数による拡張見出し") に対して、(H "Anchor 関数による拡張見出し") が一つもなければ、(Anchor "Anchor 関数による拡張見出し") と書いた行自体が無かったように整形されます。参照があれば、□を書いて、その後に、Referred at: [1][2] のように参照箇所へのリンクが表示されます(※)。

※ この文書では、別の箇所で、(H "Anchor 関数による拡張見出し") によって参照しているので、(Anchor "Anchor 関数による拡張見出し")は、□ Referred at: [1][2] のような形になっているはずです。確認してください。

数式の参照に Anchor 関数を使用しています。 数式を書く H3 のところの 式(1) H3 を参照して見てください。式(2.1)、式(2.2)、式(3) を引数にする Anchor 関数呼び出しのところに何も表示されていないことに注意してくだい。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

7.10 H 関数

Referred at: [H1][H2][H3][H4][H5]

文書中に、(H "見出し行のタイトル") のようなコードを書くことができます。このような形の Emacs 関数 N2 を H 関数と呼びます。H 関数の引数は1個で、それは文字列です。

● o2hから見た H 関数の処理

(H "見出し行のタイトル") のように書いてあると、o2h は、"見出し行のタイトル" をタイトルに持つような見出しへジャンプするようなリンクを作成します。

詳しくは、見出しへのリンクを作成する H2 を参照してください(※)。

※ ここの「見出しへのリンクを作成する」は、(H "見出しへのリンクを作成する") と書きました。以前は、リンクの文字列は整形されたときには "..." で囲まれるようにしていましたが、今の版では、そのまま書かれます。

リンクの右上に小さなフォントで示されてる文字 H に続く数字は、その見出しへの参照が文中で何番目にされたかを示しています。この例で言えば、「見出しへのリンクを作成する」という見出しを、この文書中で何番目に参照したかを示しています。

H 関数は、Head 関数 H2 で作成する見出しにだけ対応しているのではないことに注意してください。 ODR でどのような見出しがあるか 見出し H6 を参照してください。

● ODR 文書を編集中に H 関数を評価する(xyzzyでの実行)

xyzzy を使っていない場合は、ここの説明は無視してください。

ODR 文書中に H 関数が記述されていて、(H "見出し行のタイトル") のようであったとして、右側の ) の後ろにカーソルを置いて、M-x my-eval-last-sexp を実行すると、同じ文書内で、"見出し行のタイトル" を「見出しまたは拡張見出し」とする箇所を検索して、カーソルがそこに移動します。

これにより、下位レベルの Ref 関数、Label 関数を直接使わずにすむことが多くなります。

● H 関数で参照した見出し/拡張見出しが無い場合どうなるか

H 関数が書かれた位置に、見出し行へのリンクが埋め込まれますが、それに対応する文字列を持った見出しまたは拡張見出しが出てこないこともありえます。

html 文書の最後で、H 関数で参照した見出し文字列が見出しや拡張見出しの中に無いもののリストが表示されます。そのようなものが一つも無ければ何も表示されません。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

7.11 Show 関数

Referred at: [H1][H2]

Show 関数は、(Show 第一引数 第二引数) の形をしているものとします。第一引数、第二引数とも文字列です。

Show 関数は、第一引数によって指定されるファイルを表示します。第二引数は、html に変換したときの表示文字列として使用されます。xyzzy で編集しているときは、第二引数は参照されず、意味はありません。

第一引数によって指定されるファイルが存在しない場合は、ファイルが存在しないことを報告する文字列を付加した文字列

  (Show 第一引数 第二引数) ==> 第一引数 does not exist.

に置き換えられます。

● o2h から見た Show 関数の処理

第一引数で指定されているファイルを href 引数として、第二引数を表示文字列とするリンク指定に書き換えます。

第一引数で指定されているファイルの拡張子が .odr の場合は、特別に、拡張子を .html に変えたファイルを同じディレクトリから探して、そのファイルが第一引数で指定されているように書き換えます。

ただし、拡張子を .html に変えたファイルと、元の、拡張子が .odrのファイル (ODRファイル)の両方のファイルの最終更新時刻を比べて、ODRファイルのファイルの方が新しい場合は、o2h.rb を用いて ODR ファイルから html ファイルを作り直して、作りなおした html ファイルを表示します。この o2h.rb の実行は、Show 関数呼び出しが読み込まれた時点で実行されます。

● ODR 文書を編集中に Show 関数を評価する(xyzzyでの実行)

xyzzy を使っていない場合は、ここの説明は無視してください。

Show 関数の (Show "..." "...") の右括弧の後ろにカーソルを置いて、M-x my-eval-last-sexp を実行すると、第一引数で指定されているファイルを引数にして、Start コマンドが実行されます。

第一引数で指定されているファイルの拡張子が .odr の場合は、特別に、拡張子を .html に変えたファイルを同じディレクトリから探して、その html ファイルを Start コマンドで実行します。

ただし、拡張子を .html に変えたファイルと、元の拡張子が .odr のファイル (ODRファイル)との最終更新時刻を比べて、ODRファイルのファイルの方が新しい場合は、o2h.rb を用いて ODR ファイルを html ファイルに変換して、html ファイルの方を表示します。

● 拡張子 .odr を導入した理由

この Show 関数の仕様を決めるにあたって、ODR 文書を収納していることが明確になるように、拡張子 .odr が導入されました(ODR ファイルの拡張子 H1)。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

7.12 Xv 関数

画像ファイルを読み込むときは、

  (Xv "./win-odr.odr--khlogo.png")

のように、Xv 関数を使います。上の行は、字下げ環境の中で書かれているので何もせずそのまま表示されていますが、パラグラフの中、あるいは左詰めだと、画像が表示されます。例えば、

@begin{frame} ----------------------------------------------
..(Xv "./win-odr.odr--khlogo.png")..
..(Hd "khlogo.png")..
@end{frame} ------------------------------------------------

だとつぎのように表示されます(中央合わせ H1 しています)。

表示失敗?: ./win-odr.odr--khlogo.png
khlogo.png Referred at: [H1][H2]
(Xv "./win-odr.odr--khlogo.png") は、文中に書いても構いません。 表示失敗?: ./win-odr.odr--khlogo.png ← この図は、(Xv "./win-odr.odr--khlogo.png") を文中に書いた結果表示されています。

画像のキャプション khlogo.png H1 を参照できます。

o2h.rb は、(Xv "./win-odr.odr--khlogo.png") は、<img src="./win-odr.odr--khlogo.png"> に変換されます。img タグは、表示される画像のサイズを調整する属性を利用できます。

これを利用するには、(Xv "./win-odr.odr--khlogo.png" "20%" "20%")のように書きます。つぎの図は、

..(Xv "./win-odr.odr--khlogo.png" "20%" "20%")..

と書いて表示されています。

表示失敗?: ./win-odr.odr--khlogo.png

2番目の引数が width、3番目の引数が height を指定しています。

表示失敗?: ./win-odr.odr--khlogo.png

height 引数のところを "" にする (引用符号は書きますが、中味をなしにする) こともできます。

表示失敗?: ./win-odr.odr--170202181445.png

京都府の雨雲の動き Referred at: [H1]
表示失敗?: ./win-odr.odr--170202182657.png

実況天気図
表示失敗?: ./win-odr.odr--170202184111.png

京都府のアメダス(気温)
京都府の雨雲の動き H1 を参照できます。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

7.12.1 attachclippedimage 関数 (xyzzy での利用)

xyzzy を使っていない場合は、ここの説明は無視してください。

cbar は、クリップボードにコピーした画像を簡単に ODR 文書に組み込むことができるように、エディター xyzzy で、attachclippedimage 関数を次のように定義しています。

attachclippedimage
(defun attachclippedimage ()
  (interactive)
  (let (retcode str)
   (setq retcode 
         (call-process 
          (concat "clipimagesave.exe" 
           " " 
           "¥"" (get-buffer-file-name (selected-buffer))
           "¥"")
          :wait t))
    (if (= retcode 0)
        (progn
            (setq str
                  (concat 
"@begin{frame} ----------------------------------------------¥n"
"(Xv ¥"" "./" (get-clipboard-data) "¥")¥n"
"¥n"
"図のタイトル¥n"
"@end{frame} ------------------------------------------------¥n"))
          (insert str))
      )
    )
  )

この中で使用している clipimagesave.exe は、cbar が作成したプログラムで、クリップボードにコピーした画像を、引数で指定するファイルのパス名に、"--" とプログラムを実行した時刻からファイル名を生成するプログラムです。

表示失敗?: ./win-odr.odr--170207182546.png

実況天気図
この図をクリップボードにコピーします。
表示失敗?: ./win-odr.odr--170207182904.png

clipimagesave.exe の実行例
クリップボードにコピーした天気図を win-odr.odr に添付しようとしているところです。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

7.12.2 attachimagefile 関数 (xyzzy での利用)

xyzzy を使っていない場合は、ここの説明は無視してください。

cbar は、ファイルに収録されている画像を簡単に ODR 文書に組み込むことができるように、エディター xyzzy で、attachimagefile 関数を次のように定義しています。

attachimagefile
(defun attachimagefile ()
  (interactive)
  (let (retcode str)
   (setq retcode 
         (call-process 
          (concat "attachfile.exe" 
           " " 
           "¥"" (get-buffer-file-name (selected-buffer))
           "¥"")
          :wait t))
    (if (= retcode 0)
        (progn
            (setq str
                  (concat 
"@begin{frame} ----------------------------------------------¥n"
"(Xv ¥"" "./" (get-clipboard-data) "¥")¥n"
"¥n"
"図のタイトル¥n"
"@end{frame} ------------------------------------------------¥n"))
          (insert str))
      )
    )
  )

この中で使用している attachfile.exe は、cbar が作成したプログラムで、指定した画像ファイルを、引数で指定するファイルのパス名に、"--" と元の画像ファイル名を連ねたファイル名を生成するプログラムです。

連載 C#入門 第2回 ネームスペースとクラス
http://www.atmarkit.co.jp/fdotnet/csharp_abc/csharp_abc_002/csharp_abc01.html

の図をダウンロードして添付する例を示します。

attachfile.exe の画面例を示すことは省略します。

元図のファイル名は、csharp_struct.gif で、attachfile.exe によって、win-odr.odr--csharp_struct.gif という名前で複写されています。

表示失敗?: ./win-odr.odr--csharp_struct.gif

C#プログラムの構造
C#プログラムの構造を大まかに図にするとこのようになる。最も外側にネームスペースがあり、そのなかにクラスが含まれ、クラスのなかにメソッドが含まれる。変数は、各クラスごとに共通に使われるものと、メソッド内部に固有のものがある。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

7.12.3 添付ファイルのリスト

attachfile.exe や clipimagesave.exe を使用して、ODR 文書ファイルに、クリップボードの画像や画像ファイルを添付したとき、

  PS> cat .¥win-odr.odr | select-string '([^="]|^)¥(Xv ' > .¥foo.txt
  PS> ls.exe -1  win-odr.odr--* > .¥bar.txt

として、.¥foo.txt と .¥bar.txt を比較して過不足なければ問題ありません。ここで、win-odr.odr に格納されている ODR 文書の添付ファイルを対象にしているとしています。

.¥bar.txt の方に余分なファイルがあれば、参照する必要がなくなっているので、そのファイルは削除します。

.¥bar.txt にないファイルが .¥foo.txt から参照されていることが分かった場合は、必要な図を削除してしまった可能性があります。ODR 文書の該当する行の周辺を調べます。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

7.13 Eval 関数、Ruby 関数, RubyDef 関数

ODR は、文書ファイルの中に、Ruby のコードを埋め込んで、o2h で html ファイルに整形するときにそれを実行して、整形した結果の html ファイルに反映する仕組みを持っています。

● Eval 関数 Referred at: [H1]

o2h が、文書ファイルの中に、(Eval "...") のように書かれた文字列を読み取ると、... のところに書いてある文字列を ruby のコードとして評価して、その結果得られる文字列を生成物である html ファイルに書き込みます(※)。

※ o2h.rb は ruby で書かれています。(Eval "...") が書かれている箇所で、"..." が評価されます。

コードは簡単で、"..." の部分が url という変数に入っているとして、val = eval url として、(Eval "...") を val で置き換えるようにしています。

例えば、o2h.rb の中で使われている変数 $default_panel_backcolorの値を得たい場合、

   $default_panel_backcolor の値は、"(Eval "$default_panel_backcolor")" です

のように書いて、

  $default_panel_backcolor の値は、"floralwhite" です

のように整形されます。

xyzzy で編集しているときに、(Eval "...") を評価するような関数 Eval は定義していません。

Eval を使用すると、o2h.rb の中で定義されているつぎのような変数を参照できます。

変数 内容
$today 書き換えプログラム o2h.rb を実行した日付
$sourcefile 書き換え対象のファイルのフルパス
$basename 書き換え対象のファイルのファイル名部分
$basepart 書き換え対象のファイル名の基幹部分
$extpart 書き換え対象のファイル名の拡張子
$directory 書き換え対象のファイル名のディレクトリ
$wdays 曜日を格納した配列。 $wdays = ["日", "月", "火", "水", "木", "金", "土"]
$wday 曜日。例えば、月曜日なら月。

例を示します。文書中に、

今日の日付は、(Eval "$today") です。
.. このファイルのフルパスは、(Eval "$sourcefile") です。
.. ファイルのディレクトリは、(Eval "$directory") です。
.. ディレクトリを除いたファイル名は、(Eval "$basename") です。
.. ファイルの基幹部分は、(Eval "$basepart") です。
.. ファイルの拡張子は、(Eval "$extpart") です。
.. 今日は、(Eval "$wday")曜日です。

と書いて、次のように整形されます。

今日の日付は、2019-05-12 です。
このファイルのフルパスは、C:/home/shiiba/howm/winnote/win-odr.odr です。
ファイルのディレクトリは、C:/home/shiiba/howm/winnote です。
ディレクトリを除いたファイル名は、win-odr.odr です。
ファイルの基幹部分は、win-odr です。
ファイルの拡張子は、.odr です。
今日は、日曜日です。

● Ruby 関数 Referred at: [H1]

複数行に渡るコードを書くときは

  (Ruby ... /Ruby)

の形で、Ruby コードを書いてください。... の部分は複数行に渡っても構いません。

... の部分のコードは繋ぎ合わされて、val = eval ... の形に評価されて、val が表示されます。val は文字列であるとします。

例を示します。文書中に、

明日は、(Ruby i = Time.now.wday; i = (i+1).modulo(7);
$wdays[i]/Ruby)曜日です。
.. 1 から 10 までの合計は、(Ruby sum = 0;
for i in 1..10
  sum = sum + i
end
sum.to_s /Ruby) です。

と書いて次のように整形されます。

明日は、月曜日です。
1 から 10 までの合計は、55 です。

● RubyDef 関数 Referred at: [H1][H2][H3][H4]

複数行に渡るコードを書くときは

  (RubyDef ... /RubyDef)

の形で、Ruby コードを書いてください。... の部分は複数行に渡っても構いません。... の部分は評価されますが、値は返しません。

文書ファイルの中に書かれた (RubyDef ... /RubyDef) のコードは、o2h で整形するときに、読み込まれて評価はされますが、評価した結果、値を返すとしても、それは整形した結果の文書の中には表示されません。... の部分に、Ruby のメソッドを定義するコードを書くのに適しています。

ruby のメソッドの定義式を ... の部分に書くときに使用することを想定しています。例を示します。文書中に

(RubyDef 
def RedBox(str)
  return ("<span style=¥"border:1px solid red¥">" + str + "</span>")
end

def BlueBox(str)
  return ("<span style=¥"border:1px solid #4169e1¥">" + str + "</span>")
end
/RubyDef)

のように書いたとします(※)。これは、RedBox(文字列)、BlueBox(文字列) というメソッドを定義しています。文書中に書かれたこの部分を o2h が読み込んだとき、そのメソッドの定義を読み込むだけで、この部分に対応する出力文字列はありませんが、この部分を読み込んだ以降は、メソッド RedBox(文字列)、BlueBox(文字列)を使用できるようになります。

※ RedBox と BlueBox を定義するこのコードは、この文書ファイルの最初の方、概要 H1 の前に記述しています。o2h で整形したファイルではなくて、ソースのテキストファイル win-odr.odr で、概要 H2 の前を参照してください。

実際、(Ruby RedBox("赤い四角で囲む例")/Ruby) や、 (Ruby BlueBox("青い四角で囲む例")/Ruby) のように書くと、 赤い四角で囲む例青い四角で囲む例 のように整形されます。

RubyDef 関数のコードの中で、そこより前に一度定義したメソッドを再定義すると、"method redefined; discarding old m" という Warning が発生するようですが、その Warning が表示されずに、実際には、問題がないかのように動作することがあり得ます。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

7.14 Html 関数

Referred at: [H1][H2][H3]

html コードを挿入するには、Html 関数を使います。

ODR 文書では、パラグラフ環境など普通に詰め込み処理される環境では、html 文書で使用されるタグ記号は使用できません。逆に、& や > などは、特別な記述法を使わずにそのまま表示させることができます。

例えば、html 文書では、CO<sub>2</sub> と書けば、CO2 と表示されるところですが、ODR 文書の、パラグラフ環境など普通に詰め込み処理される環境では、そうはなりません。

ODR 文書で、パラグラフ環境など普通に詰め込み処理される環境で、 html 文書で使用されるタグ記号や特殊記号表示などを使用するには、 (Html ... /Html) に囲んで記述します。

ODR 文書で、詰め込み処理される文中に、(Html CO<sub>2</sub> /Html) のようなコードがあると、o2h は、書きかえのときに、 (Html ... /Html) で囲まれた内部を html コードとして解釈して、CO2 に書きかえます。

(Html と /Html) とは必ずしも同じ行になくても構いません。o2h は、 (Html を読み込んだときに、同じ行内に /Html) が現れなかったときには、/Html) が含まれている行が現れるまで、行を追加して読み取って、(Html と /Html) で囲まれた範囲の文字列を html 文書の文字列として処理します。

例を示します。

: /beige/ 文字列の一部分を、
(Html <span style="color: crimson;">赤い色で書いて
表示したい場合は、
このように色づけ</span>する /Html)
ことができます。
炭酸ガスは、(Html CO<sub>2</sub> /Html) のように書きます。

と書いて、つぎのように整形されます。

文字列の一部分を、 赤い色で書いて表示したい場合は、このように色づけすることができます。炭酸ガスは、CO2 のように書きます。

o2h は、ソースの文字列の中にあるタグ文字は、その代替表現に置き換えますが、Emacs 関数としてあげている関数の内側のタグ文字の置き換えはしません。

(Html ... /Html) は、正確には、emacs 関数ではありません。 (Html ... /Html) の ... のところには、引用符号やタグ文字を自由に書けます。emacs 関数ではないので、/Html) の後にカーソルを置いて評価するというようなことはできません。

もう少し短いコードで、Html コードを挿入できるように、(h ... /h) でも (Html ... /Html) と書いたのと同様に動作するようにしました。(h CO<sub>2</sub> /h) で CO2 と表示されます。

: /beige/ (h <span style="color: crimson;">
このように書くと、段落全体の背景色とフォントの色を指定する
ことができます。背景色の指定を省略して、フォントの色だけを指定することもできます。
</span>/h)
. :

のように書いて、つぎのように整形されます。

このように書くと、段落全体の背景色とフォントの色を指定することができます。背景色の指定を省略して、フォントの色だけを指定することもできます。

(h <span style="color: green;">
フォントの色だけを指定するのであれば、
このように書くのが簡単です。途中で
<span style="background-color: yellow; color: crimson;">背景色</span>
を指定することもできます。
</span>/h)

のように書いて、つぎのように整形されます。

フォントの色だけを指定するのであれば、このように書くのが簡単です。途中で背景色を指定することもできます。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

7.15 h 関数

Referred at: [H1]

Html 関数 H2 のところで述べたように、短いコードで、Html コードを挿入できるように、(h ... /h) でも (Html ... /Html) と書いたのと同様に動作するようにしました。(h CO<sub>2</sub> /h) で CO2 と表示されます。

ここで解説した h 関数と H 関数 H3 とは異なります。機能も呼び出し形式も異なるので注意してください。(H ... /H) とは書けません。

h 関数を使うとかなり自由に html の機能を使用できます。例えば、部分的に文字のサイズを変更するには、

(h <font size="6">
ここは大きな文字で
書かれているはず。</font>/h)ここは普通サイズの文字列

のように書いて、フォントサイズを部分的に変更できます。

ここは大きな文字で書かれているはず。ここは普通サイズの文字列。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

7.16 Color 関数

Referred at: [H1]

Color 関数は、

  (Color "red" "'赤い'文字列")

または

  (Color "red" '"赤い"文字列')

のような形で使います。引数は2つで、いずれも文字列。2番目の文字列が、1番目の文字列で指定した色で表示されます。 2番目の文字列を "..." のように " で括る場合は、文字列の中に ' を含めることができます。2番目の文字列を '...' のように ' で括る場合は、文字列の中に " を含めることができます。 (Color "red" "'赤い'文字列") は、

  (h <span style="color:red">'赤い'文字列</span>/h) 

と書いたのと同じで、'赤い'文字列と整形されます。

複雑な場合は、h 関数 H1を使用して記述してください。h 関数を使用した方が、多様な色指定が可能です。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

7.17 Vb 関数

タグ記号や Emacs 関数の呼び出しをクォートするには、Vb 関数を使います。

通常、ODR 文書では、<> は特別な記述方法を使わずにそのまま表示することができるようになっています。

しかし、@begin{xTable} ... @end{xTable} で囲まれた表環境では、何もしなければ、html の記号が使えるようになっています。その方が表の作成に便利だからです。そのため、xTable 環境では、 <> を書くために、&lt; や &gt; と書く必要があります。

それはそれで不便なので、xTable 環境の中でも、(Vb ... /Vb) で囲めば、<>、&、&amp; を書くことができるようにしています。<>、&、&amp; のように。大体、見える通りに書けます。(Vb と /Vb) とは必ずしも同じ行になくても構いません。o2h は、(Vb を読み込んだときに、同じ行内に /Vb) が現れなかったときには、/Vb) が含まれている行が現れるまで、行を追加して読み取って、(Vb と /Vb) で囲まれた範囲の文字列の中では、<>, & の特殊記号や Emacs 関数呼び出しをそのまま表示します。

また、(Vb ... /Vb) で囲んだ範囲では、¥ 記号を &yen; に置き換えます。&yen; は、 ¥ と表示されます。この置き換えは、普通はしていません。

数式を \(y = ax^2 + bx + c\) のように書くことを説明するときに、元々どう書いたかを示すときに、(Vb ... /Vb) で囲んで、(Vb (h ¥(y = ax^2 + bx + c¥)/h)/Vb) のように書くと、 (h ¥(y = ax^2 + bx + c¥)/h) と表示されます。
この (Vb ... /Vb) を Vb 関数と呼ぶことにします。

(Vb ... /Vb) は正確には、emacs 関数ではありません。(Vb ... /Vb) の ... のところには、引用符号やタグ文字を自由に書けます。 emacs 関数ではないので、/Vb) の後にカーソルを置いて評価するというようなことはできません。

※ &gt; や &lt;、&amp; のように、html の特別な記法を採用して、それが意図する結果を得るには、(h ... /h) で囲みます。(h &gt; や &lt;、&amp; /h) と書いて、> や <、& のように整形されます。

(Vb ... /Vb) の ... のところでは、Emacs 関数の呼び出しもクォートされます。例えば、 H 関数を (Vb (H "どこにも書いていない見出し") /Vb) のように書いて、 (H "どこにも書いていない見出し") と書きだされます。

実は、(Vb ... /Vb) を使う方法は、 ピリオド3つを行頭に置く H2 方法と同じ効果を持っています。しかし、 ピリオド3つを行頭に置く H3 方法は、詰め込み処理をするところでは有効ですが、そうではないところでは有効でないことがあります。(Vb ... /Vb) による方法の方がより広く使用できます。

別の方法として、

 (h <code>¥(y = ax^2 + bx + c¥)</code> /h)

のように書いて、\(y = ax^2 + bx + c\) と表示されるという方法があります。これは、Code 関数 H1を使えば、 (Code ¥(y = ax^2 + bx + c¥)/Code) とも書けます。これで \(y = ax^2 + bx + c\) と表示されます。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

7.18 Code 関数

Referred at: [H1]

[2017-04-30]

(h <code>/^[==]+$/</code> /h)

と書く代わりに、

(Code /^[==]+$//Code)

と書くことができるようにしました。これで、 /^[==]+$/ のように表示されます。 <pre> ... </pre> と書くと改行されて、... の部分が固定幅フォントで表示されますが、(Code ... /Code) のようにすると、文中に ... の部分が固定幅フォントで表示されます。

※ 全角の と半角の = が表示されたときにはっきり区別できないかも知れませんが、[==] の中の前の=は全角の=、後の = は半角の = です。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

7.19 Prev 関数、Next 関数

Referred at: [H1]

(Prev "△")(Next "▼")

と書くと、次のように整形されます。

Prev の方は、現在の文章ブロック H1の先頭に移動するリンクが挿入されます。

Next の方は、次の文章ブロック H2の先頭に移動するリンクが挿入されます。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

7.20 ピリオド3つを行頭に置く

Referred at: [H1][H2][H3]

「ピリオド3つを行頭に置く」記法に関する説明項は特殊記法のグループで取り上げてもいいのですが、Emacs 関数の Vb 関数と同じような役割をするので、ここで紹介します。

原則として、詰め込み処理する文を表示するとき、書き換えプログラム o2h.rb は、Emacs 関数 H8 の処理をする以外に、つぎの 2つの置き換え処理を実行します。

置き換え処理1
タグ文字をそのまま表示します。

<> など、html ファイルの構文を記述するためのタグ文字記号は、代替コード(&lt; や &gt;) に置き換えます。そのため、html ファイルに変換した結果では、タグ文字はそのまま表示されます。

置き換え処理2
(*強調文字*)

のように、(* と *)で囲むと、<b>強調文字</b> に置き換えられ、強調文字のように表示されます。(* と *) は、同一の行の中に書く必要があります。

((大文字))

のように、(( と )) で囲むと、<Font size=+2>大文字</Font> に置き換えられ、 大文字のように表示されます。(( と )) は、同一の行の中に書く必要があります。。

強調したい文字列や大文字にしたい文字列が長くて、複数行に渡る場合は、「行を継続する」の項目で述べた行継続の仕組みを利用するようにします。ここの段落はつぎのように書きました。

(*強調したい文字列や大文字にしたい文字列が長くて、_ 
複数行に渡る場合は、「行を継続する」の項目で述べた_ 
行継続の仕組みを利用するようにします。*)ここの段落はつぎ
のように書きました。

 「行を継続する」方法については、
 (H "行を継続する")の項目を参照してく
 ださい。

置き換え処理1 はするけれども、(*置き換え処理2) はしたくないという場合は、文頭に、... (ピリオドを3つ) と書いて、その後に半角空白を1 個おき、その後に、(*強調文字*) や ((大きい文字)) のように書きます。また、Emacs 関数の処理もされないので、(H "どこにも無い見出し") のように書くことができます。また、詰め込み処理される環境では、半角空白が複数個あっても 1個しかなかったように表示されますが、"ここには複数の半角空白    " があるのが整形後も分かります。ここの段落はつぎのように書きました。

(*置き換え処理1*) はするけれども、(*置き換え処理2) はしたくないと
いう場合は、
文頭に、... (ピリオドを3つ) と書いて、その後に半角空白を1 個
おき、その後に、
... (*強調文字*) や ((大きい文字)) のように
書きます。また、Emacs 関数の処理もされないので、
... (H "どこにも無い見出し") 
のように書くことができます。
また、詰め込み処理される環境では、半角空白が複数個あっても
1個しかなかったように表示されますが、
... "ここには複数の半角空白    " が
あるのが整形後も分かります。
ここの段落はつぎのように書きました。

置き換え処理3
文頭に、... (ピリオドを3つ) と書いて、その後に半角空白を1 個置いた場合、その後に続く文字列の中に ¥ 記号があると &yen; に置き換えます。&yen; は、¥ と表示されます。

これは Vb 関数と同じルールです。

数式を \(y = ax^2 + bx + c\) のように書くことを説明するときに、元々どう書いたかを示すときに、
... (h ¥(y = ax^2 + bx + c¥) /h)
のように書くと、(h ¥(y = ax^2 + bx + c¥)/h)と表示されます。

文頭に、... (ピリオドを3つ) と書いて、その後に半角空白を 1 個おき、その後に、文字列を置くという方法の代替の方法として、(Vb ... /Vb) と書く方法があります。

(Vb (*強調文字*) や ((大きい文字)) /Vb) のように書いて、(*強調文字*) や ((大きい文字))のように整形されます。

文頭に、... (ピリオドを3つ) と書く方の方法は、詰め込み処理される環境でないとうまく使えないことがありますが、 (Vb ... /Vb) で囲む方法は、単独の行でも使用できます。

文頭に、... (ピリオドを3つ) と書く方の方法では、半角空白の個数が保存されるように処理されますが、(Vb ... /Vb) で囲む方法ではそのような処理はされません。

置き換え処理1をしたくないような文字列は、(h と /h) で囲んで書きます。Html 関数 H3 を参照してください。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

8 メールやメモの引用

メールやメモを引用したいことがあります。その例を示します。

cTable 環境で1列しかないという設定を利用しています。

.~ と .. を書いた行で囲みます。.~ と .. で囲んだ範囲は、左詰めにされます。Emacs 関数による置き換えを利用することができます。Emacs 関数による置き換えを抑止したければ、Emacs 関数呼び出しの左括弧の前に = を書きます。

部分的に書き換えないとうまく整形できないことがあります。

html のコードをそのまま書くことができます。横線は、<hr>_ と書いて表現します。逆に html コードと解釈して欲しくないコードが現れる行では、行頭にピリオドを3個置き、そのあとに半角空白を1個以上置いて書き始めてください。


本メールはりんご株式会社のサービスをご利用のお客様へお送りし
ております。


                       2030年3月15日

お客様各位

                       りんご株式会社


平素よりりんご株式会社に格別のご愛顧を賜り、誠にありがとうご
ざいます。

1. 請求書印刷・CSVダウンロード機能


会員メニューからご利用料金の「請求書印刷」と請求明細データの
ダウンロード機能のご提供を開始いたしました。

▼請求書の印刷・CSVダウンロード方法
https://help.apple.ad.jp/ha/ja/articles/92890000

2. セキュリティ情報


◆ 会員情報は常に最新の情報をご登録ください

重要なお知らせをお届けできないケースが増えています。ご担当者
様の異動/退職や転居、移転に伴い各種ご登録情報を変更いただけ
ない場合、請求情報をはじめとする契約の更新に関する重要なお知
らせやセキュリティに関するご案内がお届けできなくなります。

▼登録情報の確認・変更
https://help.apple.ad.jp/ha/ja/articles/92890000

途中に、<hr> のような html コードを書いて、それを html コー
ドと解釈して欲しくないときは、行頭に ... を書いて、その後に
半角空白を1個以上置いてください。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

9 文書内を飛び回る

xyzzy を使用していると、xyzzy の機能を使用して、文書を編集中に、文書の中に書かれている emacs 関数を評価したり、xyzzy の関数を使用して、文書の中をジャンプすることができます。

また、html ファイルに変換された場合、規約に従って生成されたリンクとアンカーを使用して文書の中をジャンプすることができます。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

9.1 目次と見出しを飛び回る

$OPT_NOCONTENTS = true

とすると、目次は、最終的な成果物の html ファイルに含められません。o2h の中で作成はされるのですが、結果の html ファイルの中に含められません。$OPT_NOCONTENTS = false とすると、最終的な成果物の html ファイルに目次が含められます。

表示された目次の部分をクリックすると、対応するアウトライン見出しの部分にジャンプします。

アウトライン見出しの部分に

[CTop][Contents][TopHeadingList][Prev][□][Next][SameLevelPrevious][Child][SameLevelNext][Parent][Top][End] 

のようなボタンを並べた行が挿入されます。それぞれのボタンは次のような機能を持っています。

[CTop] 目次を表示している部分の先頭にジャンプします。
[Contents] 現在のアウトライン見出しに対応する目次にジャンプします。
[TopHeadingList] 星1つのアウトライン見出しのリストにジャンプします。
[Prev] 前のアウトライン見出しにジャンプします。
[□] ボタンを並べた行が窓の先頭行になるようにスクロールします。
[Next] 次のアウトライン見出しにジャンプします。
[SameLevelPrevious] 星の数が同じで、次のアウトライン見出しにジャンプします。
[Child] その見出しの直下で最初のアウトライン見出しにジャンプします。
[SameLevelNext] 星の数が同じで、後のアウトライン見出しにジャンプします。
[Parent] 星の数が一つ少ない親の見出しにジャンプします。
[Top] 文書全体の先頭にジャンプします。
[End] 文書全体の最後にジャンプします。
□この表は、twTable 環境を用いて書いています。

対応するジャンプ先が無い場合は、ボタンの文字が灰色で表示されます。例えば、その文章ブロックには、下位の見出しの文章ブロックが無い場合には、[Child] は灰色で表示されます。

[CTop] をクリックして表示される目次の先頭のところに、[表示]、 [閉じ]、[説明]、[説明閉じ] のボタンが配置されます。これらのボタンの機能は以下のようです。

[表示] 目次を表示します。
[閉じ] 展開している目次を閉じます。
[説明] 個々のヘッドライン行に表示される [Contents] ボタンの操作に関する説明を表示します。
[説明閉じ] 個々のヘッドライン行に表示される [Contents] ボタンの操作に関する説明の表示を閉じます。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

9.2 見出しへのリンクを作成する

Referred at: [H1][H2]

● 見出し Referred at: [H1][H2][H3][H4][H5][H6][H7]

ODR H1 では、行頭に * が幾つかあって、その後に文字列を書いてある行を アウトライン見出し行 H2 と呼び、アウトライン見出し行に書かれた文字列を アウトライン見出し H3 と呼びます。

ODR には、「見出し」と呼ぶものは、アウトライン見出しだけではなく、他に、「Head 関数」によって定められる「Head 関数による拡張見出し」、マーク付き標題環境の中の一部で決められる「マーク付き標題による拡張見出し」、「特殊環境のキャプション $caption による拡張見出し」、「Anchor 関数による拡張見出し」があります。

つまり、ODR では、

  1. アウトライン見出し H4
  2. Head 関数による拡張見出し H1Hd 関数による拡張見出し H1
  3. マーク付き標題による拡張見出し H1
  4. 特殊環境のキャプション $caption による拡張見出し H1
  5. Anchor 関数による拡張見出し H1

の5つの種類の見出しがあります("見出しの種類" (Referred at: [H1][H2] ) )。

アウトライン見出し H5 は、行頭から何個かの * を置き、その後に、半角空白を1個置いて、その後に見出し文字列を書いて作成します。

Head 関数による拡張見出し H2 は、Head 関数 H3 を使用して作成します。文の途中に書く拡張見出し H1 のように文の途中に Head 関数を使った拡張見出しを置くことができます。 Hd 関数による拡張見出し H2 も同様ですが、表示の仕方が少し違います。

マーク付き標題による拡張見出し H2 は、「■標題」、「● 標題」、「※ 標題」の形のマーク付き標題を使うことによって作成されます。

特殊環境のキャプション $caption による拡張見出し H2 は、特殊環境の直前に置く $caption を見出しとするものです。特殊環境の直前に置く $caption は自動的に「見出し」として登録されます。

Anchor 関数による拡張見出し H2は、その見出しが参照されなかったときは、アンカー位置になにも表示されない仕様の見出しです。数式の参照に適しています。数式を書く H4 の部分を参照してください。

◆ 見出しにタグ文字を書く

o2h の古いバージョンでは、見出しに html のタグ文字を書くと整形結果が乱れることがありました。o2h 10.18以降では、見出し文字列に html のタグ文字を含めることができます。

● 重複した見出しを使わないようにする

書き換えプログラム o2h.rb は、見出しの種類 H1 に挙げた種類の見出しを一体として管理し、同じ文字列がこれらの見出しの中に複数回出てこないのが正常であると考えて処理します。

o2h は、"見出し" の全体の中に重複したものは出てこないことを想定してはいますが、想定に反して、「見出し」の中に重複しているものがあると、H 関数は、重複した見出しの中で、文書の中で最初に出てきた「見出し」位置にジャンプするように処理します。

このように「見出し」の中に重複しているものがあるときに、どの「見出し」にジャンプするかははっきりしていますが、ジャンプ先が文書中に複数あるのは好ましくないので、見出しの中に重複しているものがあったとき、o2h.rb は、変換した html 文書の最後に、見出しに重複があったことを伝えるメッセージを表示します。

見出しが重複して、html 文書の最後に、見出しの重複があったことを伝えるメッセージがあったときは、見出しを変更するようにしてください。「ちょっと寄り道*1」、「ちょっと寄り道*2」、「ちょっと寄り道*3」のように、後ろに * をつけて重複を回避するというのも一つの方策です。

※ cbar の xyzzy の環境では、C-5 6 として、「ちょっと寄り道¥*」という検索語の正規表現を入力すれば、「ちょっと寄り道*」で始まる見出し行をリストするリストボックスを表示できます。

※ 文書の先頭に、

;;; @(%) $OPT_ACCEPTDUPLICATEDHEADER = true

のように書いておくと、html 文書に見出しの重複があったことを伝えるメッセージを表示しません。見出しに重複があることを許す場合は、上のように書いたオプション指定を書くようにしてください。

見出しが重複した場合の処理についてまとめたものを示します。

見出しの種類 重複した時の処理
アウトライン見出し アンカーは設置されませんが、目次としては処理されます。
Head 関数による拡張見出し (Head "heading") のように書きだされます。アンカーは設置されません。
Hd 関数による拡張見出し (Hd "heading") のように書きだされます。アンカーは設置されません。
◎、●、■によるマーク付き標題 マークはそのまま整形されますが、アンカーは設置されません。
Caption による拡張見出し キャプションはそのまま表示されますが、アンカーは設置されません。

見出しが重複したものは、行頭から [allheadinglist] を書いて整形した結果表示される 見出しの一覧 H1 の中で表示されます。

◆ 見出しへのリンクを作成する

文書内の「見出し」にジャンプするリンクを作成するには、 H 関数 H4 を使用します。見出し「注釈」へジャンプするリンクは、(H "注釈") と書くことによって作成されます。つぎの行に、見出し「注釈」へジャンプするリンクを作成します。

注釈 H1

このように、「見出し」にジャンプするリンクを作成するのは容易です。

見出しの種類 H2 に挙げた種類の見出しの中のどの種類の見出しに対してリンクを作成するかを指定することはできません。

xyzzy で編集中では、(H "注釈") の最後の右括弧の後ろにカーソルを置いて、M-x my-eval-last-sexp とすると、"注釈" がある見出し行にジャンプします。

  1. アウトライン見出しへのリンクの例。 引用環境 (Indentation 環境) H1
  2. マーク付き標題へのリンクの例。 行頭マークが保存されるタイプの標題 H1
  3. コードへのリンクの例。OR検索 H2
  4. 数式へのリンクの例。式(1) H4
  5. 読み込んだ画像のキャプションへのリンクの例。khlogo.png H2

● 見出しへのリンク元にジャンプする

見出しへのリンクは、そのリンクをクリックすると見出しにジャンプするというものですが、見出しへのリンクが置かれた場所に逆に戻ることができるように、o2h.rb は、見出しへのリンク元へのリンクを作成して、見出しのところに表示します。見出しのところに、

  Referred at: [1][2]

のように表示されているものが、この「見出しへのリンク元へのリンク」です。この例では、この見出しへのリンクが2箇所あります。 [1], [2] は、その2箇所へのリンクです。番号は、文書の中の出現順です。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

9.3 注釈と注釈の引用リンクを作成する

Referred at: [H1][H2]

ODR では、Note 関数 H1N 関数 H2 を使用して注釈と注釈の引用リンクを作成します。

Note 関数 H2 を使用して、注釈を作成し、N 関数 H3 を使用して注釈を参照します。

● 個別に注釈を置く例

注釈を一箇所に纏めておくことも、複数箇所に分散して置くこともできます。

この文書でも、個別に注釈を置いているところがあります。 Note 関数 H3 の節に個別に注釈項目を置いていて、そこに説明も書いています。

まず、行頭から (Note "Note 関数による注釈項目") のように書いてすぐ改行すると、そこに、注釈文の項目名の "Note 関数による注釈項目" が [...] に挟んで書かれます。 Note 関数による注釈項目 N1 (※) にその例が書かれています。

※ ここは、(N "Note 関数による注釈項目") と書きました。(N "...") と書いた場合、注釈項目が []で囲んで表示されます。
(H "...") と書いた場合は、見出しが 「」 で囲んで表示されます。これにより、(N "...") で参照したのか、(H "...") で参照したのかが分かります。

文の途中に、(Note "文の途中に書く Note 関数による注釈項目") のように書くと、文の途中に題目が [...] に挟んで書かれます。 文の途中に書く Note 関数による注釈項目 N1 を参照してください

● 注釈文を一箇所に纏めて書く例

注釈文を一箇所に置く必要はありませんが、纏めて注釈を書く例が、 注釈 H2 の章にあります。

* 注釈

(Note "Emacs から Xyzzy へ")
cbar は、最近は、xyzzy を主として使用していて、emacs ではなく
て、xyzzy で ODR 文書を編集しています。emacs の outline mode 
は、xyzzy には移植されていませんが、xyzzy には、outline-tree 
というすばらしいモードがあります。

(Note "DotFlushleft 環境")
cbar が作成した o2h.rb の中では、
この左詰め環境を DotFlushleft 環境と呼んでいます。

注釈を参照する箇所では、つぎのように書きます。この文章は、 概要 H3 の章に出てきます。

o2h は、その作成者 cbar が、文書を emacs のアウトラインモードで
作成していて
((N "Emacs から Xyzzy へ"))、
アウトラインモードで作成
した文書を html 文書に変換できたら便利だと考えて、作成したプログ
ラムです。

この (N "Emacs から Xyzzy へ") は、 o2h によって、 注釈 H3 のところに置かれた、 (Note "Emacs から Xyzzy へ") へジャンプするリンクになります。つぎの行に、(N "Emacs から Xyzzy へ") と書きます。

Emacs から Xyzzy へ N2

● 注釈文へのリンク元にジャンプする

注釈文へのリンクは、そのリンクをクリックすると注釈文にジャンプするというものですが、注釈文へのリンクが置かれた場所に逆に戻ることができるように、o2h.rb は、注釈文へのリンク元へのリンクを作成して、注釈文のところに表示します。注釈文のところに

  引用箇所: [1][2]

のように表示されているものが、この「注釈文へのリンク元へのリンク」です。そこをクリックして、注釈文を参照している箇所にジャンプすることができます。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

9.4 Prev, Next, Label, Ref 関数を使用してジャンプボタンを配置する

項目の見出し部分を画面トップに表示したり、次の項目の見出し部分を画面トップに表示するようにするボタンは、Prev 関数、Next 関数 H1 を用いて配置することができます。

つぎに配置されているボタンは、Prev 関数と Next 関数を用いて作成されています。

▲本項目の見出し部分を画面トップに表示
▼次の項目の見出し部分を画面トップに表示

上の2行は、

. (Prev "▲本項目の見出し部分を画面トップに表示")
. (Next "▼次の項目の見出し部分を画面トップに表示")

と書いて実現されています。

文書の任意の位置にラベルを置き、そこにジャンプするようにすることもできます。そのために、Label 関数 H1Ref 関数 H1 を利用します。

cbar は、xyzzy で、M-x jumpbutton とすると、編集中のバッファにつぎのようなコードが挿入されるようにしています。

(Label "421.355" "")
(Ref "421.355" "□")(Ref "647.255" "▽")
;;;(Ref "421.355" "△")
;;;(Ref "421.355" "▽")

数字の部分 421.355 の部分は、ランダムに生成されたもので、M-x jumpbutton を実行するごとに異なる数値になります。上のコードを地の文に書き、(Prev "▲") を追加して、つぎのボタンが出来ています。

これで、□をクリックすると、その行が、窓の先頭に来るようにカーソルがジャンプします。Label の第一引数に指定する文字列のところには、乱数を使用して生成された文字列が置かれるので、固有の文字列が置かれていると考えて、殆ど問題ありません。

コメンドアウトされている ;;;(Ref "421.355" "△") の (Ref "421.355" "△") の部分を置くと、その位置にジャンプするボタンを設定され、ボタン位置には、△ が表示されます。

したがって、(Ref "421.355" "△") と書いて実現している下の△をクリックすると、(Label "421.355" "") が置かれて□が表示されている位置が、画面トップに来るように画面がスクロールします。

(Label "647.255" "")
(Ref "647.255" "□")(Ref "421.355" "△")
;;;(Ref "647.255" "△")
;;;(Ref "647.255" "▽")

▲本項目の見出し部分を画面トップに表示
▼次の項目の見出し部分を画面トップに表示

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

10 目次部分の表示に関する指定

オプション nocontents を指定すると、目次部分を最終成果物の html ファイルに含めません。

値つきオプション contentlevel を指定すると、その値の深さまでの目次を生成します。

これらのオプションは、整形対象のファイルに書いて置くこともできます。

文書の冒頭に、行頭から ;;; @(%) $OPT_NOCONTENTS = true と書くと、目次を作成しません。

また、文書の冒頭に、行頭から ;;; @(%) $OPT_CONTENTLEVEL = 2 と書くと目次を作成する深さを 2 に指定したことになります。この場合、目次のレベルは、2.1 ... のように深さ2 までが表示されます。

デフォールトでは、 $OPT_CONTENTLEVEL は、3 に設定されています。

html 文書への変換プログラム o2h.rb を起動するときに与えるオプションよりも、整形対象のファイルに ;;; @(%) $OPT_CONTENTLEVEL = 2 のように書かれている指定の方が優先されます。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

11 プログラムのソースファイルに ODR 文書を埋め込む

Referred at: [H1][H2][H3]

プログラムのソースファイルに ODR 文書を埋め込んで、それを html ファイルに変換できます。

ブロックコメントを書くことができるプログラム言語では、それを利用して、プログラムのソースファイルに ODR 文書を埋め込むことができます。

ブロックコメントを書くことができないプログラム言語では、行単位のコメントを利用する方法を個別に考える必要があります。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

11.1 ブロックコメントを利用してソースファイルに ODR 文書を埋め込む

つぎのようなプログラムファイルでは、ブロックコメントの機能があります。

に対応しています。

言語ごとに、ブロックコメントを挿入するための文字列は、それぞれ、つぎのようです。

ブロックコメントの開始、終了記号
プログラム言語 ブロックコメントの開始終了記号
Common Lisp (xyzzy lisp) #| ... |#
Ruby =begin ... =end
C# /* ... */
C++ /* ... */
Powershell <# ... #>
Perl =pod ... =cut
Uwsc TextBlock aaa ... EndTextBlock
AutoHotkey /* ... */。行頭に書かなければならない。


これらのブロックコメントについては、それぞれの言語での使われ方をよく理解してください。

例えば、CommonLisp では、#| と |# の間に書いた文字列が、#| と |# を含めてコメントと見なされます。引用符号の中に書かれていても、これらの文字列は、ブロックコメントの開始、終了の目印として有効なので注意が必要です。CommonLisp のコードに ODR 文書を埋め込むときには、埋め込まれた ODR 文書の中では、#| と |# を使わないようにしてください。

C# では、/* と */ の間に書いた文字列が /* と */ を含めてコメントと見なされます。C# のコードに ODR 文書を埋め込むときには、埋め込まれた ODR 文書の中では、/* と */ を使わないようにしてください。ODR 文書の中で、/* ... */ のように書く必要がある場合は、/* ... */ のように全角の*を使うようにしてください。

プログラムのソースファイルに ODR 文書を埋め込むときは、ブロックコメントの中に書きます。その場合も、ODR 文書を書き込むところに、== startdoc と書いた行を入れます。

プログラムのソースファイルに ODR 文書を埋め込むときは、これらのブロックコメントのコードは、行頭から書くようにします。

ブロックコメントの機能がありさえすれば良く、o2h.rb 側に、そのブロックコメントがどのようなものであるかを登録したりする必要はありません。

拡張子が、.txt と .odr のときは、便宜上、ブロックコメントは、 /* ... */ であるとして扱います。

Ruby のソースコードを書くファイルでは、__END__ と書いた行以降のすべてがコメントになります。これを利用するのもいい。

Uwsc では、ブロックコメントそのものではありませんが、TextBlock を使って複数行のコメントアウトを実現できます。

   TextBlock aaa

   この部分は複数行の
   コメントになる

   EndTextBlock

これは、aaa という変数に複数行を代入しているものですが、変数 aaa を使わなければ、uwsc からは意味はないので、複数行コメントと考えても差し支えありません。

同じ uwsc のスクリプトコードの中で、TextBlock を使って aaa という変数の定義を複数箇所に書くことはできません。変数名として、aaa を使ったら、別のブロックコメントのところでは、aaa1 とか別の名前の変数を定義するようにする必要があります。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

11.1.1 lisp プログラムに ODR 文書を埋め込んだ例

Referred at: [H1][H2][H3]

リスププログラムのファイルに ODR 文書を埋め込んだ例を示します。

foo.l
001: #|
002: ;;; ブロックコメント1
003: == startdoc
004: ;;; @(#) foo.l
005: ;;; @(%) $OPT_NOCONTENTS = true
006: ;;; @(%) $OPT_PROGLISTIGNORE = false
007: |
008: ----------------------------------------------------------
009: * 概要
010: 
011: ここには普通のコメントを書くことができます。
012: 
013: ----------------------------------------------------------
014: * fooa
015: 
016: fooa はサンプルのプログラムです。
017: 
018: @begin{code}{proglist} -----------------------------------
019: |#
020: 
021: (defun fooa (num)
022:   (interactive 
023:      "nDInsert a number: "
024:      :default 10)
025:   (message-box (format nil "~D" num))
026:     )
027: 
028: #|
029: @end{code} -----------------------------------------------
030: ;;; ブロックコメント2
031: 
032: @begin{ignore} -------------------------------------------
033: |#
034: 
035: (defun foob (num)
036:   (interactive 
037:      "nDInsert a number: "
038:      :default 10)
039:   (message-box (format nil "~D" num))
040:     )
041: 
042: ; ... ODR 文書としては、ここは無視されます。
043: 
044: #|
045: @end{ignore} ---------------------------------------------
046: ;;; ブロックコメント3
047: 
048: == enddoc
049: |#

(注) 行番号は参照のために付加したものでソースファイルに含まれるものではありません。

「ODR 文書はブロックコメントのところに書かれている」ことに注意してください。

この例は、

  1. 001行から019行 ブロックコメント1
  2. 020行から027行 (defun fooa ...) のコード
  3. 028行から033行 ブロックコメント2
  4. 034行から043行 (defun foob ...) のコード
  5. 044行から049行 ブロックコメント3

のような構成になっています。

ブロックコメント1 の中に

== startdoc

という行があります。 プログラムのソースファイルに埋め込む ODR 文書の開始行 H1 で説明するように、この行より前の部分は、ODR 文書としては無視され、この行の次の行 004行から、049行の == enddoc の行までが、ODR 文書として扱われます。

021行から026行の (defun fooa ...) のコードは、前3行、後ろ3行を加えると、

018: @begin{code}{proglist} ------------------------------
019: |#
020: 
021: (defun fooa (num)
022:   (interactive 
023:      "nDInsert a number: "
024:      :default 10)
025:   (message-box (format nil "~D" num))
026:     )
027: 
028: #|
029: @end{code} ------------------------------------------

のようになっています (※)。

※ vb 環境でも、オプション文字列のところに proglist を指定できます。

プログラムのソースファイルの中のソースコードの扱い H1 で説明するように、ODR 文書から見れば、ここの部分は、

021: (defun fooa (num)
022:   (interactive 
023:      "nDInsert a number: "
024:      :default 10)
025:   (message-box (format nil "~D" num))
026:     )

を表示するものとして扱われます(※)。

※ proglist オプションを指定すると、@begin{code} ... @end{code} の間の最初の1行と最後の1行は、無視されます。ここに、ブロックコメントの最後のコード(この例では、|#)、ブロックコメントの最初のコード(この例では、#|)が書かれるのが普通です。ブロックコメントの機能が無いバッチファイルや emacs lisp などでは、ここは空白行にしてください。

また、@begin{code}{proglist} の次の次の行、@end{code} の前の前の行に、空白行を置くことができます。この例では、20行、 27行に空白行を置いています。

空白行を置かなくても構いません。@begin{code}{proglist} の次の次の行、@end{code} の前の前の行に置いた空白行は、o2h による整形のときには無視されます。

CommonLisp のソースプログラムとして見た場合、 @begin{code}{proglist} は、ブロックコメント1 の中のコメント行、 @end{code} は、ブロックコメント2 の中のコメント行でしかありません。

(defun foob ...) のコードは、

032: @begin{ignore} --------------------------------------
033: |#
034: 
035: (defun foob (num)
036:   (interactive 
037:      "nDInsert a number: "
038:      :default 10)
039:   (message-box (format nil "~D" num))
040:     )
041: 
042: ; ... ODR 文書としては、ここは無視されます。
043: 
044: #|
045: @end{ignore} ----------------------------------------

のように @begin{ignore} と @end{ignore} で囲まれているので、 ODR 文書から見れば、無視されます。CommonLisp としては、 @begin{ignore} は、ブロックコメント2 の中のコメント行、 @end{ignore} は、ブロックコメント3 の中のコメント行でしかありません。

o2h.rb のオプションで (プログラム o2h.rb の呼び出し方 H1 を参照してください)、--proglistignore を指定するか、整形対象の文書の中に

;;; $OPT_PROGLISTIGNORE = true

と書いておくと、

  @begin{code}{proglist} ------------------------------
  ...
  ...
  ...
  @end{code} ------------------------------------------

のように書かれているところは、整形したときのコードに書きだされません。プログラムのソース・コードの説明部分だけを書き出し、コードそのものは表示したくない場合は、

;;; $OPT_PROGLISTIGNORE = false

のところの false を true に書き換えて、o2h.rb を呼び出せばよいことになります。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

11.1.2 プログラムのソースファイルに埋め込む ODR 文書の開始行

Referred at: [H1]

プログラムのブロックコメントを使用して、行頭からコメント文を書けるようにしてから、

== startdoc
;;; @(#) foo.l

のように書いてください(いずれの行も、実際には、行頭から書いてください。== startdoc が、ODR 文書が埋め込めれているという標識で、この行以降に埋め込まれている ODR 文書を html ファイルに変換します。

ファイル名を書いているのが、;;; @(#) foo.l です。ファイル名が foo.l のときにこう書いているのであって、ファイル名が bar.ps1 なら、;;; @(#) bar.ps1 と書いてください。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

11.1.3 プログラムのソースファイルの中のソースコードの扱い

Referred at: [H1]

"proglist の指定" Referred at: [H1][H2][H3]

プログラムのソースコードを @begin{code}{proglist} ... @end{code} で囲みます。

プログラムとして見ると、@begin{code}{proglist}, @end{code} はブロックコメントの内側に書きます。ODR 文書としては、 ODR 文書の内部に書かれていることになります。

このように、proglist を指定すると、 @begin{code}{proglist} の次の行のブロックコメントの終わり、 @end{code} の前の行のブロックコメントの開始行を除いた部分をプログラムリストとして表示してくれます。

例を示します。

@begin{code}{proglist} -------------------------------------
*/

(defun fooa (num)
  (interactive 
     "nDInsert a number: "
     :default 10)
  (message-box (format nil "~D" num))
  )

/*
@end{code} -------------------------------------------------

と書くと、つぎのように整形されます。

001: (defun fooa (num)
002:   (interactive 
003:      "nDInsert a number: "
004:      :default 10)
005:   (message-box (format nil "~D" num))
006:   )

この例では、@begin{code}{proglist} の次の行に */、 @end{code} の前の行に /* を書いています。ここのブロックコメントの終了、開始の行は、それぞれのプログラム言語に対応したブロックコメントの終了、開始コードを書いてください。例えば、 Common Lisp のソースファイルの中に書いているのであれば、|# と #| を、 ruby のソースファイルの中に書いているのであれば、=end, =begin を書いてください。

書き換えプログラム o2h.rb は、proglist オプションが指定されていると、@begin{code}{proglist} の次の行、 @end{code} の前の行は、ブロックコメントの終了、開始のための文字列が書かれているものとみなして、実際に、ブロックコメントの終了、開始のための文字列が書かれているかどうかとは関係なく、無視します。

また、@begin{code}{proglist} の次の次の行、@end{code} の前の前の行に、空白行を置くことができます。この例でも、@begin{code}{proglist} の次の次の行、@end{code} の前の前の行に、空白行を置いています。見やすくなると思って、これらの空白行を入れています。

空白行を置かなくても構いません。@begin{code}{proglist} の次の次の行、@end{code} の前の前の行に置いた空白行は、o2h による整形のときには無視されます。実際、上に示した例では、これらの空白行は無視されています。

@begin{code} ... @end{code} や @begin{vb} ... @end{vb}、 @begin{verbatim} ... @end{verbatim} で、オプション文字列に proglist を指定した場合に付加される行番号は通算されます。

オプション文字列に proglist を指定したときの行番号の初期値は、 $proglistnum に格納されていて、最初は、0 に設定されています。
;;; @(%) $proglistnum = 0
のように書いた行を ODR文書の途中に書き込むと、そこで、行番号をリセットできます。

@begin{code}{proglist bold} --------------------------------
*/

(defun fooa (num)
  (interactive 
     "nDInsert a number: "
     :default 10)
  (message-box (format nil "~D" num))
  )

/*
@end{code} -------------------------------------------------

と書くと、太字で表示されるようになり、つぎのように整形されます。

001: (defun fooa (num)
002:   (interactive 
003:      "nDInsert a number: "
004:      :default 10)
005:   (message-box (format nil "~D" num))
006:   )

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

11.1.4 プログラムファイルで、指定した範囲を無視する

ODR 文書として見た時に、プログラムファイルの指定した範囲が無視されるようにするのに、@begin{ignote} ... @end{ignore} を利用できます。

lisp プログラムに ODR 文書を埋め込んだ例 H2 のソース・ファイル foo.l の中の、ブロックコメント2とブロックコメント3の間に挟まれた部分は、この @begin{ignote} ... @end{ignore} に挟まれているので、ODR 文書として整形されるときは無視されます。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

11.1.5 C# プログラムに ODR 文書を埋め込んだ例

Matrix.cs
/*
== startdoc
;;; @(#) Matrix.cs
;;; @(%) $OPT_PROGLISTIGNORE = false

$math
文中の数式は、(Vb ¥( ¥) /Vb) で囲みます。
.. 例を示します。(Vb ¥(¥pi¥) /Vb) のように
書くと、¥(¥pi¥) と表示されます。
¥(¥sum_{n=1}^¥infty ¥frac{1}{n^2} = ¥frac{¥pi^2}{6}¥) のような
文中数式も書けます。

Matrix.cs で扱うクラスは、Rfri という namespace の中で定義
されています。

----------------------------------------------------------
* using 文

@begin{code}{proglist} ---------------------------------------
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

/*
@end{code} ---------------------------------------------------

----------------------------------------------------------
** class DeoubleItem -- double の配列の sort のための補助クラス

== public class DoubleItem : IComparable

class DoubleItem は、double 型の変数を小さい順に並べるため
に使用する補助のクラスです。

@begin{code}{proglist} --------------------------------------
*/

 public class DoubleItem : IComparable
 {
/*
@end{code} -------------------------------------------------

------------------------------------------------------------
*** class DoubleItem のフィールド

=. フィールドの宣言         : 使用目的
-  public int index         : インデックス
-  public double value      : 配列の値

@begin{code}{proglist} -----------------------------------
*/
      public int index;
      public double value;
...
/*
@end{code} -------------------------------------------------

------------------------------------------------------------
*** メソッド double distance(...) 

== double distance(
        double x1, double y1, double x2, double y2
     )

点 P1(x1, y1) から点 P2(x2, y2) との間の距離 (h 
¥(¥sqrt{(x1-x2)^2 + (y1-y2)^2}¥) /h) を計算して返します。

=. 引数          : 意味
-  double x1     : 点 P1 の x座標
-  double y1     : 点 P1 の y座標
-  double x2     : 点 P2 の x座標
-  double y2     : 点 P2 の y座標
=  戻り値        : 意味
-  double        : 点 P1 と点 P2 の距離

@begin{code}{proglist} -------------------------------------
*/

double distance(double x1, double y1, double x2, double y2)
{
  x1 -= x2;
  y1 -= y2;
  return sqrt(x1 * x1 + y1 * y1); 
}

/*
@end{code} -------------------------------------------------

== enddoc
*/

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

11.1.6 Powershell スクリプトに ODR 文書を埋め込んだ例

pl.ps1
001: # @(#) pl.ps1
002: #
003: # -- 引数で与えた link ファイルの指すディレクトリに移動する
004: # 
005: <#
006: == startdoc
007: = pl.ps1
008: ;;; @(%) $OPT_PROGLISTIGNORE = false
009: 
010: pl.ps1 は、引数で指定した情報に基づいて、ディレクトリを移
011: 動します。
012: 
013: @begin{code}{proglist} -------------------------------------
014: #>
015: 
016: <#
017: .SYNOPSIS
018: 指定したディレクトリを移動します。
019: .DESCRIPTION
020: 指定したディレクトリを移動します。ディレクトリ dirlink の
021: 下に、ディレクトリへのショートカット群が置かれていて、その
022: ショートカットファイルの基本部分を引数に指定して、そのショ
023: ートカットが指すディレクトリに移動します。
024: 
025: ~/bat で定義されています。
026: 
027: 使用例
028:  PS> pl bat
029: #>
030: 
031: if ($Args.Count -eq 0) {
032:   $message = ($MyInvocation.MyCommand.Name -replace "[.][^.]*$","") +
033:     ": No argument was specified."
034:   write-host $message
035:   exit 1
036: }
037: $basename = $args[0]
038: 
039: if ($basename -is [string])
040: {
041:   if ($basename -like "*.lnk") {
042:     if (split-path $basename -isAbsolute) {
043:       # $basename がショートカットファイルで、絶対パスである
044:       # なら、直接、その指す先に移動したい
045:       $linkfile = $basename
046:     }
047:     elseif ($basename -like ".¥*") {
048:       $linkfile = $basename
049:     }
050:     else
051:     {
052:       # $basename はショートカットであるが、絶対パスではな
053:       # かった。
054:       $basename = (Split-path $basename -Leaf) -Replace 
055:         ".lnk$", ""
056:       $linkfile = $env:dirlink + "¥" + $basename + ".lnk"
057:     }
058:   }
059:   else {
060:     $linkfile = $env:dirlink + "¥" + $basename + ".lnk"
061:   }
062:   if (test-path -path $linkfile) {
063:     pushd (linkpath.exe -w $linkfile)
064:   }
065:   else {
066:     if (test-path $basename) {
067:       pushd $basename
068:     }
069:     else {
070:       "File " + $args[0] + 
071:       ".lnk does not exist in the folder " + 
072:       $env:dirlink + ",`n and the sub-folder " + $basename + 
073:       " does not exist."
074:     }
075:   }
076: }
077: elseif ($basename.gettype().Name -eq "FileInfo") {
078:   $linkfile = $basename.fullname
079:   if ($linkfile -like "*.lnk") {
080:     pushd (linkpath.exe -w $linkfile)
081:   }
082:   else {
083:     write-host $basename.Name はショートカットファイルではありません。
084:   }
085: }
086: elseif ($basename.gettype().Name -eq "DirectoryInfo") {
087:   $linkfile = $basename.fullname
088:   pushd $linkfile
089: }
090: else {
091:   Write-host $basename は有効な引数ではありません。
092:   break
093: }
094: 
095: <#
096: @end{code} -------------------------------------------------
097: 
098: == enddoc
099: #>

行番号は、元のスクリプトファイルには入っていませんが、説明のために、行番号が表示されるようにしています。

13行の @begin{code}{proglist} の行は、05行から14行の間のブロックコメントの中に書かれているので、スクリプトのコードとしては、意味はありません。

同様に、96行の @end{code} の行は、95行から99行のブロックコメントの中に書かれているので、スクリプトのコードとしては、意味がは在りません。

ODR 文書として見れば、15行の @begin{code}{proglist} の行から 96行の @end{code} の間の行は、ODR 文書内で引用しているコードに見えます。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

11.2 ブロックコメントがないプログラムソースに ODR 文書を埋め込む

ブロックコメントがないプログラムファイルでも、行単位でコメント文を書くことができれば、ODR 文書を埋め込むことができます。

その場合、

== startdoc "::|"

のように、ODR 文書を埋め込む行の行頭コメントを == startdoc の後に指定することにします。この例の "::|" は、バッチファイルに対応する場合のものです。

emacs lisp もブロックコメントの仕組みがないようです。拡張子 .el のファイルには

== startdoc ";|"

のように、== startdoc の後に ";|" を指定することにします。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

11.2.1 バッチ・ファイルに ODR 文書を埋め込む

バッチ・ファイルには、ブロックコメントの仕組みが無いようです。

行頭に :: と書かれている行はコメント行と見なされるので、さらにその後に "|" を付加して、行頭に ::| が書かれている行は、ODR 文書が書かれているとします。この取り決めは、ユーザが決めて文書の方に書きます。書き換えプログラム o2h.rb を変更する必要はありません。

ODR 文書を埋め込んだバッチ・ファイルの例を示します。

o2hs.bat Referred at: [H1]
001: @echo off
002: ::| == startdoc "::|"
003: ::| ;;; @(#) o2hs.bat
004: ::|
005: ::|  $Filename: o2hs.bat $
006: ::|  $Lastupdate: 2016-03-31 22:22:59 $
007: ::|
008: ::| --------------------------------------------------------
009: ::| * 概要
010: ::|
011: ::| 引数で指定した ODR 文書ファイルまたは ODR 文書が埋め込ま
012: ::| れたファイルを html ファイルに変換して表示します。
013: ::|
014: ::| --------------------------------------------------------
015: ::| * コード
016: ::|
017: ::| @begin{code}{proglist} ---------------------------------
018: 
019: :: o2h.rb のフルパスを %o2hrb% に格納します。
020: set o2hrb=C:/home/me/script/o2h.rb
021: 
022: :: html ファイルを作成します。
023: @"C:¥Ruby200¥bin¥ruby.exe" "%o2hrb%" %~f1 > qux.html
024: 
025: :: 作成された html ファイルを表示します。
026: start qux.html
027: 
028: :END
029: 
030: ::| @end{code} ---------------------------------------------
031: ::|
032: ::| == enddoc

□行番号は参照のために付加したものです。

書き換えプログラム o2h.rb は、002行のように

== startdoc "..."

で終わる行を読み取ると(※)、... の部分に書かれている文字列で始まる行を ODR 文書が書かれているコメント行であるとして、その行以降の行を読み取ります。

※ == startdoc の後に "..." のようにダブルクォートで囲まれた文字列が来ています。

拡張子が ".txt" のファイルや、ブロックコメントに対応しているプログラムのソース・ファイル (lisp プログラムに ODR 文書を埋め込んだ例 H3 を参照) では、== startdoc の後に ダブルクォートで囲まれた文字列を指定せず、
startdoc で終わるようにしてください。

ブロックコメントの機能を持っていないプログラムファイルに限り、== startdoc "..." の形の行を入れます。

この例では、"..." のところは、"::|" となっているので、003行目以降、行頭に ::| がある部分の ::| が削除されて、拡張子が ".odr" のファイルに

001: ;;; @(#) o2hs.bat
002: 
003:  $Filename: o2hs.bat $
004:  $Lastupdate: 2016-03-31 22:22:59 $
005: 
006: ----------------------------------------------------------
007: * 概要
008: 
009: 引数で指定した ODR 文書ファイルまたは ODR 文書が埋め込ま
010: れたファイルを html ファイルに変換して表示します。
011: 
012: ----------------------------------------------------------
013: * コード
014: 
015: @begin{code}{proglist} -----------------------------------
016: 
017: :: o2h.rb のフルパスを %o2hrb% に格納します。
018: set o2hrb=C:/home/me/script/o2h.rb
019: 
020: :: html ファイルを作成します。
021: @"C:¥Ruby200¥bin¥ruby.exe" "%o2hrb%" %~f1 > qux.html
022: 
023: :: 作成された html ファイルを表示します。
024: start qux.html
025: 
026: :END
027: 
028: @end{code} -----------------------------------------------
029: 
030: == enddoc

□行番号は参照のために付加したものです。

と書かれていたかのように整形されます。

@begin{code}{proglist} の直後、@end{code} の直前に空白行を入れる必要があることに注意してください。

@begin{code}{proglist} ... @end{code} の間では、== startdoc "..." の形で指定した文字列で始めるコメント文は使用しないようにしてください。

バッチ・ファイルとして o2hs.bat H1 を見たときは、意味があるコードの部分は、、o2h.rb で整形するときには、 @begin{code}{proglist} ... @end{code} で囲まれていて、 ODR 文書の一部として処理されます。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

11.2.2 uwsc スクリプト・ファイルに ODR 文書を埋め込む例

uwsc スクリプト・ファイルに ODR 文書を埋め込む例を示します。

screensize.uws
//| == startdoc "//|"
//| ;;; @(#) screensize.uws
//| 〓uwsc スクリプトの概要screensize.uws
//| -- ここにこのスクリプト・ファイルが何をするか簡潔に書く
//| ;;; (File *my-winnote* "win-uwsc.txt")
//| ;;; (File *my-dropboxdata* "xyzzy/insert/template.uws")
//| ;;; (File *my-progform.sample* "uwsformVer02.txt")
//| ;;; (File *my-sitelisp* "uwsc-mode.l")
//| ;;; (File *my-sitelisp* "my-form.l")
//|
//|  $Filename: screensize.uws $
//|  $Lastupdate: 2016-07-31 18:44:47 $
//|
//| M-x auto-fill-mode で、コメント行の編集が容易になります。
//|
//| @begin{code}{proglist} ------------------------------

layoutini = trim(doscmd("echo %HOME%")) + "¥layout-uwsc.ini"

screenWidth = G_SCREEN_W
screenHeight = G_SCREEN_H

// MsgBox(_
// "スクリーンの幅   " + screenWidth + "<#CR>" + _
// "スクリーンの高さ " + screeHeight _
// )

WRITEINI("layout", "screenWidth", _
  screenWidth, _
  layoutini)

WRITEINI("layout", "screenHeight", _
  screenHeight, _
  layoutini)

//| @end{code} -----------------------------------------
//|
//| == enddoc

@begin{code}{proglist} の直後、@end{code} の直前に空白行を入れる必要があることに注意してください。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

12 ruby スクリプトの ODR 文書への埋め込み

Referred at: [H1]

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

12.1 ODR 文書本体への ruby スクリプトの埋め込みと利用

o2h では、Ver 12.10 で、RubyDef 関数 H2が導入され、Eval 関数 H1Ruby 関数 H1と連携することによって、ODR 文書に ruby スクリプトを埋め込むことができるようになりました。これにより、ユーザの側で、機能を追加できるようになりました。ユーザは、自分用の Ruby のメソッドを文書ファイルの中で定義して利用できます。

RubyDef 関数の使用例は、RubyDef 関数 H3のところで示しました。

しかし、ある程度まとまった Ruby スクリプトは別のファイルに書きたいという要望も出てくるでしょう。これに応えるために、補助の ruby スクリプトファイルを読み込む機能を追加しました。これについてつぎの項で説明します。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

12.2 補助の ruby スクリプトの読み込み

● 文書ファイルのファイル名に .rb を付加した ruby スクリプトの読み込み

文書ファイルのファイル名に .rb を付加した補助の ruby スクリプトを、文書ファイルと同じディレクトリに用意しておいて、文書ファイルを html ファイルに変換するときに読み込むようにすることができます。

例えば、文書ファイルの名前が foobar.txt であるとして、foobar.txt があるディレクトリに foobar.txt.rb を用意しておくと、o2h は、foobar.txt を整形するときに、foobar.txt.rb が同じディレクトリにあるか調べて、あれば、それを require 文によって読み込みます。foobar.txt.rb の中に、利用したい ruby メソッドの定義を書き込めばいいわけです。

文書ファイルと同じディレクトリにあり、文書ファイルと同名のファイル名に拡張子 .rb を付加した名前のファイルは置いておきさえすれば、ユーザは読み込む命令を文書ファイルの中に書く必要はありません。

例を示します。この文書ファイル win-odr.odr が置かれているディレクトリに、win-odr.odr.rb (拡張子 .rb を付加した名前のファイル) という補助の rubyスクリプトファイルを置いています。

その win-odr.odr.rb の中につぎのように書いています。

win-odr.odr.rb
# @(#) win-odr.odr.rb
# [2017-08-21]
def Box(str)
  return ("<span style=¥"border:2px solid black; background-color: lightcyan¥">" + str + "</span>")
end

ここで示しているように、ファイル win-odr.odr.rb の中で、メソッド Box を定義しています。

それで、この文書 win-odr.odr を o2h で処理すると、o2h は、win-odr.odr の本文を処理する前に、win-odr.odr.rb を読み込み、その中で Box メソッドの定義を読み込みます。そこで、文書ファイル win-odr.odr の中に書かれた (Ruby Box("黒い枠で囲む四角の例")/Ruby) に対応できるようになっていて、黒い枠で囲む四角の例 のように整形することができます。

● 特定の ruby スクリプトの読み込み

文書中に、

;;; @(%) require ($directory + "/" + "greenbox.rb")

あるいは、

;;; @(%) require "./greenbox.rb"

のようなコードを書いておくと、o2h は、文書が置かれているディレクトリにある greenbox.rb を読み込みます。

greenbox.rb の内容はつぎのようだとします。

greenbox.rb
def GreenBox(str)
  return ("<span style=¥"border:2px solid green; background-color: palegreen;¥">" + str + "</span>")
end

そうすると、(Ruby GreenBox("緑色の枠で囲む四角の例") /Ruby) と書いて、緑色の枠で囲む四角の例 のように整形できます。

何らかの理由で、文書ファイルと同名の ruby スクリプトファイルを用意してそこにメソッドの定義を書き込むのではなく、別の名前の ruby スクリプトファイルにメソッドの定義を書きたい場合に、この仕組みを利用してください。

ただし、(A) 文書ファイルのファイル名に .rb を付加した補助ファイルに ruby スクリプトを書くか、(B) 文書ファイルそのものに、RubyDef 関数 H4を使用してスクリプトを書き込むようにした方が文書の管理の上では間違いが少なくなります。この2つの方法のうち、普通は、(B) の方法が問題が少ないように思うかも知れませんが、文書の一部分をとりだして html に変換する場合に問題が生じます。むしろ、(A) の方法が問題が少ないでしょう。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

13 プログラム o2h.rb の呼び出し方

Referred at: [H1]

プログラム o2h.rb は Ruby のスクリプトファイルです。それで、Ruby をインストールしておくか、o2h.rb を exe 化した o2h.exe を利用して、ODR 文書を html ファイルに変換します。

スクリプトファイル o2h.rb を使う場合は、例えば、Ruby 2.3.1 をインストールしてください(※)。o2h.rb は、内部で、ショートカットファイルを扱うところがあるので、

  $ gem install win32-shortcut

として、ショートカットファイルを処理するライブラリ win32-shortcut を取得しておいてください。

※ Ruby 187, Ruby 230 以降、Ruby 2.4.1 で正常に動作することを確認しています。

「o2h による整形のための文書作成規約」に従って書いた文書を、 foo.txt のように拡張子が .txt のファイルに格納して、

   $ ruby c:¥script¥o2h.rb foo.txt

のようにすると、foo.txt を html 文書に変換して、その内容を標準出力に書き出します。ただし、$ は、cmd.exe のプロンプトです。また、html 文書への変換プログラム o2h.rb を c:¥script に置いていると仮定しています。

   $ ruby c:¥script¥o2h.rb .¥foo.txt > .¥foo.html

とすると、変換された html 文書が foo.html に収録されることになります。

※ 大事なのは、foo.txt の方で、変換した html ファイルの方ではないので、例えば、いつでも、qux.html という固定した名前の html ファイルに変換して、qux.html を閲覧するようにしておくというのも一つの方法です。そうすると、多くの html ファイルであふれるということもありません。

スクリプト o2h.rb に対してオプションを指定することができます。

   $ ruby c:¥script¥o2h.rb [options] .¥foo.txt > .¥foo.html

[options] のところには、つぎのようなオプションを指定することができます。

--help
使用方法の説明を出力してすぐに終了します。

--nonavi
navigation のための出力 (目次へ飛んだりするためのアンカーの出力) を抑制します。

--noheader
header 部分を付加せず、navigation のための出力も付加しません。見出し行も、「1.1 見出し」のような形に変換せず、「見出し」のようにそのまま表示します。--noheader を指定したときは、--nonavi も指定したように動作します。

--proglistignore
@begin{code}{proglist} ... @end{code} や @begin{vb}{proglist} ... @end{vb} で囲まれた範囲を標準出力に書き出しません。プログラムなどで、ソースコードを html ファイルに含めないように整形したいときに使用します。

--brwser
引数つきオプションです。どのブラウザーを使って閲覧すると想定して、html ファイルを生成するかを指定します。

デフォールトでは、--browser chrome として起動されたものと見做されます。--browser chrome として起動されたときは、 Google Chrome を使用して閲覧するのに適した html ファイルを生成します。--browser ie として起動されたときは、Internet Explorer を使用して閲覧するのに適した html ファイルを生成します。--browser の引数が chrome 以外のときは、--browser ieを指定したものと見做されます。

<pre> タグを使ったところの文字サイズの違いが原因です。

--version
version を出力してすぐに終了します。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

14 古い仕様の説明

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

14.1 古い仕様でいまも有効な仕様

新しく整備した環境ではもう使わなくてもいいと思われても、旧来の文書の中で、使われているかも知れないので残されている仕様をここに記録します。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

14.1.1 twTable 環境の簡易記法で、最終行を . で始める (古い書き方)

twTable の簡易記法では、最初は、「開始行と同じカラム位置まで字下げして、ピリオドを置き、すぐ改行した行」を終了行とする仕様にしました (古い仕様)。

具体例を示します。

  = 項目名     : 説明
  - 項目名1    : 説明1
  - 項目名2    : 説明2
  . 

のように、最後に、開始行と同じカラム位置まで字下げして、ピリオドを置き、すぐ改行した行を置くことにしていました。

しかし、「ピリオドを置く」終了行を書き忘れることが多いので、空白行が来た場合にも twTable 環境が終了するものと解釈されるようにしました。つまり、ピリオドだけを置く行は不要で、

= 項目名     : 説明
- 項目名1    : 説明1
- 項目名2    : 説明2

のように書くことができます。簡単になりました。

以前のように、開始行と同じカラム位置まで字下げして、ピリオドを置き、すぐ改行した行を置いていても、twTable 環境の終了と認識されるようにしています。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

14.2 古い仕様でもう有効でない仕様

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

14.2.1 カンマやピリオド、マイナス記号を置いた行で行を囲む記法

◇ 行頭にカンマだけがある行で行を囲む記法

,
ここは、, (カンマ) だけがある行と , (カンマ)
だけがある行で囲まれていて
詰め込み処理
されません。
,

と書いて、つぎのように整形されていました。

ここは、, (カンマ) だけがある行と , (カンマ)
だけがある行で囲まれていて
詰め込み処理
されません。

このカンマだけがある行で囲む記法はもはや有効ではありません(※)。

※ カンマだけがある行に特別な意味はないことになるので、ただ、行頭に , が1文字書かれているものとして処理されるようになりました。つぎの例を見てください。

,この前の行に、, が1文字置かれて改行されました。

新しい記法では、最初の , (カンマ) だけがある行は、,~ (カンマとチルダー) を書き、最後の , (カンマ) だけがある行は、,. (カンマとピリオド) を置きます。開始行と終了行が明確になるように新しい記法が導入されています。

カンマを2個だけ書いた行で囲む記法、カンマを3個だけ置いて行を囲む記法ももはや有効ではありません。カンマを2個置く場合、カンマを3個置く場合も、すべて、開始行では ~ を付加し、終了行では、ピリオド . を付加しないといけません。

◇ 行頭にピリオドだけがある行で行を囲む記法

. 
ここは
左詰めされます。
. 

と書いて、つぎのように整形されていました。

ここは
左詰めされます。

もはやこの記法は有効ではありません。

※ ピリオドだけがある行に特別な意味はないことになるので、ただ、行頭に ピリオドが1文字書かれているものとして処理されるようになりました。つぎの例を見てください。

.ソースでは、この前の行に、, (カンマ) が1文字置かれてすぐ改行されました。

新しい記法では、最初の . (ピリオド) だけがある行は、.~ (ピリオドとチルダー) を書き、最後の . (ピリオド) だけがある行は、.. (ピリオド2個) を置きます。開始行と終了行が明確になるように新しい記法が導入されました。

行頭にピリオドだけがある行で行を囲む記法はもう使用しないようにしてください。

◇ 行頭にマイナス記号だけがある行で行を囲む記法

-
ここは
枠で囲まれます。
-

と書いて、つぎのように整形されていました。

ここは
枠で囲まれます。

もはやこの記法は有効ではありません。

※ マイナス記号だけがある行に特別な意味はないことになるので、ただ、行頭に マイナス記号が1文字書かれているものとして処理されるようになりました。つぎの例を見てください。

-ソースでは、この前の行に、- が1文字置かれてすぐ改行されました。

新しい記法では、最初の - (マイナス) だけがある行は、-~ (マイナスとチルダー) を書き、最後の - (マイナス) だけがある行は、-. (マイナスとピリオド) を置きます。開始行と終了行が明確になるように新しい記法が導入されました。

マイナス記号を2個だけ書いた行で囲む記法、マイナス記号を3個だけ置いて行を囲む記法についてももはや有効ではなく、新しい記法では、開始行ではチルダーを付加し、終了行では、ピリオドを付加します。

行頭にマイナス記号だけがある行、マイナス記号が2個ある行、マイナス記号が3個ある行で囲む記法は廃止されました。もう使用できません。
すべて、開始行では ~ を付加し、終了行では、ピリオド . を付加しないといけません。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

14.2.2 標題つきリストの標題で複数の標題

標題1
標題2
標題3
説明文

のような整形結果を得るために、 Version 6.15 より以前は、

:標題1<br>標題2<br>標題3
  説明文

のような記述と

:標題1
:標題2
:標題3
  説明文

のような記述の両方を有効としていましたが、Version 6.16 以降では、<br> を使う書き方は、もう使わないことにしました。元々、整形した結果と類似性があるかという観点から判断すると <br> を使う記法はあまりいいとは言えませんでした。

2番目の記法について、少し改善して、標題1, 標題2, ... の部分で、 html のタグ文字などの特殊文字は特殊表現を使って書きかえることにしました。その点では便利になりました。

Version 6.16 以降では
:標題1<br>標題2<br>標題3
  説明文
のような記法は使えません。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

14.2.3 標題付き簡約リスト

標題付き簡約リストはもう有効ではありません。

もうこの標題付き簡約リストはもう廃止しましたが、参考のために紹介すると、標題付き簡約リストとは

標題  :: 説明文1
         説明文2

のように、

  1. 行頭に0個以上の半角空白を置き、標題を書いて、その後に1個以上の半角空白を置いて、:: を書き、その後に半角空白を丁度1個置いて説明を書き出すと、「標題付き簡約リスト」の開始行になり、

  2. 説明文の続きは、開始行の説明文の書き出し位置と同じ位置から書き出し、詰め込まれる

というものでした。

誤って標題付き簡約リストと扱われないように気をつけるためのルールも必要になり、それを理解するのが煩わしくなるので、標題付き簡約リストを廃止しました。

標題付き簡約リストで表記したい形式は、twTable 環境の簡易記法 H3を使って表記できるようになっています。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

14.2.4 標題付きリスト、標題を書いてから :: を書く古い記法

行頭から0個以上の半角空白を置き、標題を書いて、:: で終わると標題付きリストの開始行と判定されるという仕組みがありましたが、 Version 12.01 から廃止しました。

例を示します。

標題::
    ここに説明を書きます。
    詰めこまれます。

    一行空けてこの行を書いています。
つぎの標題::
    連続して標題つきリストが出てきたらどうなるか。
さらにつぎの標題::
    標題つきリストは、各々が独立した環境なので、連続していて
    も特段変わりはありません。

これは、つぎのように書いたのと同じように整形されていました。

::標題
    ここに説明を書きます。
    詰めこまれます。

    一行空けてこの行を書いています。
::つぎの標題
    連続して標題つきリストが出てきたらどうなるか。
::さらにつぎの標題
    標題つきリストは、各々が独立した環境なので、連続していて
    も特段変わりはありません。

標題の後に、:: を書くという仕様はもう廃止されました。

また、標題とその説明を書くために、標題の最後に、"::;" (コロン2つとセミコロン) を書き、

標題::;    ここに説明を書きます。

のように書いて、

::標題
    ここに説明を書きます。

と書いたように整形されるという仕組みもありましたが、Version 12.01 から廃止しました。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

15 問題だと思われる事項で解決した事項

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

15.1 アウトライン見出しの星の数の辻褄をチェックする

Referred at: [H1]

[2016-03-18] に、アウトライン見出しの星の数の辻褄をチェックする機能を、o2h.rb で実現しました。

例えば、

  * ODRで定める文書環境
  *** 番号付きリスト

のように、星の個数が急に増えるのは正しくありません。

o2h.rb で元の文書ファイルを変換するときには、これをチェックして、自動的に辻褄のあうように、星の数を変更する機能を o2h.rb で実現しました。この例で言えば、

  * ODRで定める文書環境
  ** 番号付きリスト

のようになっていたように処理され、「*** 番号付きリスト」で星の個数が不適切であることを報告するメッセージを、変換した html 文書の最後に書き込みます。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

15.2 Java スクリプトの実行の許可

o2h で生成した html ファイルには、Java スクリプトが含まれています。 Java スクリプトは、目次や見出し一覧の表示をコントロールするために使用されています。

Internet Explorer で、o2h で生成した html を開くと、「ブロックされているコンテンツを許可」するかどうかをいちいち聞いてきます。これを回避するにはつぎのようにします。。

対応方法

  1. Internet Explorer を起動し、画面右上の歯車アイコンから「インターネットオプション」を選択します。

  2. インターネットオプションが開いたら「詳細設定」タブを選択し、設定をスクロールしていくと「マイコンピューターのファイルでのアクティブコンテンツの実行を許可する*」という項目があります。デフォルトだとそこにチェックがはいっていませんので、チェックをいれて「OK」を選択します。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

16 未解決の問題

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

16.1 未解決の問題1

::標題
    ここに説明を書きます。
    詰めこまれます。

    ::入れこ
        このように入れこにできます。
::つぎの標題
    連続して標題つきリストが出てきたらどうなるか。

を o2h で整形すると、次のようになります。

標題
ここに説明を書きます。詰めこまれます。

入れこ
このように入れこにできます。
つぎの標題
連続して標題つきリストが出てきたらどうなるか。

ここで、「このように入れこにできます。」の後に、整形前にはない空白行が入ってしまいます。ここに空白行が入らないようにできないか検討しましたが、今のところ空白行が入らないようにすることができていません。

止むを得ないと思います。むしろ、この方がいいとも思います。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

17 o2h.rb から o2h.exe を作成する方法

Ruby をインストールします。

Ruby Installer のページ
https://rubyinstaller.org/downloads/
から、インストーラを入手すれば簡単にインストールできます。

cbar は、rubyinstaller-2.4.2-2-x64.exe を C:¥Ruby242 にインストールしました。

Ruby をインストールしたディレクトリにパスを通します。cbar の例では、C:¥Ruby242¥bin にパスを通します。

o2h.rb では、File 関数を解釈するときに、ショートカットファイルが指す先のディレクトリ名を取得するのに、ライブラリ win32-shortcut を使っています。そのために、gem を使って

  $ gem install win32-shortcut

としました。

Ruby スクリプトから実行ファイルを作成するために、ocra をインストールします。

  $ gem install ocra

o2h.rb を置いているディレクトリに移動し、

  $ ocra --console o2h.rb

とすると、o2h.exe が生成されます。

このようにして作成された o2h.exe を使うと、ruby がインストールされていない環境でも、

  $ o2h.exe foo.txt > qux.html

のようにして、ODR 文書が格納されたファイル foo.txt から、html ファイル qux.html を作成できます。

Ruby 2.4.2 ではこのようにして、ruby スクリプト o2h.rb から、実行プログラム o2h.exe を生成することができました。

このようにして Ruby 2.4.2 で作成した o2h.exe で、Windowsの環境によっては、うまく html ファイルを生成できない現象が起こりました。Windows をセットアップするときに、ユーザ名が日本語になってしまっているときにうまく行かないように思います。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

18 プログラム o2h.rb の更新情報

Version 13.05
xTable 環境の中で、.~ で始まる行と、.. で始まる行で挟まれた行の間で、行頭にピリオドを3個置き、そのあとに半角空白を1個以上置いて書き始めた行では、html コードを書いても html コードと解釈されなくしました。

Version 13.04
xTable 環境の説明部分で、行頭から ... を書いてすぐ改行した行は単に無視されるという機能を追加しました。

Version 13.03
(N "foo") とあったときに、そこの箇所に作成されるリンクは、 foo N2 のような形式で表示されるようにしました。数字は、その語がその文書の中で何番目に参照されているかを示しています。

これに合わせて、(H "bar") は、 bar H2 のような形式で表示されるようにしました。数字は、その見出しがその文書の中で何番目に参照されているかを示しています。

Version 13.02
番号付きリストとマーク付きリストで、番号やマークをつけた行に Dashline Display 環境が置けなかったバグを修正しました。

  • こんな風に
    書けます。
    

    この版以前では、これが整形できなかった。

  1. こんな風に
    書けます。
    

    この版以前では、これが整形できなかった。

Version 13.01
FourcommasVerbatim 環境を導入しました。

Verbatim 環境、Code 環境で、環境の内部を太字で表示することを指定するオプション文字列 bold, bbold を導入しました。

これらの、太字で表示する範囲の中に、,,,~ と ,,,. で囲まれた行は、普通のフォントで表示するようにしました。

Version 12.23
frame 環境で、オプション文字列として、font-size: small を指定できるようにしました。

Version 12.22
(FileNet "./foobar.cpp") の形の Emacs 関数を導入しました。 (Net "./foobar.cpp.html") と書いてあったように処理します。

Version 12.21
BoldFlushleft 環境を導入しました。

Version 12.20
tcTable 環境の簡易記法を導入しました。

簡易記法の環境の違い 表の最初の行の最初の記号
twTable 環境の簡易記法 +, =, -
tcTable 環境の簡易記法 +., =., -. の ように . (ピリオド) を付加

Version 12.19
補助の ruby スクリプトのファイル名を

  文書ファイルのファイル名 + ".rb"

とすることにしました。このバージョン以前は、

  文書ファイルのファイル名の基幹部分 + ".rb"

という名前にしていました。

Version 12.18
twTable 環境の簡易記法による表の背景色を $twbgclor によって指定できるようにしました。

Version 12.17
ThreedotsVquote, ThreedotsVquoteInlist 関数で、引数の line に半角空白文字が含まれている場合、それを $nbsp; に置き換えるようにしました。これにより、"半角空白文字4文字    がここにあります。" のように書くと、その半角空白文字列がそのままの個数で表示されるようになりました。

Version 12.16
引数の string に含まれる全角文字の個数を返す関数 NumOfFullWidthCharas(string) を定義しました。

これを使って、twTable 環境の簡易記法を更新しました。全角文字は、1文字で、12ドットの幅があること、半角文字は 8ドットの幅があることをちゃんと計算するようにしました。

Version 12.14
行頭から * が6個以上ある行は、アウトライン見出し行とは見なさないことにしました。

Version 12.13
@begin{code} ... @end{code} や @begin{vb} ... @end{vb} @begin{verbatim} ... @end{verbatim} で、オプション文字列に proglist を指定した場合に付加される行番号が通算されるようにしました。

オプション文字列に proglist を指定したときの行番号の初期値は、 $proglistnum に格納されています。
;;; @(%) $proglistnum = 0
のように書くと、番号をリセットできます。

例.

001: aaaaaaaaaa
002: bbbbb

003: cccc
004: dddddddddddddd

Version 12.12
@begin{code} ... @end{code} や @begin{vb} ... @end{vb} @begin{verbatim} ... @end{verbatim} で、オプション文字列に proglist を指定した場合、@end{code} や @end{verbatim} の前の前の行が空白行のときに、それを出力しないようにしました。

例.

@begin{code}{proglist} -----------------------------------
*/

aaaaaaaaaa
bbbbb

/*
@end{code} -----------------------------------------------

でつぎのように整形されるようになりました。

005: aaaaaaaaaa
006: bbbbb

Version 12.11
,,, 数式
,,,~ と ,,,. で囲む数式

の前後の行との空きを調整しました。margin の数値で、マイナスを指定できることを利用しました。

Version 12.10
ソーステキストファイルの拡張子が .rb でない場合、ソーステキストファイルのの補助の拡張子 .rb のファイルを読み込むことができるようにしました。ユーザは、個別のソーステキストファイルにだけ使う ruby 関数をその拡張子 .rb のファイルの中で定義しておいて、 四角で囲む のようにして利用できます。

Emcas関数 RubyDef を導入しました。ソーステキストファイルの中で、関数を定義できるようになりました。その関数を Ruby 関数の中で使用できます。

ユーザは独自の関数を定義し、利用できるようになったのでかなり画期的だと思っています。

Version 12.09
frame 環境で、横幅を指定できるようにしました。

Version 12.06
.~ と .. で囲むというのを徹底しました。

Version 12.04
$OPT_ACCEPTDUPLICATEDHEADER = trueと指定できるようにしました。

何も指定しなければ、$OPT_ACCEPTDUPLICATEDHEADER = falseとしたのと同じで、重複した見出しを検知すると、html 文書の最後に、重複した見出しがあったっことを指摘するメッセージが書き込まれます。

  $OPT_ACCEPTDUPLICATEDHEADER = true

とすると、重複があってもその旨を伝えるメッセージは書き込まれません。

Version 12.03
Ruby 関数を導入しました。

Version 12.02
行頭にカンマだけがある行で行を囲む記法、
行頭にピリオドだけがある行で行を囲む記法、
行頭にマイナス記号だけがあ る行で行を囲む記法
を廃止しました。

Version 12.01
書き換えプログラム o2h.rb に

require 'date'
$today = Date.today.to_s

を書き込みました。これで、日付に関する情報を o2h.rb で変換した html ファイルの中に書き込むことができるようになりました。

win-odr.odr の中の Eval 関数に関する説明を参照してください。

Version 11.21
(h ... /h), (Html ... /Html), (Code ... /Code) の構文の検査を強化しました。例えば、(Code というコードがあって、それに対応する /Code) がその後に出てこなければ、その旨のエラーメッセージを出すようにしました。

Version 11.20
標題付きリストの標題部分で、emacs 関数を使用できるようにしました。

emacs 関数の使用を抑止するには、Vb 関数を使用することになります。

Version 11.19
標題付きリストの標題部分の先頭に : を置くための仕様を導入しました。標題部分を :{:foo} のように中括弧 {} で囲むことにします。

Version 11.18
ぶら下げインデント環境を整備しました。

Version 11.17
文字列の色を簡単に指定できるように、Color 関数を導入しました。

Version 11.15
行頭に . を置いて、その後に半角空白を1個以上置いて、改行した場合、空白行が表示されるようにしました。

行頭に . を置いて、そこですぐ改行されるような行を書くには
. 
とします。

これで、つぎのように整形されます。

行頭に . を置いて、そこですぐ改行されるような行を書くには

とします。

Version 11.14
twTable 環境の簡易記法を使いながら、第2列に空白行を置くために、.. だけを置くを挿入することができるようにしました。twTable 環境の簡易記法 H4 を参照してください。

Version 11.13
xTable 環境の説明文を描くところで 強調文字列 のように書けるようにしました。

Version 11.12
見出し行の最後に、その見出し行を画面上端に移動するリンクを置くようにしました。リンクの位置には、 が表示されます。このをクリックすると、そのがある見出し行が画面上端に移動します。

(Prev "△") や (Next "▽") を置くことができるようにしました。

(Prev "△")は、その行がある位置を含む文章ブロックの見出し行が画面上端に移動します。

(Next "▽")は、その行がある位置を含む文章ブロックの次の文章ブロックの見出し行が画面上端に移動します。

Version 11.11
(Xv 画像ファイル名 width引数 height引数) の形に対応しました。

Version 11.10
あああああああああああああ
いいい

のように囲まれる環境で、環境を終わる前のファイルの最後に来たときに、エラーメッセージを出してきちんと終わるように整備しました(つもり)。

Version 11.08
Code 環境を追加しました。/^[==]+[ ]*\.$/ のような文字列を表示できます。

Version 11.05
twTable の簡易記法を変更しました。空白行が来ると、twTable 環境を終了するものと解釈するようにしました。そのため、データの中に空白行は入れることはできなくなりました。=> 後の版で対応策が組み込まれました。

Version 11.03
¥(h - q¥) のような表記に対応しました。

twTable 環境の仕様を少し変更しました。cellpadding を指定できるようにし、簡略記法の場合は、cellpadding を 2 にするようにしました。

Version 11.01
xhtml に移行しました。拡張子も .html で変わらないので、従来のバージョンと同じように使用できます。

Version 10.52
File 関数、Folder 関数が引数を 2個取る場合に対応しました。

第一引数に、ショートカットファイルを指定できるようにしました。

この対応のために、win32-shortcut.rb が必要になりました。このために、o2h.rb に

require 'rubygems'
require 'win32/shortcut'
include Win32

のような文を挿入しました。

  PS> gem install win32-shortcut

を実行して、ライブラリをインストールしました。

Version 10.46
$caption, $caponly, $endnote の簡易記法 H2 を導入しました。

Version 10.45
emacsfuncbase メソッドで、(Vb ... /Vb) という記法を導入しました。... の中では、htmlのタグや特殊記号が特別な意味を持たず、<> がそのままの形で表記されます。

Version 10.34
マーク付きリスト H1 で、マークとして、□、#、☆、★、※ を使えるようにしました。

Version 10.25
xTable 環境、subTable 環境で、$stkline によって、改行管理するようにしました。

Version 10.22
code 環境と verbatim 環境では、行末にアンダースコアを置いても、行が継続しないようにしました。 $undescoreContlinep 変数を導入して、これが true のときに行継続の仕組みが有効になるものとしました。 code 環境と verbatim 環境の中では、$undescoreContlinep = falseにします。

VBScript のコードを表示するときに困ったのでこのようにしました。

Version 10.20
(H "foo") や (N "bar") によって参照されたのに、対応する見出し行や注釈行が文書中に出て来なかったときに、整形結果の html ファイルの最後のところで、その旨を表示し、その参照位置にジャンプできるようにしました。

Version 10.14
Proc オブジェクトが使うようにしました。 emacsfuncbase メソッドの引数 func は、Proc オブジェクトです。内部で、func.call(..) の形で使われています。

Version 10.12
(Show 第一引数 第二引数) で第1引数で指定されるファイルが存在しないときに、エラーを報告するようにしました。

Version 10.11
Note List を表示するようにしました。

CONTENTS に、各アウトライン見出し行が、文書ファイルの何行目に出てくるかを表記するようにしました。

例えば、CONTENTS に

  1 概要 39

と表記された場合、"* 概要" と書いたアウトライン見出しが、文書ファイルの 39 行目に書いてあったことを示しています。

Version 10.09
見出しのリストを表示できるようにしました。

[allheadinglist]

を書きます。しかし、わざわざ、[allheadinglist] を書かなくても、整形された html 文書の最初の方に、ALL HEADING LIST として表示されます。

Version 10.06
class MinusMarkHeader (マイナス記号標題環境) のソースを変更しました。

従来は、table 環境を使って実装していましたが、ぶら下げインデント環境と同じ方法で実装するように変更しました。

行頭から ---- のように - を4つ書いて、その後に半角空白を1個入れて、文章を書く環境がより使いやすくなりました。

Version 10.01
JavaScript を使用して、CONTENTS メニューとTOP HEADING LIST を非表示にしたり表示したりできるようにしました。

Version 9.08
H 関数や N 関数で参照した位置に、右上に、何番目に参照したかを示す数字を表記するようにしました。

Version 9.07
xTable 環境を整理しました。cTable, tcTable, wTable, twTable 以外は廃止しました。

Version 9.06
xTable 環境で、区切り線は、- や = を5個以上書くというルールにしました。

Version 9.05
tcTable 環境、twTable 環境で、標題行、データ行の第1欄、第2欄のすべてで、左詰め、中央合わせ、右詰めを指定できるようにしました。

Version 9.03
verbatim (vb) 環境、code 環境で、オプション文字列で、

   linenum: 3

のように書くと、行番号を 3 から書き始めるようにしました。

Version 9.01.01
標題付き簡約リストを廃止しました。

wTable 環境 H5twTable 環境 H5を定義しました。

Version 8.01.21
code 環境、verbatim 環境、panel 環境、fpanel 環境、cTable 環境の前に、複数の空白行がある場合にそれを整形後に反映するようにしました。

Version 8.01.20
<a name=...> ...</a> と書いていたところを、 <a id=...> ... </a> に変更しました。<a name=...> ...</a> は古い書き方のようです。

Version 8.01.18
ぶら下げインデント環境の開始行の直前が空白行がない場合に、整形したときに、改行が入らないようにコードを変更しました。

Version 8.01.16
$endnote を書くところで、少し小さなフォントで書き出すようにしました。

@begin{endnote} ... @end{endnote} の範囲を $endnote に格納するようにしました。

Version 8.01.14
@begin{xxx} ... @end{xxx} の xxx のところに、半角空白を入れることはできないようにしました。もし、半角空白文字が含まれていると、エラーメッセージを表示して、html ファイルへの変換作業を中止します。

xxx のところに半角空白を含んだ @begin{xxx} ... @end{xxx} を使用したい場合は、@begin{xxx} や @end{xxx} の前に、". " や ";;; " を置くようにしてください。

Version 8.01.02
@begin{verbatim} ... @end{verbatim} H1 の仕様を変更しました。
@begin{code} ... @end{code} H2 の仕様を変更しました。
@begin{panel} ... @end{panel} H2 の仕様を変更しました。
@begin{fpanel} ... @end{fpanel} H1 の仕様を変更しました。

全体として、ODR での @begin, @end 記法 H1 について整理しました。

例えば、@begin{code ...} ... @end{code ...} のように書いていたものを、@begin{code}{...} ... @end{code} のようなスタイルに統一しました。

Version 8.01
cTable 環境 H6 を導入しました。定型的な表の作成を支援します。

Verston 8.00
ODR 文書を埋め込む方法を統一しました。

拡張子 .odr のファイル以外は、ODR 文書が始まる目印に、文字列 "== startdoc" を入れることにしました。

バッチ・ファイルなど、ブロックコメントの仕組みのないプログラムファイルに ODR 文書を埋め込む仕様も決めました。

ブロックコメントの仕組みのないプログラムファイルでは、== startdoc "::|" のように、ODR 文書を埋め込むコメント文の行頭の文字列を指定するようにしました。

Version 7.37.01
特殊環境のキャプションや注釈 H3 を表示する仕組みに、 $caponly を導入しました。$caption と同じように特殊環境のタイトルとして前に表示したいけれども、「見出し」として登録する必要が無いときは、$caption ではなくて、$caponly としてください。

Version 7.37.00
プログラムのソースファイルに ODR 文書を埋め込む H3 ことができるようにしました。

vb 環境、code 環境で、proglist の指定 H3 ができるようにしました。プログラムのソースコードを格納したファイルで使用します。

vb 環境、code 環境で、 行番号を付加 H1 できるようにしました。

Version 7.36.08
セミコロン3個に続く文字列による指定 H1 を明確にしました。

空白行の処理の仕方を見直しました。アウトライン見出し(*印で始まる行) を表示した直後は、余分な空白行が取られないようにしました。

Version 7.36.00
ODR ファイルの拡張子 H2 を .odr と決めました。
Show 関数 H2 を導入しました。

Version 7.35.00
アウトライン見出しの星の数の辻褄をチェックする H1 機能を追加しました。
Anchor 関数 H3 を導入しました。

Version 7.34
特殊環境のキャプション $caption による拡張見出し H3見出し H7の一つとして処理するようにしました。これにより、コンピュータプログラムのコードを参照するリンクを簡単に登録できるようになりました。

Version 7.33
verbatim (vb), code, panel, fpanel の4つの環境に、前置文字列の仕組みを導入しました。
特殊環境に前置文字列を置く H1 を参照してください。

Version 7.30
Head 関数 H4 を導入しました。Version 7.29 では、Anchor 関数という名前にしていましたが、それは、html 文書の仕組みに基づいた名前の付け方で、拡張見出しをそこに置くという役割をするということが分かりやすい Head という名前に変更しました。

Head 関数 H5 を利用して、数式を参照することもできます。 数式を書く H5 に書いている例を参照してください。

Version 7.28
注釈 H4Emacs から Xyzzy へ N3 のように他の部分を参照する文字列を書いて、実際に、その参照先に対応する文字列が書かれなかったときは、その旨を、生成する html 文書の最後に書き出すようにしました。

Version 7.27
N 関数、Note 関数を導入して、注釈文を書く方法を簡単にしました。

注釈 H5の章をまず見るのがよいでしょう。「注釈」の章にある「Referred at:」のあとにある [1][2] などのリンクをクリックしてみて下さい。

注釈を書くためには、注釈と注釈の引用リンクを作成する H1N 関数 H4, Note 関数 H4 を参照してください。

また、見出し行へのリンクを作成するための関数 H 関数を作成しました。これにより、下位レベルの Ref 関数、Label 関数を直接使わずにすむことが多くなりました。.. H 関数 H5を参照して下さい。

Version 7.26
[childrenlist] 記法を導入しました(小さな目次を埋め込む H1 を参照)。 [childrenlist] と書いた行に、子供のレベルの見出しのリストが挿入されます。
特殊環境 H3 の項目に、[childrenlist] を記述している例があります。そちらを参照してください。

同様に、行頭から [parentlist] と書くと、* が一つの見出しのリストが挿入されます。

本文部分の見出し周辺のボタンを充実しました。

[Contents][Previous]{Next]{SameLevelPrevious][Child][SameLevelNext][Parent]

などのボタンを配置しました。

Version 7.24
@begin{code} ... @end{code} H3 を改良しました。枠の書式を指定できるようにしました。solid, dashed, dotted, double を指定できます。

Version 7.23
frame 環境 H2 を改良しました。

これまでは、frame 環境は、他の文書環境の「詰め込まれる箇所」に置く必要があり、いきなり字下げした位置に置くことはできませんでした。そのため、いきなり字下げした位置に frame 環境を置かずに、 その前に、引用環境を開始する : (コロン) を置く必要がありました。

Version 7.23 で、いきなり字下げした位置に frame 環境が置かれると、その字下げ位置で、自動的に引用環境が開始され、そこで frame 環境が開始されるようにしました。

Version 7.22
マーク付き標題環境 H2 を導入しました。

Version 7.21
背景色やフォントの色のデフォールトの指定、一時的な指定の仕組みを整理しました。

Version 7.19
[2016-02-05 ]カンマやダッシュで始める環境で、環境の区切りが分かりやすくするために

,,,~ /beige/ ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
static void Main()
{
  Console.WriteLine("Hello World!");
}
,,,. ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

のように書くことができるようにしました。

static void Main()
{
  Console.WriteLine("Hello World!");
}

これに対して、. (ピリオド) で始まる環境では、このような記法を導入しないことにします。
ピリオドで始まる記法は、範囲指定ではなく、単独で使うことが多いからです。

Version 7.18
[2016-02-01] 色の指定で、背景色の指定のところに、カンマと文字色の指定を続けることができるようにしました。

: /beige, crimson/
このように背景色を beige に指定すると同時に、フォントの色を 
crimson に指定することができるようにしました。
. :

このように背景色を beige に指定すると同時に、フォントの色を crimson に指定することができるようにしました。

Version 7.17
[2016-01-29] 行頭からコロンを3個書いて書いた文字列は標題つきリストの標題部分と解釈されるようにしました。

少し大きい文字でゴシックで

これで、少し大きい文字でゴシックで表示されます。

Version 7.16
[2016-01-24] 目次の表示をしないようにするためのオプション $OPT_NOCONTENTS を導入しました。

文書の冒頭に、行頭から ;;; $OPT_NOCONTENTS = true と書くと、目次を作成しません。

Version 7.15
[2016-01-21] 標題付きリスト環境で、説明文の書き出し位置を標題部分の書き出し位置と同じにした場合に、説明文の終わり位置を .:: で指定できるようにしました。

また、引用環境の終わり位置を . : で指定できるようにしました。

番号付きリストやマーク付きリストの本文の直後に、/色の名前/ を付加する形で背景色を指定するとうまく整形されないことがありましたが、できるようにしました。

Version 7.14
[2016-01-18] @begin{verbatim} ... @end{verbatim} を @begin{vb} ... @end{vb} と書くことができるようにしました。

Version 7.13
本文部分に、[Contents] というボタンを配置していましたが、これに加え、[Previous]、[Next] ボタンも表示するようにしました。

Version 7.12
ブロックのキャプションをブロックの下に表示できるようにしました。

;;; @(%) $endnote = "foo"
@begin{bar} ----------------------------------------------
aaaaaaaaaaaaa
@end{bar} ------------------------------------------------

のように書くと、

aaaaaaaaaaaaa
foo

のように、endnote 変数に定義した文字列が直後に表示されます。

Version 7.11
ブロックのキャプションを表示できるようにしました。

@begin{foobar} -------------------------------------------
aaaaaaaaaaaaa
@end{foobar} ---------------------------------------------

のように書くと、

;;; @(%) $caption = "foobar"
@begin{code} ---------------------------------------------
aaaaaaaaaaaaa
@end{code} -----------------------------------------------

と書いたように処理されます。結果は、つぎのように整形されます。

foobar
aaaaaaaaaaaaa

ブロックのキャプションは、@begin{xxx} ... @end{xxx} の xxx の部分で指定する方式は良くない。長いキャプションが書けないという大きな欠点があります。それで、$caption を使う方式を導入しました。

Version 7.03
本文の行間を少し空けるために、html 文書の最初に、

<style type="text/css">
body { line-height: 140% }
</style>

と書き出すことにしました。

Version 7.01
原文の空白行が整形したときにできるだけそのまま表示されるようにするという方針で、プログラムを書き換えました。原文で2行の空白行があれば、整形したときも2行の空白が表示されるようにしました(※)。

例えば、この上の2行が整形したときにも2行の空白行になっているはずです。

※ 場所によってここに書いているようにはならない(複数行の空白行が1個の空白行にまとめられてしまう)ことがあります。引き続き、原文の空白行の個数が整形後に反映されるように改善していきます。

行頭に ... を置いて書いた行は、(*強調文字*) や ((大きい文字)) の置き換えをしないようにしました。文中に draw((0,0)--(60,30)) のような文字列を書きたいことがあって困ったので、このような記法を導入しました。 置き換え処理 の項を参照してください。

Version 6.16
@begin{foo} ... @end{foo} H1 のように、未定義の begin ... end 環境が現れたら、 @begin{code} ... @end{code} と書かれていたものとし、 foo をキャプションとして、その前に表示するようにしました。

Version 6.14
マイナス記号標題環境 H1 のマイナス記号を - を4個並べて表していたところを、html 文書に変換したとき、連続した実線で表されるように変更しました。

&lt; や &gt; のような記号が書かれたときに、そのまま表示するようにしました(本来、そうあるべきですが、そうなっていなかったので、プログラムを修正しました)。 (h &lt;a&gt; /h) のように html コードの中に書いたときには、 <a> のように表示されます。

Version 6.13
標題付きリストの説明文の書き出し桁位置は、標題の書き出し位置と同じ桁位置でもよいようにプログラムを変更しました。

(Html ... /Html) の最初と最後が同一の行になくても、ちゃんと解析して、書き出せるようにしました。例えば、 このように部分的に色づけする範囲を指定するコードを書くと、大抵の場合、複数行に渡ってコードを記述する必要があります。 それができるようになりました。

Version 6.12
色調を白黒、灰色に変更しました。背景色や枠線の色などの色調を白黒、灰色に変更しました。
ヘッダ部分で、スタイルを指定しないようにしました。
オプション --nosection を廃止し、オプション --noheader を追加しました。 --noheader を指定したときには、ヘッダ部分を書き出さないようにしました。また、--noheader を指定したときは、見出しの前に、1.2 見出し のように番号を付加するのをやめ、単に、見出しと表示するようにしました。--noheader を指定しない場合は、1.2 見出しのように表示します。

Version 6.10
「行を継続する」、「字下げ量の継続」の仕組みを導入しました。
@begin{panel} ... @end{panel} H3 で背景色を指定できるようにしました。
@begin{fpanel} ... @end{fpanel} H2 で背景色を指定できるようにしました。
frame 環境 H3 で背景色を指定できるようにしました。
@begin{code} ... @end{code} で背景色を指定できるようにしました。

Version 6.04
frame 環境 H4 の仕組みを導入しました。

 

[CTop] [Contents][TopHdngList][Prev][][Next][SameLvlPrev][Child][SameLvlNext][Parent][Top][End]

19 注釈

Referred at: [H1][H2][H3][H4][H5]

注釈と注釈の引用リンクを作成する H2を参照してください。

[Emacs から Xyzzy へ] 引用箇所: [N1][N2][N3]
cbar は、最近は、xyzzy を主として使用していて、emacs ではなくて、xyzzy で ODR 文書を編集しています。emacs の outline mode は、xyzzy には移植されていませんが、xyzzy には、outline-tree というすばらしいモードがあります。

[DotFlushleft 環境]
cbar が作成した o2h.rb の中では、この左詰め環境を DotFlashleft 環境と呼んでいます。

[行頭]
ODR で「行頭」とは、ODR 文書の中で、詰め込み処理をするところのインデントの位置を意味します。

このようにコロンを置いてその後に半角スペースを1個置いて書きだした文章では、コロンの字下げ位置が「行頭」の位置として扱われます。

 

Produced by the use of o2h version 13.06.
[CTop] [Top] [Prev] [Body] [BodyStart] .