语境:我有几个带有自定义计数器的环境。像往常一样,我将它们引用到我的文档中,但我只得到相应的计数器值作为参考。
例子:
\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}
)。
有两点不同:
- 我使用了实际递增的计数器表示。这就是使用时标签引用的工作原理
\refstepcounter
(请参阅了解引用和标签的工作原理)。 \\
我没有使用它来插入垂直空间,而是\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}