Cleveref: ¿Cómo hacer referencia a varios elementos en un entorno similar a un teorema sin numerar?

Cleveref: ¿Cómo hacer referencia a varios elementos en un entorno similar a un teorema sin numerar?

Quiero el resultado del comando.

\cref{prob:third-problem,prob:fourth-problem}

en la primera línea del contenido del primer capítulo, aquella cuya salida (con dos ??s) está marcada en la página que se muestra a continuación, se convertirá en "Ejercicios 2.3 y 2.4" (sin comillas), como cualquier otro comando del forma \cref{first,second}.

(Y lo mismo ocurre con algo como \cref{first,fourth,fifth}una lista de más de dos referencias de problemas).

¿Cómo se puede hacer esto cleveref?

\documentclass{memoir}

% theorems    
\usepackage{amsthm}
\usepackage{thmtools}

\declaretheoremstyle[
  headformat=\NAME\NOTE,
  headfont= \sffamily\bfseries,
  headpunct={\vspace{\topsep}\newline},
  numbered=no,
  spaceabove=3\topsep,
  postheadspace=0pt    
]{probs}
\declaretheorem[
  name=EXERCISES,
  style=probs,
]{problemscontent}

\newenvironment{problems}
{\problemscontent}
{\endproblemscontent}

% lists
\usepackage{enumitem}

% For exercises
\newcounter{problemnumber} % number exercises within each chapter

\newlist{problemsenum}{enumerate}{3}
\setlist[problemsenum,1]{%...
    label=\bfseries\sffamily\arabic*.,
    ref={\arabic*}, % strips formatting!
    before=\leavevmode \vspace{-\dimexpr\baselineskip+\topsep\relax},
    after=\stepcounter{problemsenumi}\setcounter{problemnumber}{\value{problemsenumi}},
    start=\value{problemnumber}
}
\makeatletter
\renewcommand{\p@problemsenumi}{\maybe@thechapter{\thechapter}}
\protected\def\maybe@thechapter#1{%
  \ifnum#1=\value{chapter}%
  \else
    #1.%
  \fi
}
\makeatother

\newlist{problempartsenum}{enumerate}{2}
\setlist[problempartsenum,1]{%
    label=\bfseries\sffamily(\alph*),
    ref={(\alph*)},%, % strips formatting!
    before=\vspace{\dimexpr+6pt-\medskipamount\relax},
}

% links
\usepackage[pdftex]{hyperref} 
\hypersetup{%
  breaklinks=true,%
  colorlinks, citecolor=red,%
}

