我定义了一个名为 的新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
可以解析和处理用户定义的环境。它应该包含一些代码来自动进行此添加。