使用每个部分编号来定义自定义环境

使用每个部分编号来定义自定义环境

我有一个enumerate环境,我想稍后使用\ref和在我的文档中引用它\label,但enumerate无法按节编号(例如,按方式figure)。如何为 添加节编号enumerate

我不希望对个别的枚举项目进行编号。相反,我希望对整个枚举进行编号。

我真正寻找的是这样的:


算法 1.2

  • 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}
    

    在此处输入图片描述

    相关内容