我想制作一个插入 \left \right 分隔符的宏,但我想只写一次,并让不同的绑定传递不同的分隔符。也就是说,我想添加以下代码:
(setq LaTeX-math-list (quote ( ("C-(" (LaTeX-my-leftright "(" ")") "" nil)
("C-{" (LaTeX-my-leftright "\{" "\}") "" nil)
)))
该程序执行以下操作:
(defun LaTeX-my-leftright (charopen charclose)
"Inserts the pattern '\leftC \rightD' where C is the open input char and D the closed, and places the cursor in the center."
(interactive)
(setq out1 (concat "\\left" charopen " "))
(setq out2 (concat " \\right" charclose))
(insert out1)
(push-mark)
(insert out2)
(exchange-point-and-mark)
)
但是,当我通过按 ` 然后按 C-( 来运行它时,我得到了一个
错误类型参数:commandp (LaTeX-my-leftright "(" ")")
错误信息。
有人知道这里正确的语法是什么吗?或者使用 LaTeX-math-list 是否可行?我查看了一下 latex.el 文件,开始认为答案是否定的,但也许我错过了什么。
答案1
该value
插槽需要是一个 0 参数交互函数而不是一个求值表达式,还\{
需要额外的引用级别\
才能将反斜杠放入 lisp 字符串中。
这似乎有效
(setq LaTeX-math-list (quote (
("C-(" (lambda ()(interactive)(LaTeX-my-leftright "(" ")")) "" nil)
("C-{" (lambda ()(interactive)(LaTeX-my-leftright "\\{" "\\}")) "" nil)
)))