address Logo

tt 文書の文法 ( ver.3.1/3.2 )

Contents

valid-html401

tt の処理プロセッサ ptt は W3C
Valid HTML 4.01 Transitional
として認定される HTML ドキュメントを生成します。

under-construction工事中

2007/10/16 更新
2007/10/02 改訂(ver.3.1)
2007/09/23 改訂(ver.3.0)
2005/07/15 更新

この頁は tt 形式のファイルを変換して作成されています。もとの tt 形式のファイル

一般規則

HTML 属性

tt タグの中には、そのタグが使用している HTML タグの属性が指定できるものがあります。それらの形式は

	属性名="値" 属性名="値" ...

のようなものです。「値」の中には空白を入れてはなりません。クラスの指定は一番左に書いて下さい。また、クラスに関しては簡単に値だけで指定できます。指定できるクラスはスタイルシートで定義されています。例えば画像であれば

I: cat.jpg width="400"

のように表示幅を指定できます。

値は必ず二重引用符で囲みます。どのような属性が指定できるかはタグ毎に異なります。広く使えるのはスタイルを示す style 、配置を示す align、表示幅を示す width です。スタイルシートでクラスが定義されていれば class も使えます。

スタイルに関する情報を HTML 属性で指定するのは可能ならば避けるのが好ましく、一般的な好みはスタイルシートを使用するのが良いでしょう。

表題

HTML の h1, h2, h3, h4 に対応して、以下のタグが定義されています。

	H1	H2	H3	H4

H1:” タグは必須です。 “H1:” に続く文字列はページのタイトルとして大きな文字で表示されるばかりではなく、ウィンドウの名前としてウィンドウの上部に表示されます。

目次は表題を基に自動的に作成されます。但し

H1:” のオプション

	H1: [-lteq] 表題

ここに [   ] の中はオプションです。

なお、このページは “-eq” オプションで作成されています。二重引用符の見え方はブラウザとフォントに依存しています。ブラウザで日本語文字フォントが指定されている場合には、“ と ” は(まるで全角文字フォントで代用したかのように)大きな空白が発生する場合があります。(Mac の場合、Safari や Opera は奇麗な二重引用符を表示しますが Camino や Firefox はダメです。それから Windows の場合 IE7.0 の二重引用符はため息が出る程ひどい!)

追記: 変な事(嫌な事)を見つけました。 “<html lang="en">” が指定されている時には二重引用符が Camino や Firefox でも奇麗に表示されるのです。このページは lang 属性を “en” にしてありますが、日本語の文字には問題はありません。(文字コードが指定されているからね...) でも検索エンジンで英語のページに分類されるかも知れません。

リスト

リストのタグ

リストの表現には以下の3つのタグが準備されています。

UL:
番号づけないリスト
OL:
番号を付けるリスト
DL:
定義付けリスト

リストの項目は “- ” で開始します。すなわちマイナス記号で行を開始し、空白を1つ以上続けます。
UL:” は省略できます。従って番号づけない項目は単に

- 項目1
- 項目2
-

のように、マイナス記号の後に空白文字を入れて行を開始します。
定義付けリストは

DL:
- 名前1
名前1の説明
- 名前2
名前2の説明
-

のように書きます。

リスト項目の終了

リストの項目の終了は空行あるいは “-” だけの行、あるいはヘッダタグによって示されます。

筆者の経験ではリスト項目の終了は常に “-” で示すよう習慣づけた方が良い。

リストの “-a” あるいは “+a” オブション

リストに対して

	-a

あるいは

	+a

のオプションがある場合には最初のフィールドはリンクであると見なされます。すなわちこの場合には項目は

UL:-a
- パス1       説明文1
- パス2       説明文2
-

のように書きます。ここにバスとは「説明文」をクリックしたときに表示されるファイルへのパスです。パスは表示されません。パスを表示させるには

	UL: +a

の指示を使います。

画像

画像の取り込みは “I:” タグまたは “II:” タグを使って行われます。

一つの画像

一つの画像の取り込みは

I: cat.jpg

