尝试在网上寻找答案,只找到了一个问题和一个答案,我既看不懂又用不上。在 tex.stackexchange 上,我只找到了这个问题已经回答了这个问题,但我的技术不够,无法将其翻译成我的情况。
我想在使用 时与 一起使用。换句话说cleveref
,当按下并找到我想要引用的标签时,我想插入而不是。reftex
AUCTeX
emacs
C-c )
reftex
\cref{label}
\ref{label}
可能有办法做到,但我无法弄清楚。
答案1
以下(未经测试!)代码应该能提供您想要的行为。您需要将其放入 Emacs 初始化文件中(.emacs
或类似文件,具体取决于您的平台)。
(defun reftex-format-cref (label def-fmt)
(format "\\cref{%s}" label))
(setq reftex-format-ref-function 'reftex-format-cref)
(此简单代码是根据 Emacs 分发的文件defun
修改而来的。)reftex-ref.el
答案2
自从你似乎已经在使用YASnippet通过 YASnippet 而不是 AUCTeX 来实现这一点可能更好。
以下是此类代码片段的示例:
# -*- mode: snippet -*-
# name: cleveref \cref
# key: rf
# --
\cref{${1:label$(unless yas/modified-p (reftex-reference nil 'dont-insert))}}$0
使用这个,你写“rf”,当你扩展它时(默认用扩展Tab)RefTeX 会询问你要引用什么标签,并将该标签作为的参数插入\cref
。
使用 YASnippets 的好处之一是,你可以有多个替代方案相同的键。例如,如果您使用上面的代码片段,您可能还想在交叉引用开始一个句子的情况下使用以下内容:
# -*- mode: snippet -*-
# name: cleveref \Cref
# key: crf
# --
\Cref{${1:label$(unless yas/modified-p (reftex-reference nil 'dont-insert))}}$0
现在,当您写入“rf”并将其扩展时,您可以选择是否将其扩展\cref
为\Cref
:
更多交叉引用片段请参见https://github.com/Sleft/yasnippet-latex-mode/tree/master/cross-reference。
答案3
现在(RefTex 版本 24.3),该函数使用三个参数调用:label
、def-fmt
和ref-style
。您可以放心地忽略新的参数,因此这应该可以工作:
(defun reftex-format-cref (label def-fmt ref-style)
(format "\\cref{%s}" label))
(setq reftex-format-ref-function 'reftex-format-cref)
但是,这里提供了更好的答案(重复)问题。