Skip to content

自定义快捷键和宏(宏编辑器)

宏和快捷键是 Liii STEM 中提升编辑效率的两大法宝。快捷键让你一键触发常用操作,而宏则允许你将重复的内容封装成简短命令。本文先以自定义快捷键为例带你入门,随后深入介绍宏的创建与编辑。

本文范围:本文只介绍通过宏编辑器快捷键编辑器进行图形化编辑的方法。如果你希望直接编写源码或在导言区中定义宏,请参阅 快速入门 Scheme

1 自定义快捷键

Liii STEM 支持为任何环境,标记或宏命令创建自定义快捷键,让你摆脱频繁敲击长命令或在菜单栏中逐层查找的烦恼。

1.1 为环境创建快捷键(以定理环境为例)

在科技写作中,定理环境是使用频率极高的语义块。根据 文本模式完全指南,插入定理环境现有两种方式: 输入 \theorem 后回车 或者 通过菜单栏 插入语义块定理 插入。当你需要频繁插入定理时,这两种方式都略显繁琐。更高效的做法是为定理环境绑定一个专属快捷键。

提示:虽然我们以定理环境为例,但任意 Liii STEM 环境(章节,语义块,高亮,数学公式等)都可以用同样的方法为其定义快捷键。

将光标置于任意定理环境内,点击焦点工具栏的扳手图标(样式选项),在弹出的菜单中选择 编辑快捷键...,即可进入快捷键编辑器:

焦点工具栏样式选项菜单
图 1:焦点工具栏的「编辑快捷键...」入口
快捷键编辑器界面
图 2:快捷键编辑器

图 1 所示,焦点工具栏的扳手图标提供了针对当前环境的多种自定义选项,其中 编辑快捷键... 即是我们为定理环境添加快捷键的入口。

进入快捷键编辑器(图 2)后,左侧列表可以查看已定义的快捷键,右侧可以为当前环境设置新的快捷键组合。例如,我们可以为定理环境自定义 T + Tab (图中为macOS的快捷键显示, Windows会有不同) 作为快捷键。你会发现,在填写快捷键时,宏命令会自动填写 —— 这是因为每个快捷键背后本质上都是调用一个宏命令(而不是环境)来完成操作的。

试一试:为定理环境设置一个你喜欢的快捷键(例如 T + Tab),然后在文档中测试它。

除了为特定环境设置快捷键,你也可以通过菜单栏 工具键盘编辑键盘快捷键,打开快捷键编辑器页面进行更系统的管理。

除了环境外,您也可以框选任意内容,并为此内容定义一个宏,然后为这个宏定义一个快捷键。

到这里,你已经了解了快捷键的基本用法。接下来我们将深入介绍宏的创建与编辑。

2 宏:定义,创建与编辑

宏是 Liii STEM 中非常强大的功能,它允许你将重复的内容封装成一个简短命令。例如,如果你经常需要输入 "南方科技大学",可以定义一个名为 sustech 的宏,之后只需输入 \sustech 回车即可自动展开。宏的优势在于:当你需要修改内容时,只需修改宏定义,所有使用该宏的地方会自动更新。而第1节提到的快捷键,本质上就是通过按键组合来快速调用某个宏命令。

Liii STEM 提供了图形化的宏编辑器,无需编写代码即可创建宏。

2.1 宏与环境:以 Theorem 为例

在 Liii STEM 中,(Macro)和环境(Environment)是两个密切相关但层次不同的概念。以 Theorem(定理)为例:

  • 是一段可展开的文本或命令替换。当你输入 \theorem 回车时,Liii STEM 实际上是在调用名为 theorem 的宏,宏展开后生成创建 Theorem 环境的指令。
  • 环境是宏展开后创建的带结构的排版容器。Theorem 环境会自动处理编号(如"定理 1.")、字体样式、间距等排版规则。也就是说,环境是宏展开的结果,而不是宏本身。

