我有以下 Emacs 宏,它评估TeX-insert-macro
选定文本上的 AucTex 命令:
(eval-after-load "latex"
'(progn
(define-key LaTeX-mode-map (kbd "C-c (")
(lambda ()
(interactive)
(TeX-insert-macro "command")))))
但是,我将如何对所选文本执行正则表达式并将其传递给TeX-insert-macro
?
例如:假设我有以下文本:
…如图 (24) 所示。
现在,假设我选择“(24)”。然后,我想要一个命令将其转换为:
…如图 \command{eq:24} 所示。
即,我将如何定义一个新的 Emacs 命令,我可以放置在~/.emacs
该命令中,该命令将C-C RET command RET
在所选文本的正则表达式版本上运行?
为什么下面的正则表达式不起作用?
(eval-after-load "latex"
'(progn
(define-key LaTeX-mode-map (kbd "C-c )")
(lambda ()
(interactive)
(query-replace-regexp "\(([0-9]+)\)" "\1")
(TeX-insert-macro "eq")
))))
小改进:
如果我从左到右选择例如“(45)”然后通过键入运行代码,这会很好用C-c )
(eval-after-load "latex"
'(progn
(define-key LaTeX-mode-map (kbd "C-c )")
(lambda ()
(interactive)
(exchange-point-and-mark)
(replace-regexp "[\(\)]" "")
(TeX-insert-macro "eq")
))))
但是,如果我从右到左选择“(45)”,它就不起作用,因为点和标记被翻转了。有没有办法确保点和标记不翻转,例如在exchange-point-and-mark
翻转时运行?
此外,正则表达式还有其他问题,例如,如果附近有其他括号,它会变得贪婪。
谢谢