Asymptote のツリー (シーケンス) 図

Asymptote のツリー (シーケンス) 図

Asymptote でツリー図を描きたいのですが、いくつか問題があります。

検索してみたところ、ウェブ上で2つのヒントが見つかりました。 http://asymptote.sourceforge.net/FAQ/section4.html http://asymptote.sourceforge.net/doc/Frames-and-pictures.html

これらのヒントを使用して、そして

settings.outformat="pdf";
unitsize(5cm);

usepackage(amsmath);

frame f1;
label(f1, "$\mathbb{N} \models A(0)$", Draw);
add(f1, (0, 5))

frame f2;
label(f2, "$\mathbb{N} \models A(1)$", Draw);
add(f2, (0, 4));

draw(f1 -- f2);

しかし、これはうまくいきません。最後に描画(f1 -- f2);コマンドが間違っています。

描くコマンドには座標が必要です。しかし、この方法は... 賢明ではありません (私にとっては)。

したい接続する2 つのボックス。2 つのオブジェクトを接続するにはどうすればよいですか?

私は見つけたドローツリー公式チュートリアル PDF にモジュールがありますが、柔軟に使用するのは難しそうです (ツリーの形状は変更できますか?)。

簡単に使える方法があればドローツリーモジュール、それを教えていただけますか?

ありがとう。

答え1

次のコードはスタンドアロンasymptoteスクリプトとして機能します。私はモジュールを使用していないdrawtreeので、その点についてはお手伝いできません。私のコードでは、フレームを使用していません。代わりに、各ラベルはデフォルトの画像で描画されます。

texpreamble("\usepackage{amssymb}");
settings.outformat="pdf";
unitsize(5cm);

pair p1 = (0, 5);
pair p2 = (0, 4);

draw(p1--p2);

label("$\mathbb{N} \models A(0)$", p1, FillDraw(white, black));
label("$\mathbb{N} \models A(1)$", p2, FillDraw(white, black));

ここに画像の説明を入力してください

答え2

代替的な方法論は一般的に受け入れられているので、私は解決。

math contentすべてのノードの内容を数式モードにして、 の必要性を回避します$...$drawツリー内の各ノードの周囲に境界線を描画します。

ノードは、親子関係ごとに親から子に自動的に接続されます。(<node content>, no edge例外に使用)元のコードで定義されているl sepものと一致するように指定しましたunit。これは、ツリーのレベル間の最小距離です。(5cm は大きいです。)

明示的な座標は必要ありません。ツリーは自動的にフォーマットされます。

\documentclass[tikz, border=10pt, multi]{standalone}
\usepackage{forest,amssymb}
\begin{document}
\begin{forest}
  for tree={
    draw,
    math content,
    l sep=50mm,
  }
  [\mathbb{N} \models A(0)
    [\mathbb{N} \models A(1)]
  ]
\end{forest}
\end{document}

代替解決策

ツリーの外観を変更するのは非常に簡単です。forest環境のプリアンブルを変更するだけです。

例えば、

   for tree={
    draw=red,
    thick,
    edge={blue, thick, <->},
    fill=red!10,
    math content,
    l sep=50mm,
    grow=45,
  }

生産する

改変された木

ツリー自体の仕様は同じままであるが

  [\mathbb{N} \models A(0)
    [\mathbb{N} \models A(1)]
  ]

関連情報