のように書きます。この結果は

cat

のようになります。

パスに続けて表示の大きさを指定することもできます(注)。例えば

	I: cat.jpg width=400

とすれば、横幅 400 ピクセルで表示します。

注意: 表示の大きさを指定した場合には IE 6.0 は、正しく印刷してくれないようです。表示だけなら問題はありません。

画像はセンター配置です。画像に続けて画像の説明を書く事が多いでしょう。その場合には C: タグあるいは CC: タグを使ってセンター配置で説明するとよいでしょう。

一般的な形式は

	I: 画像ファイル [表示サイズ] [その他のオプション]

画像配列

複数の画像を並べるには

II: 終了文字列 [オプション0]
表題1 画像ファイル1     [オプション1]
表題2 画像ファイル2     [オプション2]
...
終了文字列

画像配列はテーブルを用いて実現しています。

「オプション0」はテーブル全体に関するオプション(テーブル属性)で、実際には

	width="90%"

のように、行幅に対する画像配列の幅を “%” で指定するのが唯一の使い方だろうと思われます。このオプションを省略すると、画像が1個の場合には 60% 、複数の場合には 90% が仮定されます。

「オプション1」、「オプション2」... はテーブルの個々の要素に対するオプションで、やはり実際には

	width="30%"

のように、個々の画像幅の占める割合を “%” で指定するのが唯一の使い方だろうと思われます。 これらを省略すると均等分割として扱われます。

例えば

II:!
リリー lily.jpg
アイリス irise.jpg
ポーチェラカ portyeraka.jpg
!

で次のようになります。

lily.jpg irise.jpg portyeraka.jpg
リリー アイリス ポーチェラカ
注意:

IE6.0, IE7.0 では正しく表示されない。多分 IE5.0 も同様であろう。
IE には問題が多すぎる!

Win系 では Opera, Firefox は正しく表示される。
OSX では Safari, Firefox, Opera も OK

(2007/02/09)

理想的には画像の高さで自動調整してくれた方が良いのですが、HTML の仕様のなかにはそれを可能にするものは見当たりません。

クリックすれば別頁に大きく表示される。
なお、この写真のポーチェラカは変わり花である。

画像配列にはテーブルが使用されており、オプションは table の td タグに与える HTML の属性を指定できる。
例えば

II:!
リリー lily.jpg width="30%"
アイリス irise.jpg  width="40%"
ポーチェラカ portyeraka.jpg width="20%"
!

lily.jpg irise.jpg portyeraka.jpg
リリー アイリス ポーチェラカ

となる。合計 100% になっている必要は無い。

表題に空白文字が含まれる場合には '(引用符) または “(二重引用符) で囲む。

テーブル

簡単な例

初等的ではあるが、ありふれたテーブルから解説します。例えば

名前 年齢 性別
alice 16
bob 20

を表示するには

Ta:
名前 年齢 性別
alice 16 女
bob 20 男

と書きます。テーブルの終了は空行で示されています。

この例では、テーブルはマトリックス形で、どのデータにも空白文字が含まれていません。最初の行は、項目の説明欄で太字になっています。各行の最初の項目は、行の説明で、やはり太字で表示されています。

上の例では空白文字がデータを区切っていました。それではデータに空白が含まれる場合にはどのように書けばよいのか。誰でも考える事でしょうが、データを区切る文字(区切り文字)を指定できれば解決できます。区切り文字を “|” として指定するには

Ta: |
名前 | 年齢 | 性別
alice | 16 | 女
bob | 20 | 男

のように、 “Ta:” に続いて “|” を書きます。

形式

テーブルの表現は単純形、すなわち、碁盤の目のような形のものを基礎にしています。tt 形式での記述は

Ta: 区切り記号  属性
Ca: テーブルの説明
項目名:書式        項目名:書式  項目名:書式
行説明  区切り記号      データ  区切り記号      データ
行説明  区切り記号      データ  区切り記号      データ

のようなものです。
区切り記号は項目名やデータを区切る記号で1文字で示します。省略すると空白文字が区切り記号として使用されます。「属性」には HTMLの table タグの属性を

