我需要如何修改此源以便:
- 第 1 章的第一行输出目前为“参见下面的 ?? 1”,现在改为“参见下面的问题 2.1”
- 第 2 章的第一个输出行,当前为“请参阅这些中的??。”,将改为“请参阅这些中的第 1 个问题。”?
注意:
- 类似定理的环境
problems
本身没有编号,但在不同的章节中引用时,应该使用“问题”一词,后跟该章节的编号,然后是项目编号作为参考;并且 - 当在出现该环境的同一章节中引用该环境中的某个项目时
problemsenum
,引用应该包含“问题”一词。
我不明白如何在这里使用适当的别名或计数器。
\documentclass[oneside]{book}
\usepackage{amsthm}
\usepackage{thmtools}
\usepackage{aliascnt}
\usepackage[nameinlink]{cleveref}
\crefname{enumi}{}{}
\declaretheoremstyle[numbered=no]{probs}
\declaretheorem[name=PROBLEMS,style=probs]{problems}
\newenvironment{problemsenum}
{\begin{enumerate}%
Solve these problems.}%
{\end{enumerate}}
\crefname{problems}{Problem}{Problem}
\Crefname{problems}{Problem}{Problem}
\begin{document}
\chapter{}\label{chap:1}
See \cref{prob:my-problems} \cref{prob-part:first-problem}, below.
\chapter{}\label{chap:2}
Refer to \cref{prob-first-problem} in these.
\begin{problems}
\label{prob:my-problems}
\begin{problemsenum}
\item \label{prob-part:first-problem}
First problem.
\item
Second problem.
\end{problemsenum}
\end{problems}
\end{document}
部分解决方法
使用上面编辑版本中添加的章节标签,在序言中做出定义:
\newcommand{\probref}[1]{Problem~\cref{#1}}
\newcommand{\otherprobref}[1]{Problem~\thechapter.\cref{#1}}
然后分别在第1章和第2章中创建交叉引用,如下所示:
See \otherprobref{prob-part:first-problem}
Refer to \probref{prob-part:first-problem} in these.
为什么部分解决方法不能令人满意。不幸的是,如果我现在也将其包括在序言中......
\usepackage[colorlinks=true]{hyperref}
...那么第 1 章和第 2 章中的链接分别为仅有的针对实际问题编号(此处为 1),而不是整个短语“问题 1.1”和“问题 1”。对于这种类型的交叉引用,这否定了nameinlink
我使用的选项cleveref
。
更好的部分解决方法
在他的回答中如何抑制编号定理的数量?Christian Hupfer 提供了一个巧妙的新部分解决方案:
- 确实创建了带有数字的交叉引用,以便在无编号的定理类环境中枚举项目(这是我的目标之一);但是
- 做不是满足我的一个要求,即当引用在相同的该环境发生的章节,则章节号将在参考文献中被抑制。
是否有某种方法可以修改 Hupfer 的答案以满足我当前帖子顶部的要求 #2?
这实质上是 Hupfer 的巧妙回答,稍作修改以适合我的情况,单位划分为章节而不是节(并添加了彩色链接、额外文本以便于显示链接指向的位置等):
\documentclass[oneside]{book}
\usepackage{amsthm}
\usepackage{thmtools}
\usepackage{enumitem}
\usepackage[colorlinks, linkcolor=blue]{hyperref}
\declaretheoremstyle[numbered=yes,headpunct={}]{probs}
\declaretheorem[name=PROBLEMS,style=probs,numberwithin=chapter,preheadhook={\let\theproblems\relax},postheadhook={\newcommand{\theproblems}{\thechapter.\arabic{problems}}\leavevmode}]{problems}
\newlist{probenum}{enumerate}{1}
\setlist[probenum,1]{label=({\arabic*)},ref={Problem~\thechapter\,(\arabic*)}}
\usepackage{lipsum}
\begin{document}
\chapter{First chapter}
In \ref{fooother} you will prove that \dots .
\begin{problems}
\begin{probenum}
\item foo \label{foo} \lipsum[1]
\item bar \label{bar} \lipsum[2]
\end{probenum}
\end{problems}
In \ref{bar} and \ref{foo}, you already proved that \dots .
In \ref{fooother} you will prove that \dots .
\chapter{Second chapter}
\begin{problems}
\begin{probenum}
\item foo \label{fooother} \lipsum[3]
\item bar \label{barother} \lipsum[4]
\end{probenum}
\end{problems}
Earlier in \ref{bar}, you had already showed that \dots ; now in \ref{fooother} you just showed that \dots .
\end{document}
答案1
你想对您的环境进行编号problems
,但隐藏号码。
\documentclass[oneside]{book}
\usepackage{amsthm}
\usepackage{thmtools}
\usepackage{enumitem}
\usepackage{aliascnt}
\usepackage[nameinlink]{cleveref}
\declaretheoremstyle[
headformat=\NAME\NOTE,
]{probs}
\declaretheorem[
name=PROBLEMS,
style=probs,
]{problemsinner}
\newenvironment{problems}
{\problemsinner Solve these problems.}
{\endproblemsinner}
\newlist{problemsenum}{enumerate}{1}
\setlist[problemsenum,1]{label=\arabic*}
\makeatletter
\renewcommand{\p@problemsenumi}{\maybe@thechapter{\thechapter}}
\protected\def\maybe@thechapter#1{%
\ifnum#1=\value{chapter}%
\else
#1.%
\fi
}
\makeatother
\crefformat{problemsenumi}{#2Problem~#1#3}
\Crefformat{problemsenumi}{#2Problem~#1#3}
\crefformat{problemsinner}{#2#3}
\Crefformat{problemsinner}{#2#3}
\begin{document}
\chapter{First}\label{chap:1}
See \cref{prob-part:first-problem} in a different chapter.
\chapter{Second}\label{chap:2}
Refer to \cref{prob-part:first-problem} in this chapter.
\begin{problems}
\label{prob:my-problems}
\begin{problemsenum}
\item \label{prob-part:first-problem}
First problem.
\item
Second problem.
\end{problemsenum}
\end{problems}
\end{document}
技术说明:我使用 A6 纸张格式来制作图像。