这里是 Emacs 新手。所以现在我正在使用 Emacs 进行一个相当大的 LaTeX 项目,其中有几个地方我需要使用 makeidx 包来索引一些单词。因为我还希望索引词为粗体,所以我创建了自己的命令 \ind{}
,这将使参数变为粗体和索引。但是现在我对这个命令不满意所以我想通过 \textbf{whatever}\index{whatever 默认更改我文本中的每个
。\ind{whatever}
实例
关键是我很清楚自己想要什么:
- 浏览文本,查找
\ind{
的任何实例并使用search-and-replace
替换为\textbf{
/li> - 将
\ind
的参数(在本例中为“whatever”)保存在内存中 - 问我
\index
的参数应该是什么。默认情况下(按回车键),它应该是第一个参数,但我也可以改变主意并输入不同的内容(在本例中为“默认情况下”)。如果没有输入(例如只有一个空格""
)停止程序。 - 写下
\index{
、新参数和}
。 - 转到文本中的下一个位置。
但是,唉!我不知道如何做到这一点,所以我需要别人的帮助。如果要花太多时间来解释如何做这样的事情,你能给我一些关于编写我自己的函数的教程吗?
希望我说清楚了,感谢您的耐心等待!
最佳答案
这种方法对我来说似乎不太正统,但它确实有效并且似乎足以完成一次性工作......
在 replace-regexp
和 query-replace-regexp
(C-M-%) 的替换文本中,一个较新的转义序列是 \,(...)
,其中 ...
可以是任何 Lisp 表达式。有一个 Lisp 函数 read-from-minibuffer
可以读取用户输入的任意文本,默认值可选。因此:
C-M-%:开始query-replace-regexp
。
\\ind{\([^}]+?\)}
:要搜索的模式。
\\textbf{\1}\\index{\,(read-from-minibuffer "index content?"\1)}
:替换文本。系统将提示用户输入 \index{}
元素后大括号中的文本,使用 \ind{}
元素后大括号之间的原始文本作为默认值。
请注意,在使用 query-replace-regexp
时,您必须通过在每个选项后键入 y 来确认每个选项。如果您想避免此步骤,请使用 M-x replace-regexp。
关于emacs - 如何修改 emacs 的搜索和替换以执行更复杂的任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5372718/