Featured image of post TeXmacs tips: 给定理环境添加别名

TeXmacs tips: 给定理环境添加别名

A method to use thm, def etc. for short to enter related environment in Texmacs...

Texmacs是一款非常容易上手和方便的排版工具。它拥有的方便特性对于经常写数学笔记和作业的我非常方便。其他类似于 Typora 的 Markdown 工具虽然也拥有一部分的优势,但是面对大量数学公式时,并不能快速输入数学公式,解析使用的 MathJax 和 KaTeX 也没有那么流畅。

熟悉 LaTeX 的用户很容易能上手 TeXmacs,但是想要进阶使用并没有那么容易。比如最近我厌烦了用鼠标点击定理环境(包括定义、命题等等),使用 \theorem 之类的命令也似乎增加不了多少效率。于是我想着能新建一个新的宏,使用 \thm 代替定理环境的命令。

然而解决的进展的并不一帆风顺。我尝试查看官方文档以及谷歌搜索寻找答案,没有找到任何有用的资料。一无所获的我想到的是去看看 TeXmacs 的源文件。幸运的是我知道了相关文件,

1
/Applications/TeXmacs.app/Contents/Resources/share/TeXmacs/packages/environment/env-theorem.ts

里面有类似于 <new-theorem|theorem|Theorem> 的大量内容。我尝试添加类似的一行命令<new-theorem|thm|Theorem>。之后重启程序,不过并没有什么用处,:cry:。

之后我重新打开了宏编辑器,看了看 theorem 的宏命令。不过宏命令(定义内容)可以复制出来,但是定义头 <theorem | body>:= 无法复制,且后面的 body 是特殊的 Argument, 无法复制(在定义内容中也有)。当然单纯键入body 是无效的。当时我尝试的例子是 definition环境。首先尝试过先输入未定义的 \def 回车,然后在焦点工具栏中选择扳手符号设置,在设置里,可以(复制粘贴)填入 definition 环境的定义内容。这样的效果是输入 \def 并且回车后可以得到一个看起来符合条件的 \definition,但是由于无法在定义头中写明body,故而只会生成 definition 的空环境,无法输入内容,如下图。

amqXDtYJ8dTf6Gn.png

由于发现,宏编辑器中并不能很好地利用源文件和宏命令的工具栏,故而我转向打开文件的 preamble格式(菜单栏 Tools>Macros>Edit preamble...)。

根据 preamble 的工具栏中的各个命令的名称,我猜测可以使用 asign 来定义一个环境的别名。于是我尝试输入:

1
<\assign|def|definition>

这样得到的 \def 只会输出文字 definition,并不是我想要的。如果给 definition 加个反斜杠,可以得到之前的方法得到的半成品。于是我尝试所有的源码宏命令的各个选项,偶然间我发现可以给 definition 加一个 \value 命令。这样完美解决了这一需求,参见下面这个 gif。

TeXmacs-assign-def.gif

不过直接在文档内添加这一指令,生效后会隐藏,但是可能会不小心删除。我们可以把它添加到 preamble 中的<hide-preamble| >内。

image-20200627202256218.png

whzecomjm

Jun 27, 2020 20:19:22


过了两天,我发现在 Macros editor 中直接修改 definition 的名字(只保留 def),再点击 OK,也是能做到使用 \def 来得到一个定义环境。我之前也有想过这样直接改,但是怕修改会替换原本的宏,导致前文中使用完整 definition 的环境会无法显示。实际上,这会生成一个新的宏,且不会对本来的宏产生影响。

另,打开 Extract style 可编辑宏和不显示的源码,这比 Edit preamble 更高效。

不过进一步发现上面两种方法都会导致导出 latex 不能编译或者生成大量的宏代码。今天看TeXmacs 作者的一篇介绍文章中讲到了一种新的方式,这种新的方式更加简便。即在 my-init-texmacs.scm 中加入如下代码即可:

1
2
3
4
5
6
(kbd-map
("D e f ." (make 'definition)) 
("L e m ." (make 'lemma)) 
("P r o p ." (make 'proposition)) 
("T h m ." (make 'theorem))
("E x ." (make 'example)))

之后输入 Def. 等就能自动生成定义环境等。

whzecomjm

Jun 30, 2020 10:50:44

Licensed under CC BY-NC-SA 4.0
Built with Hugo
Theme Stack designed by Jimmy