Skip to the content.

ドキュメンテーション

English | 日本語 | Changelog

目次

  1. 基本的な使い方
  2. 記法の一覧
  3. ツリーの方向
  4. Tidy レイアウト
  5. RTL 文字体系のための鏡像レイアウト
  6. フォント
  7. テキストの描画
    1. フォント・スタイル
    2. テキスト装飾
    3. 上付き文字と下付き文字
  8. スペースと改行
    1. ラベル内のスペース
    2. 終端の高さを揃える
    3. 改行
  9. テキスト以外の要素の描画
    1. スモールキャピタル
    2. ボックス・サークル・水平線・矢印
    3. 水平線
  10. コネクター
  11. リーフを囲む括弧と矩形の描画
  12. ノードごとの色指定
  13. シアー
  14. 領域シェード
  15. 一部の文字を表示するためのエスケープ
  16. 素性構造
    1. 桁揃え
    2. 行列の入れ子
    3. ハイフン
  17. 導出図
  18. ノードからノードへのパスの描画
  19. ノードからノードへの追加的なコネクターの描画
  20. Penn Treebank形式
  21. 自分の環境で動かす(上級者向け)
    1. 好みのフォントを使う
    2. 描画せずに入力を検査する
    3. 記法リファレンス
    4. 標準入力のサポート
    5. 設定ファイル
    6. プログラムからテキストをエスケープする
    7. TikZ出力

基本的な使い方

エディターエリアにラベル付き括弧表記でテキストを入力し,Draw PNGまたはDraw SVGボタンをクリックします.

樹形図のすべてのブランチ(枝)やリーフ(葉)は,ノード(節点)に属します.ノードを作成するには,ラベルテキストを開始括弧の直後に配置します.ブランチは,空白で区切っていくつでも設定できます.リーフのテキストに1つ以上の空白が含まれているとき,空白はそのまま表示されます.ノードのラベルに空白を含めたいときには <> 記号を使って表します.例えば Modal<>Aux とすれば Modal Aux と表示されます.

ノードとリーフの間に何を描くかは コネクタ形状leafstyle,CLI では --leafstyle)オプションで選びます.3種の設定についてはコネクターを参照してください.どれを選んだ場合も,コネクタを隠す オプションをオンにすればコネクターを非表示(透明)にできます.

ノードを表すテキストやリーフを表すテキストの中で改行を行たい場合,改行文字 \n を用いることができます(\の後にスペースまたは改行でも可).

RSyntaxTreeではPNG形式またはSVG形式で画像を生成します.どちらもMicrosoft Wordで作った書類などに貼り付けることができます.PNG形式の方が一般的ですが,SVG形式の画像は拡大しても描画品質が変わらないため,高品質なグラフィックが必要な場合に便利です.SVG形式の画像は,Adobe IllustratorやBOXY SVG などのソフトウェアで読み込んで編集することができます.その他、PDF形式の画像をダウンロードすることも可能です。

フォントサイズ縦間隔カラー の各オプションについては説明の必要はないでしょう.これらのオプションの値を変更することで,樹形図の外観を変えることができます.

カラー には,ノードとリーフのラベルに色をつける ModernTraditional,すべて黒で描く なし のほかに,線を灰色に があります.これはラベルを黒のまま残し,コネクタと移動パスだけを灰色で描くものです.

線幅linewidth,CLI では --linewidth)は,コネクタ・括弧・囲みなど図中のすべての線の太さを,文字サイズに対する比で指定します.1 は文字サイズの5%(本文の罫線と同じ太さ)で,0.5 刻みで 2.5% ずつ増え,0.5(最細)から 3.0(15%,最太)まで選べます.線は文字サイズに追随するため,どの文字サイズでも文字と線の釣り合いが変わりません.

[S
  [NP
    [D The]
    [N cat]
  ]
  [VP
    [V sat]
    [PP
      [P on]
      [NP
        [D the]
        [N mat]
      ]
    ]
  ]
]

ラベル付き括弧表記から描かれた樹形図

記法の一覧

この記法で描けるものを 1 行ずつ、説明のある節への案内つきで挙げます。 ここに載せたサンプルはすべてテストが実際に描いているので,そのまま動きます。

構造

ラベルの中

ラベルの外

オプション — いずれも Web インターフェイスの項目であり、コマンドラインのフラグでもあります.

ツリーの方向