%% Allow ref to section n, not section m.n
%% From 'third installment' of  answer by Christian Hupfer 
%% https://tex.stackexchange.com/a/383608
\usepackage{xparse,xassoccnt}
\usepackage[user,hyperref]{zref}
\RegisterPostLabelHook{\zlabel}
% Replace \arabic{section} with \Roman{section} etc. as needed:
\makeatletter
\zref@newprop{section}{\arabic{section}} 
\zref@addprop{main}{section}
\newcommand{\secref}[1]{%
  \zref@ifrefundefined{#1}{%
    \ref{#1}}{%
    \hyperlink{\zref@extract{#1}{anchor}}%
       {\zref@extract{#1}{section}}}}
 \makeatother
%% End of code from Christian Hupfer's answer

\usepackage{aliascnt}
\usepackage[noabbrev,nameinlink]{cleveref}

\crefformat{problemsenumi}{#2Exercise~#1#3}
\Crefformat{problemsenumi}{#2Exercise~#1#3}
\crefformat{problemscontent}{#2\textnormal{#3}}
\Crefformat{problemscontent}{#2\textnormal{#3}}

\newcommand\crefprob[2]{\cref{#1}~\ref{#2}}
\newcommand\crefrangeprob[2]{Exercises~\textup{\ref{#1}}--\textup{\ref{#2}}}
\newcommand\crefrangeprobpart[2]{\textup{\ref{#1}}--\textup{\ref{#2}}}
\newcommand\crefprobandrangeprobpart[3]{\cref{#1}~\textup{\ref{#2}}--\textup{\ref{#3}}}

\begin{document}

\chapter{First}\label{chap:1}
\setcounter{problemnumber}{1}

See \cref{prob:first-problem} in a different chapter. And \cref{prob:third-problem,prob:fourth-problem}.

See also \cref{prob:chap1-number2}~\ref{prob-part:one-part-b}, that is, 
\crefprob{prob:chap1-number2}{prob-part:one-part-b}.

And consider \crefrangeprob{prob:chap1-number1}{prob:chap1-number2} in this chapter.

What about parts \crefrangeprobpart{prob-part:one-part-a}{prob-part:one-part-b} 
of \cref{prob:chap1-number2} in this chapter?
That is, \crefprobandrangeprobpart{prob:chap1-number2}{prob-part:one-part-a}{prob-part:one-part-b}.

Or \crefprobandrangeprobpart{prob:first-problem}{prob-part:first-problem-part-a}{prob-part:first-problem-part-b} 
in another chapter.

\begin{problems}
\begin{problemsenum}

\item\label{prob:chap1-number1}
A question.

\item\label{prob:chap1-number2}

\begin{problempartsenum}

\item\label{prob-part:one-part-a}
Why is $a = b$?

\item\label{prob-part:one-part-b}
Why is $d = c$?

\item\label{prob-part:one-part-c}
Is $x=y$?

\end{problempartsenum}

\end{problemsenum}

\end{problems}

%%%
\chapter{Second}\label{chap:2}
\setcounter{problemnumber}{1}

Refer to \cref{prob:first-problem} in this chapter---specifically, to 
\crefprob{prob:first-problem}{prob-part:first-problem-part-b}.


And see \crefrangeprob{prob:third-problem}{prob:fifth-problem}.

\section{First section}

\begin{problems}\label{probs:seconeprobs}
\begin{problemsenum}

\item \label{prob:first-problem}
First problem.

\begin{problempartsenum}

\item\label{prob-part:first-problem-part-a}
Why is $a = b$?

\item\label{prob-part:first-problem-part-b}
Why is $d = c$?

\item\label{prob-part:first-problem-part-c}
Is $x=y$?

\end{problempartsenum}

\item 
Second problem.

\end{problemsenum}
\end{problems}

\section{Second section}

\begin{problems}\label{probs:sectwoprobs}
\begin{problemsenum}

\item \label{prob:third-problem}
First problem.

\item \label{prob:fourth-problem}
Second problem.

\begin{problempartsenum}

\item\label{prob-part-fourth-problem-part-a}
Is it?

\item\label{prob-part-fourth-problem-part-b}
Why not?

\end{problempartsenum}

\item \label{prob:fifth-problem}
Fifth problem.

\end{problemsenum}
\end{problems}

\end{document}

Falta el plural de intelligentef y "y".

Notas:

  1. El problemsentorno se ha definido de una manera especial para permitir cleverefreferencias a elementos allí enumerados, sin que ese entorno en sí sea un entorno tipo teorema numerado. Eso y los comandos y cleverefconstrucciones asociados se obtienen de varias respuestas en otras publicaciones. Esas publicaciones incluyenReferencia con solo parte del número de sección después del punto decimaly ¿Cómo utilizar Cleveref para obtener un nombre similar a un teorema y un número de elemento de lista?.
  2. Mi documento real, mucho más complejo, utiliza la memoirclase de documento. Sin embargo, para este MWE, la bookclase probablemente también podría usarse, posiblemente si se cargaran explícitamente paquetes adicionales.

Respuesta1

Esto se puede solucionar incluyendo

\crefname{problemsenumi}{Exercise}{Exercises}

en el preámbulo.

(La coma Oxford (de serie) que falta y que prefiero se puede insertar como se responde en¿Se puede hacer que Cleveref utilice la coma de Oxford para múltiples citas?, es decir, incluyendo \newcommand{\creflastconjunction}{, and\nobreakspace}.

información relacionada