我有少量的例子(可能是 3、4 或 5 个),它们在我的文档中重复出现,以帮助读者理解使用同一组例子引入的新概念。
我希望用字母标记这些内容,然后在多次引入时用数字递增。假设我有两个示例,A 和 B。那么在第 1 节中,我将有示例 A.1 和示例 B.1。在后面的部分(不一定是第 2 节)中,我将再次检查它们,并有示例 A.2 和示例 B.2。
当我引用这些时,我希望它们以相同的方式引用,因此 \ref{some_label_A1} 将显示 A.1。
我可以在没有 .1 和 .2 的情况下实现此操作,方法是重新定义定理并将字母作为参数传递,即 \begin{example}{A}。但是,作为一个额外的复杂因素,我宁愿使用 \newenvironment 来实现,因为我希望环境中的格式与文档的其余部分相同(相同的字体等),并且我找不到一个好的方法来实现这一点,除非从 cls 文件中挖掘所有信息。这将需要使用不同的 cls 文件以多种格式提交,我不想每次都从 cls 文件中复制字体等。
我很乐意定义两个不同的新环境(一个用于 A,一个用于 B)。只是在使用 newenvironment 时我无法正确引用。我似乎无法获得实际给我 A.1 的引用。
有人能举一个例子来展示具有这种标签和成功引用的新环境吗?
编辑:实际上,我可以通过自定义编号一些小节来实现这一点,但在我看来,使用环境和计数器也应该有一个好方法来做到这一点。
答案1
在这个解决方案中,我定义了两个环境,example
和example*
,后者用于延续。
两种环境都采用强制参数,即用于引用当前示例或后续示例的任意标签。在后续示例中,您可以使用标准\label
命令来设置引用。编号完全独立于各个部分。
\documentclass{article}
\usepackage{amsthm}
\usepackage{refcount}
\usepackage{hyperref}
\usepackage{lipsum}
\theoremstyle{definition}
\newtheorem{exampleinner}{Example}
\newcounter{example}
\renewcommand{\theexample}{\Alph{example}}
\makeatletter
\newenvironment{example}[1]
{%
\stepcounter{example}%
\newcounter{example@#1}%
\stepcounter{example@#1}%
\renewcommand{\theexampleinner}{\theexample.\arabic{example@#1}}
\exampleinner
\label{example@full@#1}%
\def\@currentlabel{\theexample}\label{example@short@#1}%
}
{\endexampleinner}
\newenvironment{example*}[1]
{%
\stepcounter{example@#1}%
\renewcommand{\theexampleinner}{\getrefnumber{example@short@#1}.\arabic{example@#1}}%
\exampleinner
}
{\endexampleinner}
\newcommand{\exaref}[1]{\ref{example@full@#1}}
\makeatother
\begin{document}
\lipsum[1][1-4]
\begin{example}{first}
This is the first example.
\lipsum[2][1-3]
\end{example}
\lipsum[1][1-4]
\begin{example}{second}
This is the second example.
\lipsum[2][1-3]
\end{example}
\lipsum[1][1-4]
\begin{example*}{first}
This is the continuation of \exaref{first}.
\lipsum[2][1-3]
\end{example*}
\lipsum[1][1-4]
\begin{example*}{second}\label{xyz}
This is the continuation of \exaref{second}.
\lipsum[2][1-3]
\end{example*}
\lipsum[1][1-4]
\begin{example}{third}
This is an altogether new series of examples.
\lipsum[2][1-3]
\end{example}
\lipsum[1][1-4]
\begin{example*}{first}
This is the continuation of \exaref{first}.
\lipsum[2][1-3]
\end{example*}
\lipsum[1][1-4]
\begin{example*}{second}
This is the continuation of \exaref{second}.
\lipsum[2][1-3]
\end{example*}
\lipsum[1][1-4]
\begin{example*}{third}
This is the continuation of \exaref{third},
but we refer to example~\ref{xyz}
\lipsum[2][1-3]
\end{example*}
\lipsum[1][1-4]
\end{document}
请注意,hyperref
仅用于显示代码与其兼容。此外,我还加载了图片,geometry
以便将其放在一页中。