方向direction,CLI では --direction)オプションでツリーのレイアウト方向を制御できます:

左から右のモードでは,コネクタ,三角形,移動パス,追加のコネクタはすべて横向きに描かれます.縦間隔 オプションは LTR モードではツリーのレベル間の水平距離を制御します.

[Noun
  [Common
    [Count *cat*]
    [Mass *water*]
  ]
  [Proper *Tokyo*]
]

同じ構造を左から右へ展開した図

Tidy レイアウト

Tidy レイアウト オプション(tidy,CLI では --tidy)はレイアウト方式を選ぶオプションで,最も広いものから最も密なものまで一つの尺度になっています:

同じ木を 5 つの設定で描いたものです.段階を追って幅が詰まります.最後の 2 つは差が 最も分かりにくいので横に並べました.highsell を名詞側に寄せ,medium は枝の 位置のまま残します.

[S
  [NP
    [AP
      [Deg less]
      [A expensive]
    ]
    [N electric\-cars]
  ]
  [V sell]
]

Tidy symmetric の木 Symmetric

Tidy オフの木 オフ

Tidy low の木 Low

Tidy medium の木 Medium

Tidy high の木 High

high の効果が得られるのは深く偏った木に限定され,均整のとれた木では medium と大差ない結果になることもあります.通常の用途は offlowmedium で足ります.

Tidy モードではコネクタの高さも自動調整されます.横間隔hspacing,デフォルト 1.0,目安 0.5〜3.0)と縦間隔vheight)はそれぞれ横方向と縦方向の間隔倍率で,tidy の有無に関わらずすべてのレイアウトモードで有効です.

RTL 文字体系のための鏡像レイアウト

アラビア語やヘブライ語など右から左に書く文字体系のため,樹形図を右から左に展開させることができます.左右反転(RTL) オプション(mirror: on,CLI では --mirror)は,レイアウト確定後の樹全体を水平方向に反転します.構造は変わらず,リーフの並び順だけが逆転して,文が自然な方向に読めるようになります.

左右反転(RTL)方向 と組み合わせられます.

[S
  [NP الطالب]
  [VP
    [V قرأ]
    [NP الكتاب]
  ]
]

反転した木.アラビア語の文が右から左に読める

フォント

図は 3 種類の書体のいずれかで描かれます.フォント で選びます.

いずれも漢字・ハングル・かなは Noto CJK にフォールバックするため,どれを選んでも CJK のテキストを描画できます.

同じ木を 3 種類の書体で描いたものです.

[Digits
  [Even 02468]
  [Odd 13579]
]

Noto Sans で組んだ木 Sans

Noto Serif で組んだ木 Serif

Noto Sans Mono で組んだ木 Mono

どの機械にフォントが要るかは形式によって変わります.PNG・PDF はこちらで 描いて絵として届くので,見るだけなら何も導入する必要はありません.SVG は字形ではなく 書体の名前を持ち運び,開いた側がそれを用意します.そのため下記のフォントが無い機械では 別の書体で代替され,文字の釣り合いをやや欠いた表示になります.

テキストの描画

フォントのスタイルとしてイタリック/ボールド/ボールド+イタリックを指定できます.テキスト装飾としては,上線,下線,取り消し線を指定できます.また上付き文字と下付き文字を指定できます.これらは組み合わせて使用することもできます.

[Styles
  [Emphasis *italic* **bold**]
  [Lines =overline= -underline- ~struck~]
  [Scripts X_i_ Y__j__]
]

文字装飾の一覧.左から右に,直角のコネクタで描いたもの

フォント・スタイル

Style Symbol Sample Input Output
Italic *TEXT* *italic* italic
Bold **TEXT** **bold** bold
Italic+bold ***TEXT*** ***italic bold*** italic bold

テキスト装飾

Decoration Symbol Sample Input Output
Overline =TEXT= =overline= overline
Underline -TEXT- -underline- underline
Line-through ~TEXT~ ~linethrough~ linethrough

上付き文字と下付き文字

Sample Input Output
normal_subscript_ normalsubscript
normal__superscript__ normalsuperscript

スペースと改行

ラベル内のスペース

Sample Input Output
X<>Y X Y

リーフのテキスト中の半角スペースはそのままスペースとして表示されます.<>は基本的にはラベル内でスペースを表示したいときに使いますが,リーフ内のテキストでも有効です.

