带引用的自定义环境

带引用的自定义环境

我有少量的例子(可能是 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

在这个解决方案中,我定义了两个环境,exampleexample*,后者用于延续。

两种环境都采用强制参数,即用于引用当前示例或后续示例的任意标签。在后续示例中,您可以使用标准\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以便将其放在一页中。

在此处输入图片描述

相关内容