このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

矢印の形

本編 関係を表す矢印の形をどうしようか? - 檜山正幸のキマイラ飼育記 を描くのに使ったのは、次のコマンド。


// -*- coding: utf-8 -*-

/** ロバストネス風の図 */
module g;

command arrow
{
@[default(false)]
"total": boolean?,

@[default(false)]
"inj": boolean?,

@[default(false)]
"surj": boolean?,

@[default(false)]
"multi": boolean?,
}
[string name, string from, string to] :: void -> gv:Edge
{
%total | case {true=>"tee", false=>""} > tail1;
%inj | case {true=>"inv", false=>""} > tail2;
%surj | case {true=>"tee", false=>""} > head1;
%multi | case {true=>"crow", false=>"normal"} > head2;

[%tail1, %tail2] | text:concat | cond{""=>"none", *=>pass} > tail;
[%head1, %head2] | text:concat > head;

[
%1 > name,
%2 > from,
%3 > to,
];

%name > label;

gv:edge --dir=both --arrowtail=%tail --arrowhead=%head --label=%label %from %to
};