
コマンドの出力が欲しい
\cref{prob:third-problem,prob:fourth-problem}
最初の章のコンテンツの最初の行(その出力(2 つ??
の を含む)が以下の表示ページでマークされている行)は、 形式の他のコマンドと同様に、(引用符なしの)「演習 2.3 および 2.4」になります\cref{first,second}
。
\cref{first,fourth,fifth}
(問題参照が 2 つ以上あるリストの場合も同様です。)
これをどうやって実現できるでしょうか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}
ノート:
- 環境は、番号付き定理のような環境ではなく、そこに列挙された項目への参照を
problems
可能にするために特別な方法で定義されています。それと関連するコマンドと構成は、他の投稿のさまざまな回答から収集されています。それらの投稿には以下が含まれます。cleveref
cleveref
小数点以下のセクション番号の一部のみの参照そして cleveref を使用して定理のような名前とリスト項目番号を取得するにはどうすればよいでしょうか?。 - 私の実際の、はるかに複雑なドキュメントでは、
memoir
ドキュメント クラスを使用しています。ただし、この MWE では、book
追加のパッケージが明示的にロードされた場合、クラスも使用できる可能性があります。
答え1
これは、以下を含めることで修正できます。
\crefname{problemsenumi}{Exercise}{Exercises}
前文に。
(私が好むオックスフォード(シリアル)カンマが欠けていますが、回答にあるように挿入できます。cleveref で複数の引用にオックスフォードコンマを使用するようにできますか?つまり、 を含めることによって\newcommand{\creflastconjunction}{, and\nobreakspace}
。