我正在使用 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)
答案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}