让“列举”继续对章节、小节、小节等进行编号

让“列举”继续对章节、小节、小节等进行编号

我正在使用 MikTex,并尝试创建具有嵌套级别的政府法规类型文档,例如:

I. Section
  A. Subsection
    1. Subsubsection

ETC。

此外,我希望“枚举”从节、小节等结束的地方开始,这样 \begin{enumerate} 就以节下的 A. 或 B. 开始,或者以小节下的 1. 或 2. 开始,等等,这样它就不会使用节标题,而是根据需要打印普通文本。

我一直试图使用以下代码来更改部分编号(基于 stackexchange 上的其他答案),但我仍然收到错误读取"Undefined control sequence. \subsection{name of subsection}".

\renewcommand\thesection{\Roman{Section}}
\renewcommand\thesubsection{\Alpha{Subsection}}
\renewcommand\thesubsubsection{\arabic{Subsubsection}}

我知道我可以使用类似下面的方法手动重置编号:

\begin{enumerate}
  \setcounter{enumi}{3}
  \item Continue numbering
\end{enumerate}

但是,我希望使该过程自动化。我希望这对我试图完成的任务有意义。如果我能进一步说明,请告诉我。

这是一个最小工作示例。

\documentclass[a4paper,12pt]{article}
\usepackage{color}
\usepackage{graphicx}
\usepackage{float}
\usepackage{lipsum}
\usepackage{natbib}
\usepackage{setspace, graphicx, fullpage, fancyhdr, amssymb, amsmath, epsfig, array, multirow, hyperref, tabularx, lscape, booktabs, sidecap, subfig, longtable, enumitem, libertine, todonotes}
\usepackage{caption}
\usepackage[hang]{footmisc}
\usepackage{multicol}
\renewcommand\thesection{\Roman{Section}}
\renewcommand\thesubsection{\Alpha{Subsection}}
\renewcommand\thesubsubsection{\arabic{Subsubsection}}

\begin{document}

\pagenumbering{arabic}
\title{\huge The Constitution}
\author{\large The Author}
\date{\today}
\maketitle 

\tableofcontents

\newpage

\section{Preamble}

\subsection{Name}

We shall be called The Government.

\subsection{Purpose}
\begin{enumerate}
    \item To represent the people.
    \item To preserve democracy.
\end{enumerate}
\subsection{Senate}
Who are the members?
\subsubsection{Voting Members}
These people can vote.
\end{document}

TL;DR 我需要\renewcommand\thesection{\Roman{Section}}工作,并且我需要枚举函数来继续对该部分进行编号,无论它从何处停止打印普通文本而不是标题。

编辑:来自立法起草网站的视觉示例(但编号顺序/布局不同):

(a) (Subsection could be a label/heading, but also could be just the enumerate at the same level as plain text) 

            (1) (Subsubsection, could be a label/heading, but also could be just the enumerate at the same level as plain text) 

                        (A) (Paragraph, should be text)

                                    (i) (Clause, should be text)

                                                (I) (Subclause, should be text)

编辑2:以下是我尝试创建的格式

答案1

如果您还希望节内的文本缩进,就好像这些是枚举环境的项目一样,那么您可能还需要考虑使用枚举替换节命令。

我正在设置一个名为ryuenum下面的枚举环境,它允许您使用\Item{<title>}而不是\item生成带有标题的项目,该标题的格式类似于适当深度的节标题。它还会在目录中插入一个条目。

\documentclass{article}

\usepackage{enumitem}
\newlist{ryuenum}{enumerate}{5}                             %% <- max depth = 5
\setlist[ryuenum]{align=left,labelindent=0pt,               %% <- label placement
                  listparindent=\parindent,parsep=\parskip} %% <- set parindent/parskip

\setlist[ryuenum,1]{label=\Roman*.,ref=\Roman*,
  before={\ryuenumsetup[\ryutoctop]{section}{.5em}{.5em}{\Large\bfseries}}}
\setlist[ryuenum,2]{label=\Alph*.,ref=\Alph*,
  before={\ryuenumsetup{subsection}{.5em}{.5em}{\large\bfseries}}}
\setlist[ryuenum,3]{label=\arabic*.,ref=\arabic*,
  before={\ryuenumsetup{subsubsection}{.5em}{.5em}{\normalsize\bfseries}}}
\setlist[ryuenum,4]{label=\roman*.,ref=\roman*}
\setlist[ryuenum,5]{label=\alph*.,ref=\alph*}

