优化你的 Texstudio 编辑体验

对于中文背景的用户来说,恐怕没有比想打出 $$ 却由于输入法没来得及切换,最后打成了 ¥¥ 更让人抓狂的日常了。
尽管现在有 overleaf、texpage 、slager 等一系列 $\LaTeX$ 在线编译网站,但他们依旧难以为此提供便利。线上渲染正变得越来越小气。如果想要尝试编译更大、更复杂、更长的文档又不愿付费,本地化软件永远是最好的选择(只要没有协作编辑的需求),同时也意味着更大的自由。
- $\LaTeX$ 教程可参见如何在1小时内快速入手LaTeX?
宏命令
对于中文背景的 $\LaTeX$ 用户来说,恐怕没有比打出 $$ 却由于输入法没来得及切换打成了 ¥¥ 更让人抓狂的日常了。
Obsidian 留住我的原因是极其便利的写作插件:
- 快捷命令:
commander、editing toolbar - 图片转化:
image converter - 写作增强:
easy typing - ……
尤其是写作增强的 easy typing,支持自定义补全、中英文自动空格、无缝中英字符切换——例如连续两次输入 ¥¥ 就会自动变成 $$。
那么问题在于,如何使得 texstudio 实现同样的功能呢?
答案是自定义宏。Texstudio 支持自定义宏定义,详细语法参见官方文档 Personal macros。
正常模式的宏可以理解为文本转化和补全。我在触发器中写入 ¥¥¥¥ (注意,此处结尾故意留下了一个空格)。%| 代表补全后的光标位置。
个人宏还可以自定义快捷键,例如下图我设置了 Ctrl+M 作为 $$ 插入的快捷键。当我输入 ¥*2(空格) 时,也会自动触发转化。
个人宏还支持脚本顺序,如果会玩可以玩出各种花样(例如一环扣一环的转换)。因此写宏时要注意顺序,将更严格的正则检验宏放在上面,例如 ¥¥¥¥转$$$$ 应当放在 ¥¥转$$ 之前。
环境模式感觉很鸡肋,完全能用正常模式替代。
脚本模式更加灵活,支持 java script 语言。
个人写了一个是,能把 -内容1-内容2-内容2(tab 键) 格式的内容转化为代码:
\begin{内容1}[内容2]\label{内容2}
\end{内容1}顺便进一步设置了个映射,如果内容 1 是“证明”,就转化为“proof”; 是“概念”,就转化为“definition”。
代码如下:
// ===== 环境中英文映射 =====
var envMap = {
"定理": "theorem",
"引理": "lemma",
"命题": "proposition",
"性质": "proposition",
"练习": "exercise",
"思考题": "exercise",
"思考": "exercise",
"问题": "exercise",
"推论": "corollary",
"定义": "definition",
"概念": "definition",
"例子": "example",
"备注": "remark",
"注意": "remark",
"笔记": "note",
"注释": "note",
"案例": "case",
"证明": "proof",
"证": "proof",
"练习": "exercise"
};
// ===== 获取匹配内容 =====
var env = triggerMatches[1]; // 环境
var title = triggerMatches[2]; // 标题
var label = triggerMatches[3]; // 标签
// ===== 转换中文环境为 LaTeX 英文环境 =====
if (envMap[env]) {
env = envMap[env];
}
// ===== 构造 LaTeX 代码 =====
var txt = "\\begin{" + env + "}";
if (title) txt += "[" + title + "]";
if (label) txt += "\\label{" + label + "}";
txt += "\n\n\\end{" + env + "}\n";
// ===== 插入文本 =====
cursor.insertText(txt);
// ===== 调整光标位置到环境内部 =====
cursor.movePosition(2, cursorEnums.Up);
cursor.movePosition(1, cursorEnums.StartOfLine);触发器设置为
\-(.+)\-(.+)\-(.+)\t
*\t 是tab键
*(.+) :括号就是一个环境,代表分隔符-中的环境。其中.+代表一个及其以上字符,如果要求至少两个字符,使用.+.即可。逻辑也不难,触发器三个括号的正则识别内容对应着代码里的 env 、title、label。填入构造代码模板,然后移动光标。(唯一问题是 texstudio 正则识别对中文符号的兼容太差了)
Texstudio 配置语言助手
Texstudio 页面。
先下载 java (请自行寻找教程)
然后下载免费的语法检查助手—— https://languagetool.org/download/
下载自己对应的电脑版本,我是 win 系统加最新版 texstudio,所以选择 LanguageTool-6.6.zip。
下载好之后解压对应的 languagetool 压缩包。在对应的文件夹页面打开 cmd(直接在路径栏输入 cmd 即可从这里打开)
然后运行 java -jar languagetool. Jar
打开后,text checking - 选项 进入页面,设置语言、服务器端口。
设置完成后,进入 texstudio 设置最下面的 languagetool 即可。
之后重启 texstudio,在帮助检查语言工具即可:
波浪线对应的就是语法错误。
右键错误地方就会有更正提示:
一些快捷键
Ctrl+ 鼠标左键:可以快速定位(跳转到源代码或 PDF 对应位置)。Ctrl+Shift+I:可以迅速添加\item(用于列表环境itemize/enumerate)。Ctrl+T:可以快速添加、取消注释(对当前行或选中的多行)。Ctrl+Shift+M:可以快速添加行内代码,例如在光标位置添加$ x $。Ctrl+Shift+N:可以增加equation环境(例如\begin{equation} ... \end{equation})。Alt+Shift+M:可以增加显示的代码(通常是数学环境,例如$$...$$或\[ ... \])。
其他提示
活用左边列的符号收藏功能。
代码编辑页面右键可以跳转 pdf 渲染位置。
Ctrl 键点击 pdf 位置可以跳转代码编辑位置。
Texstudio 支持行内预览。alt+p 启动,但是可能和其他模板渲染设置冲突。例如我使用了 elegent 系列的模板就无法查看预览了。