HTML のテーブル属性の例
属性名 値の例
align right left center
width 40%

などで

	Ta: align="right"

のように指定します。詳しくは HTML に関する解説書を見てください。

項目名が全て省略された場合には、その行は表示されません。例えば

Ta: |
 |  | 
alice | 16 | 女
bob | 20 | 男

と書くと

alice 16
bob 20

となります。また項目の書式で “-” を指定するとその列は表示されません。例えば

Ta: |
 :- |  | 
alice | 16 | 女
bob | 20 | 男

と書くと

16
20

となります。

項目名の省略

一部の項目名が省略された場合には、その前の項目名が使用されます。例えば

Ta: |
:- | 2000 | | | 2010 | |
   | <b>名前</b> | <b>年齢</b> | <b>性別</b> | <b>名前</b> | <b>年齢</b> | <b>性別</b>
   | <b>alice</b> | 16 | 女 | <b>alice</b> | 26 | 女
   | <b>bob</b> | 20 | 男 | <b>bob</b> | 30 | 男

2000 2010
名前 年齢 性別 名前 年齢 性別
alice 16 alice 26
bob 20 bob 30

となります。

この表をグローバルな視点で見ると、表の中に表が埋め込まれていると解釈できます。そのような見方からこの表を構成することもできます。後の「長い文字列定義」を参照して下さい。

書式

項目の書式は次のように指定できます。

項目名:<表示幅 データを左寄せで配置します
項目名:>表示幅 データを右寄せで配置します
項目名:表示幅 データを中央に配置します
項目名:-表示幅 この項目の列は捨てられます(データを隠すのに便利です)

ここに書いた書式の説明には実はテーブルが使用されており、このテーブルは次のように記述されています。

Ta: | noborder width="70%" align="center"
  :<150 | :<70%
項目名: < 表示幅 | データを左寄せで配置します
項目名: > 表示幅 | データを右寄せで配置します
項目名:表示幅 | データを中央に配置します
項目名:-表示幅 | この項目の列は捨てられます(データを隠すのに便利です)
注意

ブロック

センター配置

行単位でセンター配置を指定する時の構文は

C: 文

です。
複数の行を纏めてセンター配置を指定する時の構文は

CC: 終了文字列
文1
文2
...
終了文字列

です。

プログラムコード

プログラムコードを示すには、タブで書き始める方法の他に、

P: 終了文字列 [tab=n]
プログラムの内容
終了文字列

の形式を使用できます。この形式を使用すると、書かれた文字がそのまま表示され、背景に色が付けられます。(実現にはテーブルが使用されています)

タブサイズはオプションとして指定できます。省略されれば tab=8 が使用されます。

例えば次の C のプログラムコードを表示するには

#include <stdio.h>
main(){
        printf("OK\n");
}

tt 形式では

P:!
#include <stdio.h>
main(){
        printf("OK\n");
}
!

と書きます。(プログラムをそのまま Cut&Paste で持ってこれる事に注目しましょう)

注釈

注釈は
注釈の内容は右にインデントされて表示されます。例えば次のようにです。

これは長い注釈の例です。長い注釈の中では

なども扱えます。例えば次の画像は長い注釈の中で扱われています。

under-construction

でもこれはまだ新しい機能なので殆どディバッグされていません。

短い注釈

文や単語に注釈を1行で付けたい場合には

	N: 注釈

の形式で表します。

長い注釈

文や単語に注釈を付けたい場合には

	NN: 終了文字列
	注釈
	終了文字列

の形式で表します。

注釈は終了文字列またはヘッダによって終了します。


長い注釈には水平線によって視覚的な効果を持たせることができます。


これは次のように書かれています。

NN:!
<hr>
長い注釈には水平線によって視覚的な効果を持たせることができます。
<hr>
!

引用

引用には HTML の blockquote が使用されています。

短い引用

「短い引用」とは1行からなる引用文です。

	Q: 引用

長い引用

