如何配置Yasnippet实现LaTeX数学模式的切换与文本处理
Yasnippet实现LaTeX数学模式智能切换
优化现有行内数学模式片段
你现有的行内数学模式片段可以简化,直接将触发键绑定为$即可:
# name: inline-math # key: $ # binding: $ # --\\\(${1:math}\\)$0
实现数学模式智能切换(类似TeXstudio宏功能)
Yasnippet支持嵌入Elisp代码,通过编写逻辑可以检测光标周围的数学环境并完成切换。创建一个名为math-toggle.yasnippet的片段,内容如下:
# name: math-toggle # key: $ # binding: $ # --`(let* ((pos (point)) # (left (buffer-substring-no-properties (- pos 2) pos)) # (right (buffer-substring-no-properties pos (+ pos 2))) # (inside-inline (and (string= left "\\(") (string= right "\\)"))) # (inside-display (and (string= left "\\[") (string= right "\\]")))) # (cond # (inside-inline # (delete-region (- pos 2) (+ pos 2)) # (insert "\\[" "${1:math}" "\\]") # (backward-char 1)) # (inside-display # (delete-region (- pos 2) (+ pos 2)) # (insert "\\(" "${1:math}" "\\)") # (backward-char 1)) # (t # (insert "\\(" "${1:math}" "\\)") # (backward-char 1))))`$0
逻辑说明
- 通过Elisp获取光标位置,读取前后各两个字符,判断是否处于
\(\)或\[\]环境中 - 如果在
\(\)内:删除原环境,替换为\[\],并将光标定位到数学内容的编辑位置 - 如果在
\[\]内:删除原环境,替换为\(\),同样定位光标到编辑位置 - 如果不在任何数学环境:插入
\(\)行内数学模式,光标定位到内容编辑处
使用方法
将上述片段文件放到你的Yasnippet LaTeX模式目录下(通常是~/.emacs.d/snippets/latex-mode/),重启Emacs或重新加载Yasnippet即可生效。按下$键时,会根据当前环境自动切换或插入数学模式。
内容的提问来源于stack exchange,提问作者Frank William Hammond
相关产品推荐
相关产品推荐