なおラベルが <> のみのノードは特別な使われ方をします.後述の終端の高さを揃えるを参照してください.

終端の高さを揃える

ラベルが <> のみのノードは不可視の中継点として描画され,コネクタの線は途切れずに貫通します.これを連ねると浅いリーフを下の段に送れるため,すべての終端要素を同じ高さに揃えたい場合に便利です.

[S
  [NP
    [D
      [<>
        [<> the]
      ]
    ]
    [N
      [<>
        [<> cat]
      ]
    ]
  ]
  [VP
    [V
      [<>
        [<> sat]
      ]
    ]
    [PP
      [P
        [<> on]
      ]
      [NP
        [D the]
        [N mat]
      ]
    ]
  ]
]

継手ですべての語を最下段に揃えた図

中継点がなければ,thecatsatthemat より2段上に,on は1段上に浮きます.各リーフは最も深い段に届くのに必要な数だけ中継点を重ねるので,6語すべてが最下段に並びます.ギャラリーの Terminals levelled with pass-through joints の例をご覧ください.

改行

ラベルの改行は 3 通りの書き方があり,どれも同じ意味です.行末のバックスラッシュ, バックスラッシュと空白,そして \n です.2 つ続けると 1 行空きます.バックスラッシュは エスケープ文字なので,文字としてのバックスラッシュは \\ と書きます(一部の文字を表示するためのエスケープを参照).

Sample Input Output
str1\
str2
str1
str2
str1\
\
str2
str1

str2
str1\ str2 str1
str2
str1\ \ str2 str1

str2
str1\nstr2 str1
str2
str1\n\nstr2 str1

str2

テキスト以外の要素の描画

テキストと組み合わせてサークル○,ボックス□,水平線などを描画することができます. フォントが持つ文字であればラベルにそのまま書けます.絵文字も同様で,モノクロの Noto Emoji で描かれるため,色は付かず輪郭で表示されます.