以我们前面定义的 sustech 宏为例:它的宏体是 "南方科技大学",展开后就是一段纯文本,不带任何结构或样式。而 theorem 宏的宏体则是一段 Scheme 代码 (make 'theorem),它的作用是调用 Liii STEM 的内部函数 make 来创建一个 Theorem 环境

选读:Scheme 代码解读(make 'theorem) 是 Liii STEM 底层使用的 Scheme 语言表达式。其中 make 是一个函数,'theorem(注意前面的单引号)表示符号(symbol)theorem。整句的含义是:"调用 make 函数,创建一个 Theorem 环境"。这与你在文档中输入 \theorem 回车的效果完全一致,只不过前者是底层实现,后者是用户界面。

举一反三:同样的道理,如果你为前面定义的 sustech 宏分配了快捷键,那么快捷键编辑器中自动填写的 Scheme 代码也是 (make 'sustech)\sustech 在文档中展开为 "南方科技大学",而 (make 'sustech) 就是这个展开操作的底层实现。

想了解更多 Scheme 代码的写法?请参阅 快速入门 Scheme

也就是说:快捷键 → 调用宏 → 宏展开为 Scheme 代码 → 创建环境或插入纯文本

小结:宏是可展开的命令;环境是宏展开后生成的结构化排版容器(带编号、样式等)。\theorem\sustech 本质上都是宏,只是前者展开后创建环境,后者展开后仅输出纯文本。快捷键通过调用宏来间接创建环境。

2.2 创建简单宏

点击菜单栏 工具宏命令新建宏,打开宏定义小部件。在 enter-name 的位置 (鼠标点击即可,无需删除 enter-name)输入宏的名称,如 sustech,在 ≔ 符号下方输入宏的内容,如 南方科技大学。完成后点击 使用确认。现在你的宏已经定义好了,你可以通过键入 \sustech 回车多次使用它。

工具栏宏命令菜单
图 3:菜单栏「工具」→「宏命令」→「新建宏」
宏编辑器界面
图 4:宏编辑器中输入名称和内容

试一试:创建一个名为 pku 的宏,内容为 "北京大学",然后在文档中调用它。

2.3 创建带参数的宏

宏还可以接受参数,让每次调用时填入不同的内容。假设你希望定义一个生成对角矩阵的宏 diag,并附加约束:符号 x 和 n 可以在每次使用宏时更改。

与前面的示例一样输入宏的名称后,你可以使用 Alt + 快捷键插入额外的宏参数,例如 x 和 n。在输入宏的内容时,可以通过键入 \x 回车和 \n 回车在内容内部使用这些参数。使用 \diag 回车应用宏时,将为每个参数提供一个空的且可编辑的插槽。

这里需要区分两个概念:参数的定义和参数的引用。在宏编辑器中,你首先使用 Alt + 定义了参数 xn,这些是在宏头部声明的形式参数。而在编写宏内容时,你输入 \x 回车,这表示引用前面定义好的参数 x,将其值插入到当前位置。如果不加反斜杠直接输入 x,那只是一个普通字母;加上反斜杠后,Liii STEM 会将其识别为宏参数引用,并以棕色显示以作区分。

带参数宏示例

小技巧:在普通文档中先设计好原型(如输入一个对角矩阵),然后将其复制粘贴到宏编辑器的内容区域,再把变量替换为参数引用,这是创建复杂宏的高效方法。

提示:在宏编辑器中创建宏时,也可以同时为其分配快捷键。这样,你不仅可以输入 \宏名 来调用,还可以直接通过快捷键触发。此外,你也可以先选中任意内容(通过鼠标或者键盘 Shift + / / / / Home / End,macOS 上为 Command + / ),再为其创建宏并绑定快捷键。详见 《高效编辑指南》 3.1 节 文档的结构化遍历

3 修改/重定义现有宏

除了创建新宏,你还可以自定义 Liii STEM 内置的现有宏,或者修改文档中已有的宏定义。

3.1 通过焦点工具栏修改

要修改已创建的宏,最快捷的方式是将光标放在宏标签内部或紧随其后,然后使用以下任一方式打开宏编辑器:

  • 点击 焦点首选项编辑宏
  • 点击焦点工具栏中的扳手图标编辑宏

例如,假设你之前定义了一个 sustech 宏,内容为 "南方科技大学"。现在你希望把内容改为 "SUSTC",你只需要把光标放在 sustech 标记内部或紧随其后,按上述方式打开宏编辑器,把内容改为 "SUSTC",确认后文档中所有使用 \sustech 的地方都会自动更新为 "SUSTC"。

3.2 通过宏编辑器列表修改

你也可以通过菜单栏 工具宏命令编辑宏 打开宏编辑器,在左侧列表中搜索并选择要编辑的宏。只要可用,宏的简短描述就会显示在文档区域中。这种方式特别适合当你不确定宏名称,或者需要浏览所有可用宏时。

3.3 选读:理解宏的结构

在编辑宏时,了解宏的结构非常重要。Liii STEM 的宏往往是分层的,一个宏可能依赖于其他子宏。

例如,proof 环境的内部结构如下:

<assign|proof|
  <macro|body|
    <render-proof|<proof-text>|body>>>

这里 proof 宏调用了 render-proof 子宏,而 render-proof 又进一步调用了 qed 宏来生成证明结束符号 \square

如果你希望将证明结束符号从 \square 改为 \blacksquare,直接修改 qed 宏的定义即可,而不需要修改 proofrender-proof。要深入修改此类底层子宏(如 qed),通常需要进入文档的导言区(Preamble)进行编辑。你可以通过菜单栏 文档显示导言(或快捷键 Command + Option + p)打开导言区视图。

建议:在自定义现有宏之前,先调查其依赖树,识别控制你希望更改行为的那些子宏,这样可以避免不必要的修改。如果你想系统性地管理所有宏定义和子宏依赖,请参阅 在导言区编辑宏(即将推出)。

4 进一步学习

宏编辑器适合快速定义简单宏和进行基本定制。如果你需要编写更复杂的宏,或者希望一次性管理所有宏定义,请参阅 在导言区编辑宏(即将推出)。

如果你想深入了解 Liii STEM 的样式语言底层,可以参考 快速入门 Scheme

需要一份完整的快捷键速查表?请参阅 Liii STEM 的键盘快捷键