我想将标签命令\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.el
AUCTeX 和 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
文件。