article_image

《用 Keyboard Maestro 快速设置 Word 样式,并自动生成目录》一文中,我将 Keyboard Maestro、AppleScript 和 VB 宏贯通起来,以便快速为 Microsoft Word 中的文本设置样式(Style)。不过,这一方案并不让人十分满意,盖所涉工具过多,正如数学家波利亚所言:

链条的强度不会高于其最薄弱的环节。

原方案容易从 VB 这一环开始崩溃。当我自己从零开始创建一份文档时,并无大碍;但收到别人的文件,就很吃力,因为原方案中的 VB 脚本基于 Word 模板文件,而别人发来的文档,当然不会使用我的模板,故尝试运行 VB 宏时,基本都会报错。倒不用完全抛弃原方案,只是设置**字体格式(样式)**这一功能,杂糅了两个操作,应当分开讨论:

  1. 单纯设置字体格式(本文语境下,也包括段落格式),例如粗体、居中、颜色、字体家族以及大小等等。
  2. 将某一套字体格式设置成字体样式(Style),主要用于生成可点击的目录,写论文时常见相关操作。

原方案兼顾两者,难免叠床架屋;而本文仅追求调整字体格式,不过问目录,故可一切从简,仅用 AppleScript 就能完成核心工作;至于 Keyboard Maestro,则是提供一个躯壳,方便 AppleScript 栖身其中而已,诸君大可换为其他自动化工具——我个人只是拣顺手的用。

Alt text
一键设置文本格式

理解 Word 的 AppleScript 字典

我已经把代码写好了,这节不想看的可以不看。

作为 macOS(旧为 OS X)中的老牌软件,Microsoft 套件保留1继承了数量不少的 AppleScript 遗产,可以用更原生的方式调整字体格式。AppleScript 的特点众所周知,即如英语一般直白,通常只需学上两三句,就很容易举一反三。例如把字体设置成仿宋,就可以用 set name of font object of 目标区域 to "仿宋"2

Alt text
Microsoft Word 的 AppleScript 字典

使用 AppleScript,最基本的公式是 set 属性 of 元素 to 值,如同做汉堡或三明治一样白搭,当然,偶尔会遇到像 Word 文本——本文中指 text range,由于不需要你改动,就不深究——这样的复杂对象,有着一层套一层的属性,不过也只要连续套 of 就行。下面是“十五号宋体,不加粗”的代码,适合公文排版:

set name of font object of 目标区域 to "仿宋"
set font size of font object of 目标区域 to 15
set bold of font object of 目标区域 to false

除了字体,调整格式还涉及段落 paragraph format,我们在图形界面中所见的几乎每一项参数——具体我可真没一一核对过——都有对应的 AppleScript 版本,换言之,原本需要点半天的操作,完全可以写成一段 AppleScript,一次性搞定。

set line spacing rule of paragraph format of selection to line space exactly
set line spacing of paragraph format of selection to 26
set character unit first line indent of paragraph format of selection to 2

将 AppleScript 封装为 Keyboard Maestro 动作

Keyboard Maestro 本身就有运行 AppleScript 的模块,所谓封装,无非是复制粘贴的功夫,不足挂齿。真正有价值的是 Keyboard Maestro Palette 这一操作方式,可大大降低记忆快捷键的负担。我在图中仅展示了两种文本格式动作,但在实际使用中,很可能有七八种甚至十几种,一一设置快捷键并不现实。

所谓 Palette,就是一个浮动的小工具栏,可将一类动作放在一块儿,非常适合功能本就超载的 Markdown Word。只需将设置格式的各个动作绑上同一个快捷键,使用时就不会直接运行——Keyboard Maestro 的设计者当然不可能笨到同时运行所有动作——而是弹出一个浮窗,供你继续选择。我在《Keyboard Maestro Palette:macOS 上的全能工具箱》稍稍深入介绍了这一特性,不妨一读。

小结

给文字设置格式,原为小事,若是习惯用 Markdown 者,完全可以配置 CSS 文件,从此一劳永逸。而 Microsoft Word 却不让人省心,手动操作无论多么细心,也难免出错——偏偏商业和公务交流中,Word 不可避免,遂有多次琢磨。

相比以往,本文只求设置文字格式,不再过问目录问题,所觅得的方案也更为清爽、简单、稳定。


  1. 或许说“遗留”乃至“残留”更合适,因为如今的 Word、Excel 和 PPT 三件套的 AppleScript,完全是各自为政,各变异进或遭侵蚀的程度都不同,例如 Excel 就缺失了一部分文件相关的代码。
  2. 代码中的“目标区域”只是一个代称,您直接复制的话,无法运行。

author_avatar

Lawyer, macOS/iOS Automation Amateur