如何定制自定义环境的交叉引用编号?

如何定制自定义环境的交叉引用编号?

语境:我有几个带有自定义计数器的环境。像往常一样,我将它们引用到我的文档中,但我只得到相应的计数器值作为参考。

例子:

\newcounter{myenvcounter}[section]\setcounter{myenvcounter}{0}
\def\theenv{\arabic{chapter}.\arabic{section}.\arabic{myenvcounter}}
\newenvironment{myenv}{
    \refstepcounter{myenvcounter}%
\\
    \noindent\textbf{Env. \theenv{}.}%
}{%
   \\
}

此环境的一个实例:

\chapter{Chapter one} \label{ch:one}
   ...
   \section{Section one} \label{sec:one}
      ...
      \begin{myenv} \label{env:one} 
         Bla bla bla.
      \end{myenv}
      ... \\
      As shown in Env. \ref{env:one} ... etc.

结果是:


1 第一章

...

1.1 第一节

...

环境 1.1.1。啦啦啦。

...

如环境 1 所示...等等。


问题:如何自定义交叉引用编号以获得例如:“如环境 1.1.1 中所示”?

答案1

而不是使用

\def\theenv{\arabic{chapter}.\arabic{section}.\arabic{myenvcounter}}

使用

\renewcommand{\themyenvcounter}{\thesection.\arabic{myenvcounter}}

您的环境定义类似于:

\newenvironment{myenv}{%
  \refstepcounter{myenvcounter}%
  \par\medskip\noindent\textbf{Env.\ \themyenvcounter.}%
}{%
  \par\medskip\ignorespacesafterend%
}

以上假设\thesection定义为其通常定义(\thechapter.\arabic{section})。

有两点不同:

  1. 我使用了实际递增的计数器表示。这就是使用时标签引用的工作原理\refstepcounter(请参阅了解引用和标签的工作原理)。
  2. \\我没有使用它来插入垂直空间,而是\par\medskip将其环境设置为一个段落。

这是一个实际的 MWE:

在此处输入图片描述

\documentclass{report}
\newcounter{myenvcounter}[section]%
\renewcommand{\themyenvcounter}{\thesection.\arabic{myenvcounter}}
\newenvironment{myenv}{%
  \refstepcounter{myenvcounter}%
  \par\medskip\noindent\textbf{Env.\ \themyenvcounter.}%
}{%
  \par\medskip\ignorespacesafterend%
}
\begin{document}
\chapter{Chapter one} \label{ch:one}
Some text...
\section{Section one} \label{sec:one}
Some text
\begin{myenv} \label{env:one} 
Bla bla bla.
\end{myenv}
As shown in Env.~\ref{env:one} \ldots\ etc.
\end{document}

相关内容