![使用每个部分编号来定义自定义环境](https://linux22.com/image/245519/%E4%BD%BF%E7%94%A8%E6%AF%8F%E4%B8%AA%E9%83%A8%E5%88%86%E7%BC%96%E5%8F%B7%E6%9D%A5%E5%AE%9A%E4%B9%89%E8%87%AA%E5%AE%9A%E4%B9%89%E7%8E%AF%E5%A2%83.png)
我有一个enumerate
环境,我想稍后使用\ref
和在我的文档中引用它\label
,但enumerate
无法按节编号(例如,按方式figure
)。如何为 添加节编号enumerate
?
我不希望对个别的枚举项目进行编号。相反,我希望对整个枚举进行编号。
我真正寻找的是这样的:
算法 1.2
. 买牛奶
3. 步行回家
... /剪掉/ ...
正如算法 1.2 所述,购买牛奶很容易。
我不想使用图形,因为我无法让它在文档中移动。我不想使用定理/定义/证明环境,因为所有样式都一样。算法环境也使用了很多样式。我基本上是在寻找一种方法,在我的枚举环境上添加一个标题,并给它一个我可以参考的数字。
编辑:
根据 Mico 的帖子,我最终得出了以下结论:
\usepackage{amsmath}
\newcounter{algcounter}
\newenvironment{alg}{
\bigskip\noindent
\refstepcounter{algcounter}
\textbf{Algorithm \thealgcounter}
\newline
\begin{enumerate}
\setlength{\itemsep}{1pt}
\setlength{\parskip}{0pt}
\setlength{\parsep}{0pt}
}{\end{enumerate}}
\numberwithin{algcounter}{section}
答案1
如果你愿意加载该amsmath
包(你可能已经这样做了...),你可以直接发出命令
\numberwithin{enumi}{section}
使一级枚举从属于该部分。
附录。从您的后续评论来看,您似乎不是想改变 LaTeX 自身enumerate
环境的外观,而是想创建一个将在部分内编号的自定义环境。(即,每次\section
遇到命令时,编号应从“1”开始;但是,部分编号需要作为环境编号的前缀。)以下 MWE 说明了如何实现这一点。
\documentclass{article}
\usepackage{amsmath} % needed for its \numberwithin command
\newcounter{myalgctr}
\newenvironment{myalg}{% define a custom environment
\bigskip\noindent% create a vertical offset to previous material
\refstepcounter{myalgctr}% increment the environment's counter
\textsc{Algorithm \themyalgctr}% or \textbf, \textit, ...
\newline%
}{\par\bigskip} % create a vertical offset to following material
\numberwithin{myalgctr}{section}
\begin{document}
\section{First section}
Some text before the first algorithm environment \ldots
\begin{myalg}
Some thoughts\ldots \label{alg:first}
\end{myalg}
\begin{myalg}
More thoughts\ldots \label{alg:second}
\end{myalg}
Some text after the second algorithm environment \ldots
\section{Second section}
\begin{myalg}
Further thoughts\ldots \label{alg:third}
\end{myalg}
\section{Third section}
As we showed in algorithms \ref{alg:first}, \ref{alg:second},
and \ref{alg:third}, \ldots
\end{document}
答案2
编辑:
根据评论的新信息,我提供了新的答案。
要输入算法,您可以使用包algorihtm
。通过使用命令numberwithin
(由提供amsmath
),您可以设置计数器:
\documentclass[a4paper,11pt]{article}
\usepackage{algorithmicx}
\usepackage{algorithm}
\usepackage{algpseudocode}
\usepackage{amsmath}
\numberwithin{algorithm}{section}
\begin{document}
\section{foo}
\begin{algorithm}
\caption{Algorithm}\label{algo}
\begin{algorithmic}[1]
\Require $x\ge5$
\Ensure $x\le-5$
\Statex
\While{$x>-5$}
\State $x\gets x-1$
\EndWhile
\end{algorithmic}
\end{algorithm}
\ref{algo}
\end{document}
要像我这样操作列表环境,enumerate
我真的推荐包。该包提供了操作引用格式的enumitem
关键。ref
下面是一个例子:
\documentclass{article}
\usepackage{enumitem}
\setlist[enumerate,1]{ref=\thesection.\theenumi}
\begin{document}
\section{foo}
Text
\begin{enumerate}
\item \label{enum1} foo
\item \label{enum2} bar
\end{enumerate}
\ref{enum1} and \ref{enum2}
\end{document}