[Shapes
  [#Brackets |1| {2}]
  [##Rectangle {capsuled}]
  [Emoji 🌱 🐛 ✅]
]

四角と丸のタグ,括弧と矩形の囲み

スモールキャピタル

HPSGなどの素性構造の素性名は慣例としてスモールキャピタルで組まれますが,スモールキャピタル用の字形を持つフォントを使わずに,その見た目を似せることができます。大文字は通常通り表示し、スモールキャピタルの部分は ___ で囲んでください.例えば、H___EAD___ と書くと,通常の大きさの H に続いて小さめの EAD が描かれます.

[#H___EAD___\tnoun\
  C___ASE___\tnom
  Kim
]

スモールキャピタル風に組まれた素性名

ボックス・サークル・水平線・矢印

Sample Input Output
||
{}
*||*
*{}*
|/|
{/}
|1|
{1}
|abc|
{abc}
--
*--*
->
*->*
<-
*<-*
<->
*<->*

水平線

Sample Input Output
str1\
---\
str2
str1
——
str2
str1\ ---\ str2 str1
——
str2
str1\n---\nstr2 str1
——
str2

ここで ---- の3つ以上の連続を意味します.

コネクター

コネクタ形状 では終端ノードとリーフの間に何を描くかを3種の中から選べます(autobarnone).auto では,1つ以上の空白を含むリーフ(要するに「句」)に対しては終端ノードを頂点とした三角形を描画します.リーフが空白を含まない場合(つまり「単語」の場合),垂直の直線が描かれます .なお,リーフの先頭に ^ をつけると,そのリーフが句であると宣言することになります.したがって必ず三角形が描かれます.^ はノードのラベルの先頭に置いても構いません.[NP ^cats][^NP cats] は同じ意味です. bar では,すべてのリーフに関して垂直の直線が描かれます. none では終端ノードとリーフの間にコネクターは描かれません.

[S
  [NP a phrase]
  [VP
    [V word]
    [NP ^forced\-triangle]
  ]
]

句には三角,単語には縦線.先頭の ^ で三角を指定した例

リーフを囲む括弧と矩形の描画

ラベルまたはリーフとなるテキストの最初に(^ が存在する場合はその直後に) # を付けると,そのテキスト全体を角括弧([ ])で囲みます(例:[#NP text], [NP #text], [NP ^#text]).

テキストの最初に ## を付けると,テキスト全体を矩形(ボックス)で囲みます.

テキストの最初に ### を付けると,テキスト全体を太い線の矩形(ボックス)で囲みます.

[Enclosures
  [#Brackets one]
  [##Rectangle two]
  [###Bold three]
]

角括弧・矩形・太線の矩形

ノードごとの色指定

@color: プレフィックスを使用して,個々のノードにカスタムカラーを指定できます.色名とHEXカラーコードの両方がサポートされています.

入力例 説明
@red:NP 色名(赤)
@blue:VP 色名(青)
@#FF5500:NP HEXカラーコード
@#0A0:VP 短縮形HEXカラーコード

マークアップの順序:他のプレフィックスと組み合わせる場合は,次の順序を使用してください:^(三角形)→ #(囲み)→ %(領域シェード)→ @color:(色)

入力例 説明
^@blue:NP 三角形コネクター+青色
#@red:NP 角括弧+赤色
^#@green:NP 三角形+角括弧+緑色
[S
  [@blue:NP
    [D the]
    [N @blue:dog]
  ]
  [@red:VP
    [V @red:chased]
    [NP a cat]
  ]
]

2 つのノードに個別の色を与えた図

シアー

シアーshear)は仕上がった図を指定した角度だけ傾け(正の値で上辺が右)、 シアー平面shear_plane)がその図が載る平面を描きます。平面は図に応じて切ったり,色を与えたりできます。背景を透過にすると平面は 描かれません。

図は一枚の板として傾くので、中の領域シェードも平行四辺形になり、離れていた ものが新たに接することもありません。傾いた図を描けるのは PNG・SVG・PDF で、 TikZ では使えません。

傾けた図では 縦間隔 を直立時より詰めるとうまくいきます。傾きが木を横に広げるので、 段はより近くに置けるからです。

[S
  [NP the cat]
  [VP
    [V sat]
    [PP on the mat]
  ]
]

描かれている平面ごと傾いた木

領域シェード

###### が単一のノードラベルを囲むのに対し,領域シェードはあるノードが支配する部分木全体の背後に半透明の面(プレーン)を描きます.c-command 領域や束縛領域など,「範囲」を面で示したい場合に役立ちます.

ノードラベルの先頭(^/# がある場合はその直後)に % を付けます.面はそのノードと その全子孫を含むバウンディングボックスを覆い,ツリーの線やラベルの背後に描かれます. シェードの色は既存の @color: 記法をそのまま流用します.% 単独では薄いグレーに なります.

入力例 説明
%VP 既定の薄いグレーの領域シェード
%@yellow:VP 黄色の領域シェード(色名)
%@#ffcc00:VP HEX カラーの領域シェード
%@yellow:@blue:VP 黄色のシェード面かつ青色のノードラベル(2つの色は独立)

各面には,塗りと同系色で少し濃いボーダーが描かれるため,白背景でも領域の境界が 明瞭に区別できます.明示的に指定したシェード色は(@color: の文字色と同様に)そのまま使われます.白黒の図にしたい場合は,色付きのシェードではなく素の %(グレー)を 使ってください.

重なり合う(入れ子の)領域は,面が半透明なので自然に混色されます.領域シェードは 上下方向・左右方向(-d ltr)の両レイアウトで機能し,TikZ を含むすべての形式に出力されます.

[S
  [%NP
    [D the]
    [N dog]
  ]
  [%@blue:VP
    [V chased]
    [%@red:NP a cat]
  ]
]

2 つの部分木を網掛けし、一方に色を付けた図

一部の文字を表示するためのエスケープ

文字装飾などのマークアップに使用される一部の文字をテキストとして表示するためには \ によってエスケープする必要があります.使用している環境で \ が使えない場合は ¥ で代用することができます.

Input Appearance
\[[
\]]
\<<
\>>
\^^
\++
\**
\--
\__
\==
\~~
\||
\%%
\@@
\'' (kept straight)
\\\
¥
<>whitespace
\n↩️
\↩️↩️
\ + whitespace↩️

注意: 単なる改行 ↩️ はスペースとして扱われます.↩️ を1つ以上連続させた場合も1つのスペースとして扱われます.

テキスト中で改行したいときには,1) \n,2) \↩️,3) \ + whitespace のいずれかを用いてください.そうすると出力される画像の中で改行 ↩️ が行われます.

注意: ラベル中の直線アポストロフィ(')は自動的に曲がったアポストロフィ になります.直線のまま出したいときは \' と書いてください.

注意: ラベル末尾の + に続く数字は移動パス(+1)です.\+ と書けば記号としてのプラスになり,C\+\+11C++11 と描かれます.

注意: ラベル中の直線アポストロフィ(')は,自動的に曲がったアポストロフィ として描画されます.T' のような X-bar のプライムや、通常の文中のアポストロフィ(例:John’s)にも適用されます.

素性構造

属性値行列(AVM)は,複数行のラベルを桁で切って,属性を片側に,値をもう片側に揃えて並べ, 全体を括弧で囲んだものです.そのための特別な記法があるわけではなく,どれも普通の ラベルのマークアップで,一つ一つは単独でも使えます.

描きたいもの 書き方 説明のある場所
行列を囲む括弧 ラベルの先頭に # リーフを囲む括弧と矩形の描画
属性と値の桁揃え 間に \t 桁揃え
値としての行列 #(#) 行列の入れ子
構造共有のタグ |1| ボックス・サークル・水平線・矢印
リストを囲む山括弧 をそのまま入力
素性名の中のハイフン ハイフン: literal ハイフン

組み合わせると次のようになります.

[#*word*\
  PHON\t⟨<>*Kim*<>⟩\
  SYNSEM\t#(LOCAL\t#(CAT\t#(HEAD\t#(*noun*\
    CASE\t*nom*#)\
    SPR\t⟨<>|1|<>⟩#)#)#)
]

桁揃え・入れ子の行列・タグを含む素性構造

行列は木のノードに置くこともでき(HPSG がそうします),導出図のステップの 範疇にすることもできます.

桁揃え

\t は行をセルに区切ります.ラベルの各行が同じ位置で区切られ,各列はその列の最大幅で描画されるため,直前のテキストの長さに関係なく縦に揃います.HPSGなどで属性値行列(AVM)を記述する時などに便利です.

[#HEAD\tnoun\
  SPR\t⟨<>⟩\
  COMPS\t⟨<>NP<>⟩
  Kim
]

属性と値が桁で揃った行列

3列以上でも同様に動作し,各列は必要な幅を取ります.ギャラリーの HPSG sample の例などをご覧ください.

行列の入れ子

属性の値として別の行列を書けます.#(#) で囲むと,その行列は自前の角括弧と桁揃えを持ち,後続の行はその高さ全体を避けて配置されます.

[#*word*\
  PHON\t⟨<>*Kim*<>⟩\
  SYNSEM\t#(LOCAL\t#(CAT\t#(HEAD\t#(*noun*\
    CASE\t*nom*#)\
    SPR\t⟨<>⟩#)#)#)
]

四重に入れ子になった行列

入れ子は何段でも可能です.SYNSEM | LOCAL | CATEGORY | HEAD のような素性パスを書くために必要な機能です.ギャラリーの Nested feature structure の例などをご覧ください。

ハイフン

ハイフンは下線の開始と終了を表すため,文字としてのハイフンは \- と書きます.HPSG やその周辺の枠組みでは HEAD-DTR や RELIED-ON のように素性名にハイフンが頻出し,そのすべてをエスケープするのが大変になります.そこで、ハイフンhyphen,CLI では --hyphen)オプションを使って2つの記法を入れ替えられます.literal を指定すると,素のハイフンは文字として扱われ,下線は \-下線\- と書きます.ただし,ハイフンだけの行は横罫線のまま,パス記法の +-1 のハイフンも破線の指定のままで,どちらの設定でも変わりません.

導出図

導出は木とは違う書き方をします.語が先に上に来て,各ステップは結びつける範囲いっぱいに 横罫を引いてその下に結果を書き,全体が到達したものが最後に下に来ます.範疇文法はこの書式で 書かれますし,構成素の広がりを示す図も同じ形です.

導出derivation)をオンにすると,各ノードと娘を結ぶ線が,娘全体をまたぐ 1 本の罫に 置き換わります.あわせて 方向btt にすると木が上下逆になり,語が先に来ます.

[S\t<
  [NP\t>
    [NP/N the]
    [N dog]
  ]
  [S\\NP\t>
    [(S\\NP)/NP bit]
    [NP John]
  ]
]

語が先で結果が最後に来る範疇文法の導出図

構造は普通の括弧表記で,導出のための特別な記法はありません.知っておくとよいのは 2 点です.

各ステップの名前は桁区切りの後ろに書きます.[S\t< は「ラベルが S,それを導いた ステップが <」という意味です.名前はその罫の右端に小さく置かれます.><>B>T<Φ> など何でも書け,エスケープは要りません.

範疇の中のバックスラッシュは \\ と書きます.S\\NPS\NP として描かれます. バックスラッシュ 1 つは改行の開始なので,二重にする必要があります.

範疇は素のラベルでなく素性構造でも構いません.範疇が素性を担う流儀の導出はこの形で 書きます.行列の中の桁区切りは行列自身の列で,規則を名づけるのは行列の外にある区切りです:

[#(CAT\tS#)\t<
  [#(CAT\tNP#) Kim]
  [#(CAT\tVP#) sleeps]
]

範疇を素性構造にした導出図

方向ttb のままにすると,同じオプションで構成素の広がりを上から示す図になります. 各構成素の範囲が罫で示されます.

[S
  [NP
    [D the]
    [N dog]
  ]
  [VP
    [V bit]
    [NP John]
  ]
]

同じオプションで,通常の木の構成素の広がりを示した図

組みかた. コネクタ形状none にすると語と範疇の間に縦線が入りません.縦間隔 は小さめが縦に詰まった図に合います.ギャラリーの導出図は最小の 0.5 です.

横方向は Tidy レイアウト: low横間隔 を広めにするとうまく収まります.導出は各桁を そこに立つ最も広いものの幅にとった表として組むもので,low がまさにそれを行い,桁を 寄せつつ語順を保ちます.そのうえで 横間隔 が全桁を同じだけ開きます.ギャラリーの 導出図は 2.0 です.避けたいのは Tidy レイアウト: off で,各部分木に木のレイアウトが 割り当てた幅をそのまま与えるため,空きが表の求める場所ではなく枝分かれの都合で入ります.

導出でできないこと. 方向: ltr は拒否されます.前提をまたぐ罫は,前提が横に並んで いなければ引けないからです.既定のコネクタを隠す も拒否されます.導出の罫は 図そのもので,隠すと範疇が段に並ぶだけで何も結ばれていない図になるからです. TikZ 出力も拒否されます.forest が描くのはこの図ではなく木だからです. PNG・SVG・PDF をお使いください.

ノードからノードへのパスの描画

下の3種類の形式でノードからノードへのパスを表示することができます.

樹形図の中でパスを表示したいとき,パスの両端を数字のIDで指定します.数字をプラス(+)記号と共にノードのテキストの最後で指定してください(例:+7). プラス記号とID番号の間に > 記号または < 記号を入れると(例:+>7),パスの終端に矢印が付きます.その際,+>+< のどちらを用いるかで結果は変わりません.矢印の先は常にこれらのいずれかを用いたIDが指定された要素に向けられます.

IDにはどのような数字を用いても構いませんが,必ず 2箇所 で同じIDを指定することが必要です.同じIDを3箇所以上で指定することはできません.

[CP
  [NP What+>1]
  [C'
    [C does]
    [IP
      [NP John]
      [VP
        [V like]
        [NP t+1]
      ]
    ]
  ]
]

痕跡から移動した語へ向かう,矢印つきのパス

ノードからノードへの追加的なコネクターの描画

パスの指定と類似した方式でノードからノードへのコネクターを追加することができます.追加的なコネクターは直線で描画されます(polylineにはなりません).追加的なコネクターを描画する際,デフォルトのコネクターを非表示(透明)にしたいときには コネクタを隠す オプションをオンにすると良いでしょう.

追加のコネクターは数字のIDで指定します,プラスとマイナスを連続させた(+-)後にIDを指定してください(例:+-8).マイナス記号とID番号の間に > 記号または < 記号を入れると(例:+->8),コネクターの終端に矢印が付きます.その際,+->+-< のどちらを用いるかで結果は変わりません.矢印の先は常にこれらのいずれかを用いたIDが指定された要素に向けられます.

IDにはどのような数字を用いても構いませんが,必ず 2箇所 で同じIDを指定することが必要です.同じIDを3箇所以上で指定することはできません.

[S
  [NP+-1 The dogs]
  [VP+->1 bark]
]

同じ段の 2 つのノードを直線で結ぶ追加のコネクタ

Penn Treebank形式

RSyntaxTreeはPenn Treebank形式を自動的に検出し,括弧表記に変換します:

# Penn Treebank形式
(S (NP the dog) (VP runs))

# 同等の括弧表記
[S [NP the dog] [VP runs]]

Penn Treebank形式での特殊文字のエスケープ:

入力 表示
\( \) 丸括弧 () をそのまま表示
\[ \] 角括弧 [] をそのまま表示

例:

(S (NP hello\(world\)) (VP test))
→ [S [NP hello(world)] [VP test]]

自分の環境で動かす(上級者向け)

以下の機能はウェブアプリでは提供されません.RSyntaxTreeをgemまたはDockerイメージとして自分の環境で動かす場合に利用できます.

好みのフォントを使う

ギャラリーで扱う文字体系は,システム任せのフォールバックに委ねず,フォント名を明示して決めています(Noto Sans ArabicNoto Naskh ArabicNoto Sans HebrewNoto Serif Hebrew,およびデーヴァナーガリー・タイ・クメールの Noto Sans/Noto Serif).これらのフォントが導入されている環境どうしであれば,同じ入力が同じ字形で描画されます.数学用英数字(U+1D400 以降.例えば vP のイタリック体の v)は,環境によって字形が変わることがあります.

上記のフォント指定はシステムの既定より優先されるため,お使いのアラビア語フォントなどがあっても Noto が優先されます.RSyntaxTree 側を変更しなくても,fontconfig の alias で上書きできます.たとえばアラビア語を Amiri で描画するには,~/.config/fontconfig/fonts.conf に次を書いて fc-cache -f を実行します.

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
<fontconfig>
  <alias binding="strong">
    <family>Noto Sans Arabic</family>
    <prefer><family>Amiri</family></prefer>
  </alias>
</fontconfig>

計測と描画が同じ fontconfig をたどるので,置き換えたあとのフォントで計測されます.

macOS では. 以上は Pango が fontconfig でフォントを解決する環境,つまり Linux と Docker イメージでの話です.macOS の Pango は CoreText を使い fontconfig を参照しないため, alias を書いても効きません.描きたいフォントは入力のフォント指定で選んでください.また CoreText は絵文字のコードポイントに必ず Apple Color Emoji を返し,そのカラーグリフを librsvg が描画しないため,絵文字を含む図は Linux か Docker イメージで生成することを おすすめします.

描画せずに入力を検査する

--validate は,入力が描画できるかどうかだけを報告します.描画も出力ファイルの 書き出しも行いません.診断結果はJSONとして標準出力に出力され,入力が受理された 場合は終了コード0,されなかった場合は1を返します.

rsyntaxtree --validate "[S [NP the cat] [VP sat]]"

オプションは考慮されるので,オプションに依存する入力はそのオプションのもとで 判定されます:

rsyntaxtree --validate --hyphen literal "[X V-bar]"

同じ入力をオプションなしで検査すると拒否され,何がどこで誤っているかが 診断に示されます:

$ rsyntaxtree --validate "[X V-bar]"
{
  "schema": "rsyntaxtree.error/1",
  "ok": false,
  "errors": [
    {
      "code": "bare_hyphen",
      "message": "Error: input text contains an invalid string\n > V-bar",
      "label": "V-bar",
      "position": 1,
      "hint": "A hyphen opens an underline. Escape it (e.g. f\\-structure, V\\-bar) or set the hyphen option to literal.",
      "retryable": true
    }
  ]
}

code はプログラムのための部分です。このライブラリが報告しうるコードは RSTError::CODES にすべて挙げてあり、この一覧は増えるだけです。一度公開した コードは改名も削除もされないので、コードを鍵にするプログラム——診断を翻訳する もの、書き手がどんな誤りを犯すかを集計するもの——は、項目を足していくだけで 済みます。全体の集合は後者にとって重要です。誰も踏まなかったコードと、 そもそも起こりえないコードは別のものだからです。

答えのそれ以外の部分は契約ではありません。メッセージやヒントの文面は版によって 変わりえますし、当てはまらない場合には項目自体がありません(どのラベルにも 属さない誤りに label はありません)。安定しているのは終了コードです。

同じ種類の誤りはまとめて報告されます。最初の 1 件で止まることはなく、 不正なラベルが 3 つあれば 3 件が並ぶので、一度の修正で全部を直せます。 検査には順序があり——まず空入力が退けられ、次にオプション、括弧の対応、 ラベル、そして端が 1 つしかないパスのような木全体の検査—— 前の段階に誤りがあると後の段階には進まず、 note が「これらを直すと更に見つかるかもしれない」と述べます。閉じ括弧が 1 つ欠けるとその後のトークンの切れ目がすべてずれるので、そのまま先を報告 すれば、真の誤りの巻き添えにすぎないラベルを不正と言い立てることになります。

記法リファレンス

--notation は,1 ページのリファレンス — 特別な意味を持つ文字,全機能の一覧,オプション — を標準出力に出力します.LLM に作図を依頼するときに渡す資料として想定しています.--examples は,公開されている全事例を,それぞれが描画された際のオプションとともに出力します.どちらも入力を読まずに出力して終了します.

rsyntaxtree --notation
rsyntaxtree --examples

同じ内容はプレーンテキストとしてサイトにも置いてあります.コマンドを実行できないが URL は取得できる読み手のためのものです.llms.txt が目次,notation.txt が 1 ページのリファレンス単体,llms-full.txt にはリファレンス・本マニュアル・全事例が一つのファイルに入っています.いずれも元の資料から生成されます.

標準入力のサポート

パイプを使って標準入力からツリーデータを渡すことができます:

echo "[S [NP hello] [VP world]]" | rsyntaxtree -f svg -o ./
cat tree.txt | rsyntaxtree -f png -o ./

設定ファイル

ホームディレクトリまたはカレントディレクトリに .rsyntaxtreerc ファイルを作成して,デフォルトオプションを設定できます:

# ~/.rsyntaxtreerc
format: svg
color: modern
fontsize: 18
leafstyle: auto
symmetrize: off

コマンドライン引数は設定ファイルの設定を上書きします.設定ファイル内の不明なオプションは警告を生成し,無効な値はエラーメッセージを表示します.

プログラムからテキストをエスケープする

タガーの出力語や コーパスの語など,自分で選んだのではない文字列から記法を 組み立てるプログラムは,その文字列に含まれる記法文字をエスケープしなければ なりません.エスケープ規則をそのプログラム側に写すと,記法が変わったときに 黙ってずれ,違う図が描かれます.RSyntaxTree.escape は,記法を知っている ライブラリの側でエスケープを行います.

require "rsyntaxtree"

RSyntaxTree.escape("C++ 2+2")                     # => "C\\+\\+<>2\\+2"
RSyntaxTree.escape("well-known dog", as: :phrase)  # => "well\\-known dog"
RSyntaxTree.escape("Tom's", apostrophe: :keep)     # => "Tom\\'s"
RSyntaxTree.escape("a\tb\nc", as: :cell)           # => "a\\tb\\nc"

as: は文字列がどこに置かれるかを指定し,それが空白の意味を決めます. :word は 1 つの葉か 1 つのラベルで,中の空白は <> になります.:phrase は 複数語の葉で,空白はそのまま残り,葉には三角が付きます.:label は節点ラベルで, 語と同じですが改行は行分割として残ります.:cell は桁揃えや行列の 1 セルで, タブが桁の区切り,改行が行の区切りになります.

hyphen: は描画に渡す hyphen オプションと同じ値にしてください.:markup (既定)ではハイフンをエスケープしますが,:literal では素のハイフンがそのまま ハイフンで,エスケープした形は下線を意味するため,両方に通じる書き方は ありません.apostrophe::curly(既定,直線のアポストロフィを曲がった形に) か :keep です.

結果の正しさは,実際に描いて確かめる以外に方法がありません.テストは, すべての記法文字を単独と組み合わせで escape に通し,返ってきた記法を描いて, 図から文字列を読み戻して照合しています.hyphen: literal のもとで書けない テキストが 1 つだけあります.3 本以上のハイフンだけからなる行で,それは横罫線 です.これを求めると,空の葉を描く記法を返す代わりに ArgumentError を投げます. 空文字や空白だけの文字列は,含まれる空白のまま返り,描くと空白になります. トークンから木を組み立てるプログラムは,そうしたトークンを先に除くのが普通です.

TikZ出力

RSyntaxTreeは-f tikzオプションを使用してLaTeXドキュメント用のTikZ/forestコードを生成できます.出力はforestパッケージを使用してLaTeXで直接使用できます.

制限事項: TikZ出力はツリー構造に焦点を当てており,下記の視覚的機能はサポートされていません:

いずれも拒否されるのではなく,落とされたうえで木が書き出されます.行列のラベルは セルが 1 行に連なった形で出てくるので,forest のコードは図と見比べてから使ってください.