我无法让 AUCTeX 在数学模式下完成用户定义的命令。
例如,TeX-complete-symbol
在下面的文档中在数学模式之外工作,但如果我在命令名称前面添加一个美元符号并返回,它就会停止工作TeX-complete-symbol: Can’t find completion for "\rnd"
。
梅威瑟:
\documentclass{article}
\newcommand{\rndvar}{X}
\begin{document}
\rnd% TeX-complete-symbol works here
$\rnd$% but not here,
$\rnd% nor here.
\end{document}
我使用的是 GNU Emacs 25.2.2,AUCTeX 是 v. 12.1.2。我的init.el
包括
(require 'package)
(package-initialize)
(require 'reftex)
答案1
如果你打开上面的示例文件并执行C-h v TeX-complete-list RET,你会在值中看到如下列表项:
(LaTeX--after-math-macro-prefix-p 1
(lambda nil
(append
(mapcar #'cadr LaTeX-math-list)
(mapcar #'cadr LaTeX-math-default)))
(if TeX-insert-braces "{}"))
这意味着在数学表达式中,补全函数会在变量LaTeX-math-list
和LaTeX-math-default
补全候选项中查找。 LaTeX-math-list
是供用户自定义的。作为测试,您可以在文档中添加如下注释:
% (setq LaTeX-math-list '((nil "rndvar" nil nil)))
将光标放在最后一个括号后并点击C-x C-e。现在再试TeX-complete-symbol
一次。对我来说,它有效并且看起来像这样:
现在您已使此添加永久生效。您可以使用界面custom
,在文件本地基础上进行添加:
%%% Local Variables:
%%% mode: latex
%%% TeX-master: t
%%% eval: (add-to-list 'LaTeX-math-list '(nil "rndvar" nil nil))
%%% End:
甚至编写您自己的 AUCTeX 风格(这是我的选择)。
在运行完成时,Emacs 可能会在 Minibuffer 中抛出这样的消息:
TeX-complete-symbol: Wrong type argument: stringp, (if TeX-insert-braces "{}")
这似乎是一个错误。请将其报告给[email protected]
。