在枚举和定理中使用 \cref

在枚举和定理中使用 \cref

我想引用定义的某个部分,该部分使用环境分隔enumerate
在 MWE 中,我有

\documentclass[a4paper,12pt,oneside]{scrbook}
\usepackage{amsthm}
\usepackage[shortlabels]{enumitem}
\usepackage{hyperref}
\usepackage[capitalize,nameinlink]{cleveref}

\newtheorem{theorem}{Theorem}[chapter]

\theoremstyle{definition}
\newtheorem{defin}[theorem]{Definition}

\begin{document}

    \chapter{Chapter 1}
    
    \begin{defin}\label{defin_1}$ $
        \begin{enumerate}[(i)]
            \item\label{item_1} Part 1
            \item\label{item_2} Part 2
        \end {enumerate}
    \end{defin}
    In \cref{defin_1} I have the items \cref{item_1} and \cref{item_2}.

\end{document}

我从中得到

在此处输入图片描述

有没有办法自动用和Item (i)分别替换和?Item (ii)Definition 1.1 (i)Definition 1.1 (ii)

我不能使用正常方法,\ref因为我的所有定义/定理/引理等都共享一个计数器。

答案1

可能有更简单、更直接的方法,但下面的方法似乎可以满足您的要求。 (并且它不仅适用于特定环境definition,还适用于所有类似定理的环境。)

\documentclass[a4paper,12pt,oneside]{scrbook}
\usepackage{amsthm}
\usepackage[shortlabels]{enumitem}
\usepackage{hyperref}
\usepackage[capitalize,nameinlink]{cleveref}

\newtheorem{theorem}{Theorem}[chapter]

\theoremstyle{definition}
\newtheorem{defin}[theorem]{Definition}

\newcommand{\crefdefpart}[2]{%
  \hyperref[#2]{\namecref{#1}~\labelcref*{#1}~\ref*{#2}}%
}
\begin{document}

    \chapter{Chapter 1}
    
    \begin{defin}\label{defin_1}$ $
        \begin{enumerate}[(i)]
            \item\label{item_1} Part 1
            \item\label{item_2} Part 2
        \end {enumerate}
    \end{defin}
    
   In \cref{defin_1} I have the items \crefdefpart{defin_1}{item_1}  and \crefdefpart{defin_1}{item_2}.

\end{document}

在类定理环境中引用枚举的部分

答案2

你问,

有没有办法自动将“项目 (i)”和“项目 (ii)”分别替换为“定义 1.1 (i)”和“定义 1.1 (ii)”?

保留采用多个参数的能力的解决方案\cref是使用包的机制enumitem- 特别是它的\newlist\setlist宏 - 来创建一个定制的枚举式列表环境,其\item在交叉引用时将自己视为“定义”而不是“项目”。

在此处输入图片描述

\documentclass[a4paper,12pt,oneside]{scrbook}
\usepackage{amsthm}
\usepackage[shortlabels]{enumitem}
\usepackage[colorlinks]{hyperref}
\usepackage[capitalize,nameinlink]{cleveref}

\newtheorem{theorem}{Theorem}[chapter]
\theoremstyle{definition}
\newtheorem{defin}[theorem]{Definition}

\newlist{definenum}{enumerate}{1} % should only occur inside definition env.
\setlist[definenum]{label=(\roman*),ref=\thedefin\,(\roman*)}
\crefname{definenumi}{definition}{definitions}

\begin{document}

\setcounter{chapter}{1}
    
\begin{defin}\label{defin_1}
\leavevmode % more elegant than '$ $'
   \begin{definenum}
      \item\label{item_1} Part 1 \dots
      \item\label{item_2} Part 2 \dots
   \end{definenum}
\end{defin}
    
\noindent
\cref{defin_1} consists of the \cref{item_1,item_2}.

\end{document}

相关内容