reftex 引用中的额外字符 yasnippet

reftex 引用中的额外字符 yasnippet

我在使用 YASnippet 插入 RefTeX 引文时遇到了问题。和许多其他人一样,我尝试使用此代码片段来自 GitHub使用以下语法

\cite{${1:label$(unless yas/modified-p (reftex-citation nil 'dont-insert))}}$0

但是,代码片段会完整并包含引文,但是我在引文标签周围得到了多余的字符,所以引文最终看起来像

\cite{(pauling1936)}

而不是像

\cite{pauling1936}

并且该文件将无法成功编译,因为 .bib 文件中的条目标题没有括号。

另外,如果我尝试将多个条目包含在一个引用中,结果如下所示

\cite{(pauling1936 giauque1933)}

代替

\cite{pauling1936, giauque1933}

如果我只是使用 RefTeX 快捷方式,C-c [而不是尝试使用 YASnippet,那么单个和多个条目的引用格式都会正确。此外,基本上相同的 GitHub 代码可以完美地用于调用reftex-reference而不是引用。

也许我应该提到我正在使用 Windows 8、Emacs 24.3.1、YASnippets 0.8 和 AUCTeX 11.87.1,并且我的序言没有任何\usepackage{}与 bibtex 相关的调用。

答案1

当您开始嵌入 lisp 代码时,Yasnippet 可能会出现一些小问题。我建议您报告此错误。

同时,您可以尝试以下方法进行修复。

\cite{${1:label`(unless yas/modified-p (reftex-citation nil 'dont-insert))`}}$0

反引号是将 lisp 嵌入 yasnippet 的另一种方法,而且它们可以更好地工作(当然,前提是您要嵌入的代码不使用反引号)。如果它有效,请告诉我。

答案2

问题是reftex-do-citation,哪个函数负责执行reftex-citation 用于返回列表中的项目(即(car (car selected-entries))

现在它返回一个列表(即(mapcar 'car selected-entries)

通过修改代码片段中的代码可以获得所需的输出(对于单个条目和多个条目):

\cite{${1:label$(unless yas/modified-p (mapconcat 'identity (reftex-citation 'dont-insert) ","))}}$0

相关内容