2行以上の引用は

	QQ: 終了文字列
	引用
	...
	終了文字列

と書きます。

コメント

コメント」の部分は翻訳された HTML の文書の中には現れません。プログラミング言語におけるコメントのような機能を果たします。

短いコメント

tt 形式の文書の中にコメントを1行で書きたいときには

	#: コメント

の形式で入れることができます。

長いコメント

tt 形式の文書の中にコメントを何行にも渡って書きたいときには

	##: 終了文字列
	コメント
	終了文字列

の形式で入れることができます。

純粋 HTML モード

tt の加工を受けない純粋な HTML のモードに移行できます。そのためには

!: nantarakantara
この間の文は純粋な HTML の文書として扱われる
nantarakantara

のように、

	!: 終了文字列

で純粋 HTML モードを終了させる文字列を定義します。

僕の終了文字列の好みは単に「!」。びっくりマークだけの文など滅多に現れないからね。

このモードは古い HTML 文書を処理するのに特に便利ですね。

注釈: 言語設計の問題: 純粋 HTML モードも、他のブロックモードと同様に “!” と “!!” を定義した方が良かったと思いますね。結果的には「統一性」を破ってしまいました。

Ptt 3.2 では純粋 HTML モードのニーズは殆ど無くなりました。現在では保険的な機能になっています。

文字列定義

単純な定義

短い定義

	D: 文字列 定義

の形式で、文字列が定義でます。ここで定義された文字列は定義で置き換えられます。例えば

D: {    <code>
D: }    </code>

となっていると、文中の

	{sample.txt}

	<code>sample.txt</code>

に変換されます。この例では文字列は1文字で構成されていますが、複数個の文字で構成しても構いません。

長い定義

定義に必要な行が複数に渡る場合には “DD” を使えます。

	DD: 文字列 終了文字列
	定義の内容
	...
	終了文字列

この定義の内容を tt の規則に従って変換したい場合には “DD+:” が使えますが、あまり推奨はしません。


注意: Ptt ver.3.0 から仕様が変更されています。ver.3.0 の “DD:” は ver.3.1 では “DD+:” の意味です。


DD+:” はテーブルの中に複雑な内容、例えばテーブルを書きたい場合などに役に立ちます。

2000 2010
名前 年齢 性別
alice 16 female
bob 20 male
名前 年齢 性別
alice 26 female
bob 30 male

これは次のように書いています。

DD+: $1 !
Ta: noframe
名前 年齢 性別
alice 16 female
bob   20 male

!

DD+: $2 !
Ta: noframe
名前 年齢 性別
alice 26 female
bob   30 male

!

Ta: nopad align="center"
:-   2000 2010
-   $1 $2
     

空行はテーブル記述の終了を表しており、 “DD+:” の中でも必要です。ここで “noframe” と言うのは、外枠の無いテーブルです。この場合には次のようになっています。

名前 年齢 性別
alice 16 female
bob 20 male

これをテーブルに埋め込む場合には、padding されていると、罫線が繋がりません。 “nopad” は padding なしのテーブルのクラスです。 “nopad” も “noframe” もスタイルシートで定義されています。

Ptt 3.1 では、複雑なテーブルの構成を、「テーブル要素の中へのテーブルの埋め込み」によって解決しています。

定義の取り消し

	D: 文字列

または

	DD: 文字列

によって「文字列」の定義を取り消します。

考察

DD+:” の使用は屢々 HTML の正しい記述スタイルから外れる原因を作ります。これは HTML のパラグラフの考え方が、我々の日常的な感覚と外れていることと関係があります。例えば Ptt は

<div>
alice
X
bob
</div>

に出会った時に、 “alice” から “bob” までを一つのパラグラフと見なして、正しく

<div>
<p>
alice
<br>X
<br>bob
</p>
</div>

を吐き出します。しかし “X” が

DD+: X !
Q: carol
!

と定義されている場合にも同様に一つのパラグラフと見なして

<div>
<p>
alice
<br><blockquote>carol</blockquote>
<br>bob
</p>
</div>

