向 RefTeX 添加新的标签/参考命令对

向 RefTeX 添加新的标签/参考命令对

我想将标签命令\pflabel\pflonglabel以及它们对应的引用命令添加\pfref到 RefTeX。我希望它们像\label/\ref一样默认工作,但可以作为附加选项。

有人知道我该怎么做吗?

答案1

由于您也使用 AUCTeX,我建议您将 TeX 宏放在包中,例如pflabel.sty,它看起来像这样:

\ProvidesPackage{pflabel}
  [2019/09/08 v1.0 Support for pflabel's]
\let\pflabel\label
\let\pflonglabel\label
\let\pfref\ref
\endinput

将此文件保存在 LaTeX 可以找到的目录中。

接下来,您需要编写pflabel.elAUCTeX 和 RefTeX 的相应支持文件,如下所示:

(TeX-add-style-hook
 "pflabel"
 (lambda ()

   (TeX-add-symbols
    '("pflabel"     TeX-arg-define-label)
    '("pflonglabel" TeX-arg-define-label)
    '("pfref"       TeX-arg-ref))

   ;; Tell AUCTeX about the macros
   (TeX-auto-add-regexp
    '("\\\\pf\\(?:long\\)?label{\\([^\n\r%\\{}]+\\)}" 1 LaTeX-auto-label))

   ;; Check if reftex-vars.el is loaded:
   (when (featurep 'reftex-vars)
     (make-local-variable 'reftex-label-alist)
     (make-local-variable 'reftex-label-regexps)
     (make-local-variable 'reftex-ref-style-alist)
     (dolist (mac '("pflabel" "pflonglabel"))
       (add-to-list 'reftex-label-alist
                    `(,(concat "\\" mac "{*}") nil nil nil nil)
                    t)
       (add-to-list 'reftex-label-regexps
                    (concat "\\\\" mac "{\\(?1:[^\n\r%\\{}]+\\)}")
                    t)
       (unless (string-match-p
                "\\<pflabel\\>"
                (mapconcat #'identity reftex-label-regexps "\\|"))
         (reftex-compile-variables)))

     ;; Add a new reference style
     (add-to-list 'reftex-ref-style-alist
                  '("PFlabel" "pflabel"
                    (("\\pfref" ?P)))
                  t)

     ;; And activate it
     (and LaTeX-reftex-ref-style-auto-activate
          (fboundp 'reftex-ref-style-activate)
          (reftex-ref-style-activate "PFlabel")))

   ;; Fontification
   (when (and (featurep 'font-latex)
              (eq TeX-install-font-lock 'font-latex-setup))
     (font-latex-add-keywords '(("pflabel"     "{")
                                ("pflonglabel" "{")
                                ("pfref"       "{"))
                              'reference)))
 LaTeX-dialect)

;;; pflabel.el ends here

将变量自定义TeX-style-private为您选择的目录,例如:

(setq TeX-style-private (expand-file-name "~/.emacs.d/auctex-styles"))

并保存pflabel.el在该目录中。确保 init 文件中有以下行:

(setq TeX-parse-self t)

以及文件中的这一行.tex

\usepackage{pflabel}

现在重新启动 Emacs 并加载您的.tex文件。

相关内容