我在 AUCTeX 中插入数学符号时遇到了一些麻烦,我可能遗漏了可用结构和选项中的某些内容。但由于我苦苦挣扎了一段时间,我不妨问一下。
我知道LaTeX-math-mode
,我启用了它,而且我(认为我)知道它应该如何工作。但是,我处于一种中间立场,因为我不大量使用数学,所以超出范围的绑定LaTeX-math-abbrev-prefix
并不真正起作用,但有时我确实需要它。此外, 中的许多(大多数?)符号LaTeX-math-default
的绑定都设置为nil
。
我也知道,如果绑定失败,我可以重新使用菜单LaTeX-math-mode
提供的功能。但总体而言,我发现菜单不太方便,如果可能的话,我宁愿避免使用它们。
我还知道补全(使用“CMi”,又名“穷人的 M-TAB”)在数学模式下有效。如果我碰巧知道命令的开头,这已经很有帮助了。但是,假设我想在任意数量的箭头中进行选择……
因此,据我所知,从集合中插入数学符号LaTeX-math-default
将LaTeX-math-list
取决于数学前缀后的绑定(如果有的话),使用“CMi”完成,或者作为最后的资源,取决于菜单。
尽管如此,我还是希望在 的项目中(通常的)找到LaTeX-math-default
和的项目,但它们似乎在那里不可用。这让我感到好奇,因为例如“amssymb”的样式文件在 部分中包含了它的项目。因此,如果我加载,我会发现可用,但找不到或。LaTeX-math-list
TeX-insert-macro
C-c RET
TeX-add-symbols
amssymb
\upharpoonright
TeX-insert-macro
\ldots
\sum
这是预期的行为吗?我遗漏了什么吗?这些符号在那里不可用,是因为它们不应该在那里,因为有更好的方法可以找到它们吗?我是否错过了使它们在那里可用的配置?
最后,如果我的期望不是不合理的,我怎样才能正确地将这些项目纳入LaTeX-math-default
候选LaTeX-math-list
之中TeX-insert-macro
?
我的 AUCTeX 配置中的一些相关项目(在 下use-package
):
:hook (LaTeX-mode . LaTeX-math-mode)
:custom
(TeX-auto-save t)
(TeX-parse-self t)
(TeX-complete-expert-commands t)
(TeX-insert-macro-default-style (quote mandatory-args-only))
(LaTeX-math-abbrev-prefix "C-$")
(TeX-electric-math (cons "\\(" "\\)"))
环境:AUCTeX 12.1.2,Emacs 26.2
答案1
好吧,我在这方面取得了一些进展,我也可以分享一下。
包含的 LaTeX 默认数学符号LaTeX-math-default
似乎确实不会默认加载到的完成列表中TeX-insert-macro
。我没有详细跟踪代码,但我已使用 进行了测试emacs -Q
。
这似乎确实是故意设计的,因为担心不让完成列表变得臃肿TeX-insert-macro
。(此主题表明存在这种担忧)。
现在,我个人认为这种担忧在默认完成框架的上下文中更为相关,但如果你碰巧使用其他完成框架(例如ivy
或 )helm
,这种担忧就不那么重要了,因为它们可以更好地处理更多的候选项(当然,不是无限的)。
我还没有找到任何标准方法来包含用于生成候选项的项目LaTeX-math-default
和。LaTeX-math-list
TeX-symbol-list
TeX-insert-macro
但我这样做了:
;; Math mode is nice, but it would be nicer to have math symbol completion
;; with 'TeX-insert-symbol' ("C-c RET"). I’m probably missing something,
;; but this should work until I learn the proper way to do it.
(defun my/auctex-add-math-to-TeX-symbol-list ()
"Add math symbols in `LaTeX-math-default' to `TeX-symbol-list'.
Also those eventually in `LaTeX-math-list'. "
(apply 'TeX-add-symbols
(seq-filter 'stringp
(append (mapcar #'cadr LaTeX-math-list)
(mapcar #'cadr LaTeX-math-default)))))
(add-hook 'LaTeX-mode-hook #'my/auctex-add-math-to-TeX-symbol-list)
就是这样,以防其他人也认为这是一个有趣的方法。