正如接受的答案所建议的那样这个问题我问的是,我在我的Examples
环境中使用相同的代码片段。
最近我了解了varioref
和cleveref
包并开始使用它们。在这方面,以下是 MWE
\documentclass{article}
\usepackage{amsthm}
\usepackage{enumitem}
\usepackage{etoolbox}
\newtheoremstyle{myexcstyle}{3ex}{3ex}{}{}{\scshape}{:}{.5em}{}
\theoremstyle{myexcstyle}
\newtheorem*{exmps}{Examples}
\makeatletter
\newcommand*{\my@start@example}[2]{%
\begin{exmps}#1
\mbox{}\par\nobreak\vskip -0.5ex\@nobreaktrue
\begin{enumerate}[label=\arabic*., font=\bfseries, ref=\arabic*, itemsep=1.5ex, #2]%
}
\newenvironment{Exmps}[1][]
{%
\ifstrequal{#1}{start}
{\my@start@example{}{series=resumable-series}}%
{%
\ifstrequal{#1}{continued}
{\my@start@example{[continued]}{resume=resumable-series}}
{\my@start@example{}{}}%
}%
}
{\end{enumerate}%
\end{exmps}%
}
\makeatother
\usepackage{varioref}
\usepackage[colorlinks=true]{hyperref}
\usepackage{cleveref}
\crefname{Exmps}{Example}{Examples}
\begin{document}
\begin{Exmps}
\item \label{1}
First example
\item \label{2}
Second example
\end{Exmps}
\vref{1}
\end{document}
产生以下输出:
如何将生成的前缀字符串“item”更改\vref
为“example”?
答案1
Exmps
代码中的环境调用了 1 级环境enumerate
。与此环境关联的计数器称为enumi
。指令
\crefname{Exmps}{Example}{Examples}
不会产生您想要的效果,因为 的第一个参数中需要的相关计数器变量\crefname
不是Exmps
而是enumi
。该cleveref
包包含将计数器enumi
(以及它的兄弟enumii
、enumiii
等)与标签字符串“item”关联的代码。这就是为什么\vref
在您的示例中生成“item”作为前缀字符串的原因。
现在,我认为运行是一个非常糟糕的主意\crefname{enumi}{Example}{Examples}
,因为 1 级枚举环境也可能出现在文档的其他地方,对吗?
解决方案是使用包的机制enumitem
(具体来说,包的\newlist
和\setlist
命令)来创建一个定制的枚举类环境,该环境可获得您想要的所有格式化功能。在下面的解决方案中,此定制环境称为examplenum
,相关计数器称为examplenumi
。现在,\crefname{examplenumi}{Example}{Examples}
对的输出产生了预期的效果\vref
:
\documentclass{article}
\usepackage{amsthm}
\usepackage{enumitem}
\usepackage{etoolbox}
\usepackage{varioref}
\usepackage[colorlinks=true]{hyperref}
\usepackage{cleveref}
\newlist{examplenum}{enumerate}{1}
\setlist[examplenum]{label=\arabic*., font=\bfseries,
ref=\arabic*, itemsep=1.5ex, left=0pt}
\crefname{examplenumi}{Example}{Examples}
\newtheoremstyle{myexcstyle}{3ex}{3ex}{}{}{\scshape}{:}{.5em}{}
\theoremstyle{myexcstyle}
\newtheorem*{exmps}{Examples}
\makeatletter
\newcommand*{\my@start@example}[2]{%
\begin{exmps}#1
\mbox{}\par\nobreak\vskip -0.5ex\@nobreaktrue
\begin{examplenum}[#2]}
\newenvironment{Exmps}[1][]{%
\ifstrequal{#1}{start}
{\my@start@example{}{series=resumable-series}}%
{\ifstrequal{#1}{continued}
{\my@start@example{[continued]}{resume=resumable-series}}
{\my@start@example{}{}}}}
{\end{examplenum}%
\end{exmps}}
\makeatother
\begin{document}
\begin{Exmps}
\item \label{ex:1} First example
\item \label{ex:2} Second example
\end{Exmps}
\clearpage % force a page break
\vref{ex:1} \dots
\end{document}