![在枚举和定理中使用 \cref](https://linux22.com/image/430768/%E5%9C%A8%E6%9E%9A%E4%B8%BE%E5%92%8C%E5%AE%9A%E7%90%86%E4%B8%AD%E4%BD%BF%E7%94%A8%20%5Ccref.png)
我想引用定义的某个部分,该部分使用环境分隔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}