回上级页面

新蜗牛 · 路

2023 年 05 月 08 日


上一篇:新蜗牛 · 基本对象

下一篇:新蜗牛 · 秘密

本篇主要介绍如何为蜗界基本对象构造各种连线并对其进行文字标注。

老路

蜗界三大基本对象宫、廷、景,都有非常丰富的锚点,若熟悉 MetaPost 的路径构造语法,构造这些对象之间的连线并不困难,MetaFun 手册的 1.1 和 1.3 节所介绍的 MetaPost 路径构造方法和技巧便已足够。

注:在 ConTeXt LMTX 环境里,使用命令「mtxrun --script base --search metafun-s.pdf」便可找到 MetaFun 手册。

例如

宫(甲, "A");
宫(乙, "B") 位于 乙 偏 (东 4cm +2cm);
呜呼 甲, 乙;

path 甲乙;
甲乙 := 甲.卯门{right} .. 乙.午门{up};
drawarrowpath 甲乙;
老路-1

上述路径 甲乙 亦可采用 dir 宏构造:

path 甲乙;
甲乙 := 甲.卯门{dir(0)} .. 乙.午门{dir(90)};
drawarrowpath 甲乙;

snail 模块定义了一个宏 老路,可将上述路径构造代码简化为

老路(甲乙, 甲.卯门{right} .. 乙.午门{up});

老路(甲乙, 甲.卯门{dir(0)} .. 乙.午门{dir(90)});

经转和纬转

以下代码使用 老路 构造两条折线路径:

宫(甲, "A");
宫(乙, "B") 位于 乙 偏 (东 4cm + 北 2cm);
呜呼 甲, 乙;

老路(甲乙, 甲.卯门 -- (xpart 乙.午门, ypart 甲.卯门) -- 乙.午门);
老路(甲乙, 甲.子门 -- (xpart 甲.子门, ypart 乙.酉门) -- 乙.酉门);
折线路径

折线路径的转折点坐标需要基于路径首尾两个端点的坐标分量进行构造,该过程略微繁琐。snail 模块为此定义了宏 经转纬转,可将上述示例中的路径构造代码简化为

老路(甲乙, 甲.卯门 纬转 乙.午门);
老路(甲乙, 甲.子门 经转 乙.酉门);

经转 表示路径在经向(横向或东西走向)发生变化。纬转 表示路径在纬向(纵向或南北走向)发生变化,

经至和纬至

以下代码使用 老路 构造两条直线路径:

宫(甲, "A");
宫(乙, "B") 位于 乙 偏 (东 4cm + 北 2cm);
呜呼 甲, 乙;

老路(甲东, 甲.卯门 -- (xpart 乙.午门, ypart 甲.卯门));
老路(甲北, 甲.子门 -- (xpart 甲.子门, ypart 乙.酉门));
经至和纬至

甲北甲东 末端点的构造语句可使用 经至纬至 予以简化:

老路(甲东, 甲.卯门 经至 乙.午门);
老路(甲北, 甲.子门 纬至 乙.酉门);

蜗界的标准路径是圆角化的折线路径,可基于 进行构建。例如

宫(甲, "A");
宫(乙, "B") 位于 乙 偏 (东 4cm + 北 2cm);
呜呼 甲, 乙;

设 "蜗界.路径.圆角 = 14pt";
路(甲乙, 甲.卯门 纬转 乙.午门);
圆角化的折线路径

弯路和小弯路

弯路小弯路 可将折线路径转化为曲线路径。例如

宫(甲, "A");
宫(乙, "B") 位于 甲 偏 (东 4cm + 北 2cm);
呜呼 甲, 乙;

弯路(甲乙, 甲.午门 经转 甲.巽位 经转 甲.震位 经转 乙.酉门);
弯路

倘若将上例中的 弯路 换为 小弯路,结果为

小弯路

小弯路弯路 的区别是,前者更贴近原折线路径。

标注

snail 为路径添加文字标注提供了三种方式,前两种是在 老路弯路小弯路 语句中为路径添加标注,第三种是为既有路径添加标注,三者区别见以下示例:

宫(甲, "A");
宫(乙, "B") 位于 乙 偏 (东 4cm +2cm);
呜呼 甲, 乙;

老路(甲甲, 甲.子门 {up} .. 甲.酉门 {right});
路标(甲甲, "无聊", .5, 45);

弯路(甲乙, 甲.卯门 纬转 乙.午门) 定位标注("奔赴", .7, -120);
路(乙甲, 乙.酉门 纬转 甲.丑门) 标注("回归", 0);
三种标注

这三种标注方式里,最后一个参数,诸如上述示例中的 45-1200 皆为标注文本的倾斜角度。0 表示不倾斜。45 表示绕标注文本中心逆时针旋转 45 度角,-120 表示绕标注文本中心逆时针旋转 120 度角。标注文本倾斜角度参数仅仅是定性用途,不必追求准确,因为这三个标注宏会根据标注基准点位置的切向和法向确定标注文本的方位。

路标 的第 3 个参数和 定位标注 的第 2 个参数结尾曲线参数值,,取值范围为 [0, 1],参数值为 0 或 1 时,表示曲线的起点或终点;这两个宏可基于该参数值获得曲线上的相应位置作为标注文本的基准点。

标注 不需要基于曲线参数确定标注基准点,因为它会自动选择路径中最长的一段,以其中点(曲线参数值为 .5)作为标注基准点。

在上述示例中,甲乙 的标注,其倾角 -120 只能获得我们期望的标注方位,但是文字倒立,影响观感,只需在 ConTeXt 层面将文字旋转 180 度,便可使之正立。例如

\def\旋转[#1]#2{\rotate[rotation=#1]{#2}}
\startuseMPgraphic{foo}
... ... ...
弯路(甲乙, 甲.卯门 纬转 乙.午门) 定位标注("\旋转[180]{奔赴}", .7, -120);
... ... ...
\stopuseMPgraphic
文字正位