%% Sets parameters that determine appearance of headings/toc entries:
\newlength\ryuspacebefore \newlength\ryuspaceafter
\newcommand\ryuenumsetup[5][\ryutocnormal]{%
  \let\ryutocformat#1%
  \def\ryusecdp{#2}%
  \setlength{\ryuspacebefore}{#3}%
  \setlength{\ryuspaceafter}{#4}%
  \def\ryusecformat{#5}%
}

%% Toc entry styles:
\newcommand*\ryutocnormal[2]{\protect\numberline{#1.}#2}
\newcommand*\ryutoctop[2]{Article #1: #2}

%% The \Item command
\makeatletter %% <- make @ usable in command sequences
\newcommand*\Item[1]{%
  \begingroup                                  %% <- limit scope of font change
    \normalfont\ryusecformat                   %% <- set font
    \par\vspace{\ryuspacebefore}%              %% <- space above
    \item                                      %% <- item
    \interlinepenalty\@M                       %% <- inhibit page breaks
    #1\par%                                    %% <- heading, paragraph break
    \vspace{\ryuspaceafter}                    %% <- space below
    \csname\ryusecdp mark\endcsname{#1}%       %% <- \sectionmark etc.
    \ifx\ryusecdp\empty\else                   %% <- if ryusecdp is non-empty
      \addcontentsline{toc}{\ryusecdp}         %% <- ...create toc entry at right depth
        {\ryutocformat{\@currentlabel}{#1}}%   %% <- ... with the right number/name
    \fi
  \endgroup
  \@afterheading                               %% <- prohibit indentation and enum topsep
  \ignorespaces                                %% <- does what it says
}
\makeatother  %% <- revert @

\usepackage{hyperref} %% <- not necessary, but compatible

\begin{document}

\tableofcontents

\vspace{1cm}\noindent\rule{\linewidth}{1pt}\par\vspace{1cm}

\begin{ryuenum}
    \Item{Preamble}
    \begin{ryuenum}
        \Item{Name}
        We shall be called The Government.
        \Item{Purpose}
        \begin{ryuenum}
        \item To represent the people.
            \begin{ryuenum}
            \item subclause!
            \end{ryuenum}
        \item To preserve democracy.
        \end{ryuenum}
        \Item{Senate}
        Who are the members?
        \begin{ryuenum}
            \Item{Voting Members}
            These people can vote.
        \end{ryuenum}
    \end{ryuenum}
\Item{Final item}
Lorem ipsum dolor sit.
\end{ryuenum}

\end{document}

输出

我正在使用enumitem包(我看到你也在使用它)来设置自定义列表环境,我正在使用

before={\ryuenumsetup[<toc style>]{<section type>}{<space above>}{<space below>}{<font>}}`.

\ryuenumsetup命令设置了变量,用于确定所创建的标题的\Item外观。您可以根据需要调整这些值。

评论

  • 您不需要定义新的枚举环境,也可以使用和enumerate进行修改。\renewlist{enumerate}{enumerate}{5}\setlist[enumerate,<n>]{…}

  • 目前,章节标题的缩进量与其下方的内容完全相同。这可能不适用于顶层的大量数字,因为罗马数字可能非常宽。

  • 您可能还希望稍微调整一下目录的外观。默认情况下,章节编号的开头和标题之间的距离会随着深度的增加而增加,因为章节标题通常会堆叠。据我所知托克洛夫特这个包很适合做这种事,但我对此经验很少。

  • 您可以将第一个必填参数留空\ryuenumsetup,这种情况下此级别的标题将不会显示在目录中。

  • 的大部分定义\Item取自默认的分段命令,但有些部分被省略了。\Item因此不会表现确切地作为分段命令。(最明显的是,它不会增加计数器\<sub*>section。)

答案2

\Roman{section}关于您的第一个问题,它们应该分别是\Alph{subsection}\arabic{subsubsection}。请注意,它\Alph不是\Alpha

至于你的第二个问题...请参阅下面的代码。基本上,我检查当前的部分深度(改编自检测切片深度)并使用构造函数根据该值设置标签\ifcase[有关 的更多信息\ifcase@Joseph 的回答在这里应该可以很好地解释事情。

\documentclass[a4paper,12pt]{article}
\usepackage{enumitem}
\usepackage{etoolbox}  % for \pretocmd

\setcounter{secnumdepth}{4} % for "subsubsubsection" <-> paragraph

% Issue 1:
\renewcommand\thesection{\Roman{section}.}
\renewcommand\thesubsection{\Alph{subsection}.}
\renewcommand\thesubsubsection{\alph{subsubsection}.}
\renewcommand\theparagraph{\roman{paragraph}.}

% Issue 2:
% adapted from: https://tex.stackexchange.com/a/401744
\makeatletter
\def\currentsection{0}% initialise
\pretocmd\@startsection{\def\currentsection{#2}}{}{}
\makeatother

\setlist[enumerate]{label={%
    \ifcase\currentsection
    \Roman*.% if outside section
    \or
    \Alph*.% section level
    \or
    \arabic*.% subsection level
    \or
    \roman*.% subsubsection level
    \or
    \alph*)% "subsubsub"section level
    \fi}
}

\begin{document}    
    \pagenumbering{arabic}
    \title{\huge The Constitution}
    \author{\large The Author}
    \date{\today}
    \maketitle 

    \tableofcontents

    \newpage

    \section{Preamble}

    \subsection{Name}   
    We shall be called The Government.

    \subsubsection{Subsubsection title}
    \begin{enumerate}
        \item Enum item 1
        \item Enum item 2
    \end{enumerate}

    \subsubsection{Another Subsubsection}
    \begin{enumerate}
        \item Enum item 1
        \item Enum item 2
    \end{enumerate}

    \paragraph{The subsubsubsection}
    \begin{enumerate}
        \item Enum 1
        \item Enum 2
    \end{enumerate}

    \subsection{Another subsection}
    \begin{enumerate}
        \item Enum item 1
        \item Enum item 2
    \end{enumerate}

    \section{Another section}
    Who are the members?
    \begin{enumerate}
        \item Enum item 1
        \item Enum item 2
    \end{enumerate}

    \section{TOC format}
    \begin{enumerate}
        \item Enum item 1
        \item Enum item 2
    \end{enumerate}

\end{document}

相关内容