RefTeX 在自定义环境中找不到“label={name}”

RefTeX 在自定义环境中找不到“label={name}”

我定义了一个名为 的新tcolorbox基础浮动环境riquadro,并且我希望 RefTeX 能够找到我使用选项插入的标签label={name}

从文档来看,reftex-label-regexps似乎默认应该识别 keyval 样式格式,但是当我尝试运行reftex-reference(使用C-c ))时没有出现这种类型的标签。

我还设置了

 (reftex-add-label-environments
   '(("riquadro" ?a "riq:" nil caption ("riquadro")))

但这似乎没有效果。

也许我必须声明新的环境并告诉 RefTeX 寻找它的标签,但我不知道该怎么做。

答案1

在 Emacs 版本 27 中,的行为发生了变化:RefTeX 现在会在给定环境的可选参数中reftex-label-regexps查找键;其他的将被忽略。文档字符串说明:label

reftex-label-regexps是在 'reftex-vars.el' 中定义的变量。其值为 [...]

文档:与定义
匹配的正则表达式列表\label。默认值匹配通常的\label{...}定义和 keyval 样式 [..., label = {...}, ...]标签定义。keyval 样式的正则表达式明确查找由包“listings”(“lstlisting”)、“beamer”(“frame”)、“breqn”(“dmath”、“dseries”、“dgroup”、“darray”)和同名包提供的宏“\ctable”提供的环境。

假定正则表达式组 1 与标签文本匹配,因此必须\(?1:...\)在添加新的正则表达式时使用它来定义它。

对于您的自定义环境,您可以使用customize界面添加条目或在初始化文件中放入类似这样的内容:

(with-eval-after-load "reftex-vars"
  (add-to-list 'reftex-label-regexps
               (concat
                "\\\\begin[[:space:]]*{riquadro}[[:space:]]*"
                ;; Match the opening [ and the following chars
                "\\[[^][]*"
                ;; Allow nested levels of chars enclosed in braces
                "\\(?:{[^}{]*"
                  "\\(?:{[^}{]*"
                    "\\(?:{[^}{]*}[^}{]*\\)*"
                  "}[^}{]*\\)*"
                "}[^][]*\\)*"
                ;; Match the label key
                "\\<label[[:space:]]*=[[:space:]]*"
                ;; Match the label value; braces around the value are
                ;; optional.
                "{?\\(?1:[^] ,}\r\n\t%]+\\)"
                ;; We are done.  Just search until the next closing bracket
                "[^]]*\\]")
               t))

另一方面,AUCTeX 有一个样式文件,tcolorbox可以解析和处理用户定义的环境。它应该包含一些代码来自动进行此添加。

相关内容