如何使用 RefTeX 交叉引用特定标签

如何使用 RefTeX 交叉引用特定标签

在 LaTeX 中,标签定义为\label{eq:1}。当您想要引用该方程式时,您可以轻松地\label 通过该命令在文档中搜索所有内容C-c ),然后插入对该标签的引用\ref{eq:1}

label{eq:1}目前我正在使用一种特殊的语言,其中每个标签都以表格和引用(没有反斜杠)的形式出现ref{eq:1}。所以我想知道如何自定义 RefTeX 来搜索 label和插入ref所选标签。

答案1

RefTeX 将匹配定义的正则\label表达式存储在 中reftex-label-regexps;您必须对其进行自定义才能在label不使用 的情况下进行匹配\。您可以\通过将其放入 shy 组中来使其成为可选项。

然后,您必须编写一些代码来运行这些函数reftex-reference,并reftex-label使用第二个可选NO-INSERT参数,并将这些函数绑定到一些按键。将类似下面的代码放入您的代码中.emacs应该可以解决问题:

(add-hook 'reftex-mode-hook
          (lambda ()
            ;; do this all only once
            (unless (member
                     "\\(?:\\\\\\)?label{\\(?1:[^}]*\\)}"
                     reftex-label-regexps)
              ;; label stuff
              (setq reftex-label-regexps
                    '("\\(?:\\\\\\)?label{\\(?1:[^}]*\\)}"
                      "\\[[^][]\\{0,2000\\}\\<label[[:space:]]*=\[[:space:]]*\
{?\\(?1:[^],}]+\\)}?"))
              (reftex-compile-variables)
              (defun doconce-label ()
                (interactive)
                (insert "label{" (reftex-label nil t) "}"))
              (local-set-key (kbd "C-c l") #'doconce-label)
              ;; ref stuff
              (defun doconce-ref ()
                (interactive)
                (insert "ref{" (reftex-reference nil t) "}"))
              (local-set-key (kbd "C-c r") #'doconce-ref))))

相关内容