回上级页面

新蜗牛 · 附录

2023 年 05 月 21 日


上一篇:后记

世上会有很多人,为了一口醋,包了一顿饺子。

上一篇说「新的 snail 模块充斥了以中文命名的宏,在使用时,建议将输入法的标点符号设为半角模式」,这两天为了不依赖输入法(毕竟切换输入法模式也还是有些麻烦),写了一份脚本 zhe,其安装和用法见「zhe:有时想写中文宏……」。使用 zhe 可将新蜗牛代码中的中文标点替换为英文标点,当然也可以做其他文本替换。

假设 macros.m4 中有以下 m4 宏定义:

divert(-1)
define(`,', `,')
define(`;', `;')
define(`「', `"')
define(`」', `"')
define(`(', `(')
define(`)', `)')
define(`·', `.')
define(`位于', ` 位于 ')
define(`偏', ` 偏 ')
define(`|__', `经转')
define(`-^-', `越过')
divert(0)dnl

假设包含新蜗牛绘图代码的文件为 z-foo.tex,其中与 snail 绘图代码为

... 其他内容 ...
@ 宏开
@ 野蛮模式
宫(甲,「甲」);
宫(乙,「乙」)位于甲偏(东 3cm);
呜呼 甲,乙;

路(甲乙,甲·卯门 -- 乙·酉门);
路(乙甲,(乙·午门 |__ 乙·巽位 |__ 甲·坤位 -- 甲·子门) -^- 甲乙);
@ 宏闭
... 其他内容 ...

使用以下命令可基于 z-foo.tex 生成 foo.tex:

$ zhe -i macros.m4 -o foo.tex z-foo.tex

所得 foo.tex 的内容为

... 其他内容 ...
宫(甲,"甲");
宫(乙,"乙") 位于 甲 偏 (东 3cm);
呜呼 甲,乙;

路(甲乙,甲.卯门 -- 乙.酉门);
路(乙甲,(乙.午门 经转 乙.巽位 经转 甲.坤位 -- 甲.子门) 越过 甲乙);
... 其他内容 ...

zhe 的 野蛮模式,是只对无参数的中文 m4 宏予以展开。之所以设置该模式,是因有参数的中文 m4 宏与 snail 绘图代码中的 MetaPost 宏调用语法产生冲突。

开启 zhe 的 野蛮模式 后,可使用 优雅模式 将其关闭:

@ 宏开
@ 野蛮模式
... 只允许无参数宏展开 ...
@ 优雅模式
... 除无参数宏,形如(宏,参数)的有参数宏亦可得以展开 ...
@ 宏闭