となりますが、これは HTML の正しい規則から外れます。HTML では “<p>” と “</p>” の間にブロックタグを入れてはならないからです*。この問題の解決は非常に難しい問題で、また解決する価値があるかどうかもはっきりしません。(僕には禁止する理由もよく分からない!)

注*: http://www.w3.org/TR/html401/struct/text.html#h-9.3

正規表現による定義

Ptt ver.3.1 では正規表現による変換を次のようにサポートしました。

	RD: 正規表現 置換文字列

によって正規表現のパターンマッチングに従って置換が行われます。正規表現や置換文字列に空白が含まれる時にだけ、引用符(' または ")で囲みます。

取り消しは

	RD: 正規表現

です。正規表現については Python のマニュアルを参照して下さい。

その他

スタイルシート

特に指定しなければドキュメントルートの

	style.css

が使用されます。この置き場所は各自の事情があるので ptt のソースコードを変更してください。

外部スタイルシート

	S: スタイルファイル

インラインスタイルシート

	SS: 終了文字列
	スタイル定義
	...
	終了文字列

テーブルのスタイル

Ptt ver.3.1 で使用されている新しいスタイルシートではテーブルの罫線スタイルが指定されており、その場合には HTML のテーブルタグの罫線の指定

	<table border="0">

が無効になります。従って罫線を除去するためにテーブルタグ “Ta:” で “border=0” と指定しても効果はありません。新しいスタイルシートではテーブルのクラス “noborder” が定義されているので、罫線の無いテーブルを作る時には “noborder” を指定して下さい。

実験的にスタイルシートの効果を確認したい場合があると思います。その場合には “S:” または “SS:” を使います。これらは “H1:” の前に書きます。

Body タグの中でのオプション

次の形式で与えます。

	BO: オプション

この結果は

	<body オプション>

となります。このタグは “H1:” タグの前に書きます。

リンク

tt 形式は任意の HTML タグを文章中で使用できるのでリンクの扱いは HTML と同じに行えますが、リストの “-a” や “+a” オプションのように簡略化された方法はとても便利です。リストの外でも同様に

-a: パス      説明文

あるいは

+a: パス      説明文

の形式を使用でできます。 “-a” の場合にはパスは表示されませんが、 “+a” の場合にはパスは表示されます。

感想: この仕様は蛇足であった。そのうちに廃止されるかも知れない。

ルーラー(水平線)

	HR: 属性

でルーラを表します。
属性には hr タグの属性を指定します。特に指定しなければ


ですが、例えば

HR: size="10" width="50%" align="right"


となります。

hr タグの color 属性は HTML 4.0 ではサポートされていません。目立たさせるために color を使いたくなることもありますが、これを理解しないブラウザが存在する事を自覚しておいて下さい。

反省: “HR:” は蛇足だったかも知れない。 “<hr>” と書けば良いのだから... これも “<div>” と同じ処理をすればよいだけだ。

リファレンスインデックス

参考文献のリストと引用

LaTeX でお馴染みの、参考文献の番号の自動割当です。

リファレンスリストは

	<bib{キー}> 引用文献

の形式で書きます。リスト形式にはしません。ptt が自動的に文献番号を振ります。

本文の中では

	本文<cite{キー}>本文

のように本文に埋め込みます。

出来上がりの具体例は
http://plan9.aichi-u.ac.jp/rit/rit-1.4.html
を見て下さい。これの基になった tt ファイルは
http://plan9.aichi-u.ac.jp/rit/rit-1.4.tt
です。このケースでは “html2tex” を使って rit-1.4.html を LaTeX に自動翻訳できるように rit.1.4.tt が書かれているため、幾分複雑になっています。

ラベルと引用

リストの labelref に相当する Ptt 3.2 の仕様です。

LaTex Ptt
\label{foo} <lab{foo}>
\ref{foo} #ref{foo}

ここに “foo” は任意のラベル名である。また “<lab{foo}>” は H2:, H3:, H4: の直後の行に置きます。

例えば

...
look <a href="#ref{abc}>ABC</a>
...
H2: ABC
<lab{abc}>
...

の様に書きます。ラベル名(ここでは “abc” の中に空白文字は使えません。

考察

Ptt の記法を LaTex の記法と同じにしなかったのは html2tex のようなツールとの関係である。

rit 対応

先頭行が

	#!/

で始まる場合にはプログラムが埋め込まれると仮定されます。その場合にはプログラムコードは

	${
	プログラムコード
	}$

の形式で挿入されるとして rit に適した形式で処理します。これは筆者のサーバ向けの仕様です。

漢字空白

漢字空白に対して警告メッセージが表示されます。意識的に漢字空白を使用したのであれば、この警告メッセージは無視して構いません。

補足

タグのまとめ

以下の表の中で

タグ表
タグ 意味 形式 作用範囲
H1: 表題
(H2:,H3:,…,も同様)
H1:[-lte] 文字列 行末まで
BO: body オプション BO: オプション 行末まで
S: スタイルシート S: URL 行末まで
SS: インラインスタイルシート SS: 終了文字列
スタイル
終了文字列
終了文字列まで
UL: 番号なしリスト
(省略可能)
UL:[-a][+a]
- 説明
- 説明
空行まで
OL: 番号付けリスト OL:[-a][+a]
- 説明
- 説明
空行まで
DL: 定義リスト DL:[-a][+a]
- 説明
- 説明
空行まで
-a: パスにリンクを張り隠す -a: パス 文字列 行末まで
+a: パスにリンクを張り隠さない +a: パス 文字列 行末まで
C: センター配置 C: 文字列 行末まで
CC: 複数行にわたるセンター配置 CC: 終了文字列
テキスト
終了文字列
終了文字列まで
I: 画像 I:パス [サイズ [属性]] 行末まで
II: 画像の配列 II: 終了文字列 [属性]
表題 画像ファイル [属性]
...
終了文字列
終了文字列まで
HR: ルーラ HR: [属性] 行末まで
Ta: テーブル Ta:[記号] [属性]
[C:文字列]
文字列[:書式] [記号] 文字列[:書式] [記号] …
文字列 [記号] 文字列 [記号] …
空行まで
Ca: キャプション
Ta:の直後に使用する
Ca:文字列 行末まで
P: プログラムコード P:終了文字列 [tab=n]
プログラムコード
終了文字列
終了文字列まで
N: 短い注釈 N:注釈 行末まで
NN: 長い注釈 NN:終了文字例 [属性]
注釈
...
終了文字列
終了文字列まで
Q: 短い引用 Q:引用 行末まで
QQ: 長い引用 QQ:終了文字例 [属性]
引用
...
終了文字列
終了文字列まで
#: コメント #:文字列 行末まで
##: 長いコメント ##:終了文字例
コメント
終了文字列
終了文字列まで
D: 文字列定義
文字列1を文字列2で置き換える
D: 文字列1 文字列2 行末まで
DD:
DD+:
文字列定義
文字列を文字列ブロックで置き換える
DD: 文字列 終了文字列
文字列ブロック
終了文字列
終了文字列まで
RD: 正規表現による置換 RD: 正規表現 置換文字列 行末まで
!: 純粋HTMLモード !:終了文字列
HTMLコード
終了文字列
終了文字列まで

制限事項

注* 多重のリストを作成しようと思えば “DD+:” を使って作成できますが、推奨しません。

知られたバグ

擬似二重引用符の自動変換アルゴリズムは次の考察に依存しています。

  1. コードやデータを記述するエリアは変換しない
  2. タグの中の二重引用符は変換しない
  3. 左の二重引用符と右の二重引用符は対になって現れる
  4. 左の二重引用符は、行の先頭、あるいはその前が空白
  5. 右の二重引用符は、行末、あるいはその次が空白または “,.;:!?” の中の文字のいずれか

日本語の文書の中では「。」、「、」などの文字に関するルールをさらに追加すべきですが、今の所それを行っていません。特に “、” や “。” に続く二重引用符には注意して下さい。