我使用由以下定义的定理环境
\declaretheorem[style=definition,name=Property]{property}
介绍一些属性。
\begin{property}[local continuity]\label{lc}
blah blah
\end{property}
\begin{property}[liftable]\label{lift}
blah blah
\end{property}
然后我想使用 cleveref 引用这些属性,因此我添加
\crefname{property}{Property}{Properties}
并通过
By some theorem, $\mu$ has \cref{lc} and $\tau$ has \cref{lc,lift}.
然后会产生如下输出
根据某定理,$\mu$ 具有属性 1,而 $\tau$ 具有属性 1 和 2。
但我希望能够将字符串与这些属性关联起来,例如“LC”和“L”,并让 TeX 输出
根据某些定理,$\mu$ 具有属性 (LC),而 $\tau$ 具有属性 (LC) 和 (L)。
其中 LC 是指向定义它的属性块的超链接。我可以通过创建宏(例如 \LC 和 \L)来伪造它,但这样我就无法获得 cleveref 提供的一次列出多个属性的便捷功能。我更喜欢这些字符串而不是数字,因为这些属性实际上在 50 页的文档中随处可见。
有什么建议吗?我也很高兴听到更多惯用的方法来完成我正在做的事情。
答案1
我假设您希望标签为“Property LC”而不是“Property 1”。
技巧有两个:一个是定义一个内部环境和\declaretheorem
一个带有强制参数的外部环境(以及其后的标准可选参数)。这将设置要在标签和交叉引用中使用的字符串。
第二个技巧是使用\crefformat and
\crefmultiformat` 在交叉引用处添加括号。
\documentclass{article}
\usepackage{amsthm}
\usepackage{thmtools}
\usepackage{cleveref}
\declaretheorem[style=definition,name=Property]{propertyINNER}
\newenvironment{property}[1]
{\renewcommand{\thepropertyINNER}{#1}\propertyINNER}
{\endpropertyINNER}
\crefformat{propertyINNER}{Property~#2(#1)#3}
\crefmultiformat{propertyINNER}
{Properties~(#2#1#3)}
{ and~(#2#1#3)}
{, (#2#1#3)}
{ and~(#2#1#3)}
\begin{document}
\begin{property}{LC}[local continuity]\label{lc}
blah blah
\end{property}
\begin{property}{L}[liftable]\label{lift}
blah blah
\end{property}
By some theorem, $\mu$ has \cref{lc} and $\tau$ has \cref{lc,lift}.
\end{document}
如果你想要的是“财产(LC)”,那就更简单了:
\documentclass{article}
\usepackage{amsthm}
\usepackage{thmtools}
\usepackage{cleveref}
\declaretheorem[style=definition,name=Property]{propertyINNER}
\newenvironment{property}[1]
{\renewcommand{\thepropertyINNER}{(#1)}\propertyINNER}
{\endpropertyINNER}
\crefname{propertyINNER}{Property}{Properties}
\begin{document}
\begin{property}{LC}[local continuity]\label{lc}
blah blah
\end{property}
\begin{property}{L}[liftable]\label{lift}
blah blah
\end{property}
By some theorem, $\mu$ has \cref{lc} and $\tau$ has \cref{lc,lift}.
\end{document}