总共有Emacs noob。所以现在我正在研究Emacs中一个相当大的LaTeX项目,其中有几个地方我需要使用makeidx包索引一些单词。因为我还希望索引的单词是粗体,所以我创建了自己的命令\ind{}
,这将使参数变为粗体并编入索引。但是现在我对这个命令不满意,所以我想在\ind{whatever}
的文本中更改\textbf{whatever}\index{whatever by default}
的每个实例。
事情是我确切地知道我想要什么:
\ind{
的任何实例,并使用\textbf{
search-and-replace
\ind
(本例中为“不论”)的参数\index
的论点应该是什么。默认情况下(通过敲击回车),它应该是第一个参数,但我也可以改变主意并输入不同的东西(在这种情况下,“默认为”)。如果没有输入(例如只有空格" "
)则停止程序。\index{
,新参数和}
。但是,唉!我不知道怎么做到这一点,所以我需要别人的帮助。如果要花太多时间来解释如何做这样的事情,请你给我发一些关于编写自己的函数的教程吗?
我希望我很清楚,感谢您的耐心等待!
答案 0 :(得分:6)
这种做法对我来说似乎过于模糊,但是对于一次性的工作而言,这种做法似乎已经足够......
在replace-regexp
和query-replace-regexp
( CM - %)的替换文字中,一个较新的转义序列为\,(...)
,其中...
可以是任何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 。
答案 1 :(得分:3)
为什么不重新定义\ind
以便它可以获得可选参数?
例如:
\newcommand{\ind}[2][]{%
\def\first{#1}%
\ifx\first\empty
\textbf{#2}\index{#2}%
\else
\textbf{#2}\index{#1}%
\fi
}
这样您就可以使用\ind{whatever}
或\ind[whatever-else]{whatever}
。
答案 2 :(得分:3)
Vlad给你LaTeX解答你的问题。 Emacs解决方案是关键宏:从
开始C-x (
定义一个新宏,然后执行更改的一个步骤,比如说:
C-s \ind{
<left>ex
然后将参数复制并粘贴到\textbf
宏中......您必须小心以可重复的方式移动。完成标准修改后,将光标放在whatever by default
之后,并通过
C-x )
现在C-x e
将调用您刚定义的宏,让光标位于正确的位置以更改要更改的部分您还可以重复e
一次多次调用宏