我(仍然)尝试复制这个文件。
章节和段落均已编号,位于页边距中(章节标题不将此视为页边距,但我可以忽略这一点)。它们左对齐。
到目前为止,Google 和 Play 已经发现了这些:
1) parano.sty
它可以让我自动编号段落,这很好。它对深度(即子段落)没有灵活性,我还没有测试过移动它的编号。
2) \paragraph{}
这是目前最接近的解决方案。使用\setcounter{secnumdepth}{5}
它可以为段落添加数字。然后,此代码将所有数字放在边距中:
\makeatletter
\def\@seccntformat#1{\protect\makebox[0pt][r]{\csname the#1\endcsname\quad}}
\makeatother
[0pt]
我可以通过增加和更改r
为来使它们左对齐l
,但我无法正确获得悬挂缩进(或将框移动到左边距)
此外,没有标题的 \paragraphs 会留下一些空间(大概是为了将文本与标题分开?),进一步阻止了我所追求的整齐对齐。
该解决方案(具有相同的限制)还允许我使用子段落,我最终会需要它。
答案1
看了链接的文档后,我发现了六个部分单元:章、节、带标题的编号小节、无标题的编号小节、带标题的编号小节和无标题的编号小节。所以问题是如何定义这六个部分单元。
下面的代码展示了使用标题安全包;底层思想是使用\llap
和\parbox
es 来排版悬挂在边距上的数字。长度\titleindent
允许您轻松控制悬挂缩进。
\paragraph
已被更改,以便允许没有标题的编号小节,并且\subparagraph
还被重新定义为允许编号小节。
下表显示了文档各部分单元之间的“词典”和用于排版的 LaTeX 命令:
章节 ->
\chapter
章节 ->
\section
带标题的编号小节 ->
\subsection
无标题的带编号小节 ->
\paragraph
带标题的编号子部分 ->
\subsubsection
无标题的带编号子小节 ->
\subparagraph
以下是代码(请随意进行必要的调整以满足您的要求):
\documentclass{book}
\usepackage{titlesec}
\usepackage{etoolbox}
\usepackage{lipsum}
\setcounter{secnumdepth}{5}
\renewcommand\thesection{\arabic{section}}
% this length controls tha hanging indent for titles
% change the value according to your needs
\newlength\titleindent
\setlength\titleindent{2cm}
\pretocmd{\paragraph}{\stepcounter{subsection}}{}{}
\pretocmd{\subparagraph}{\stepcounter{subsubsection}}{}{}
\titleformat{\chapter}[block]
{\normalfont\huge\bfseries}{}{0pt}{\hspace*{-\titleindent}}
\titleformat{\section}
{\normalfont\Large\bfseries}{\llap{\parbox{\titleindent}{\thesection\hfill}}}{0em}{}
\titleformat{\subsection}
{\normalfont\large}{\llap{\parbox{\titleindent}{\thesubsection\hfill}}}{0em}{\bfseries}
\titleformat{\subsubsection}
{\normalfont\normalsize}{\llap{\parbox{\titleindent}{\thesubsubsection}}}{0em}{\bfseries}
\titleformat{\paragraph}[runin]
{\normalfont\large}{\llap{\parbox{\titleindent}{\thesubsection\hfill}}}{0em}{}
\titleformat{\subparagraph}[runin]
{\normalfont\normalsize}{\llap{\parbox{\titleindent}{\thesubsubsection\hfill}}}{0em}{}
\titlespacing*{\chapter}{0pt}{0pt}{20pt}
\titlespacing*{\subsubsection}{0pt}{3.25ex plus 1ex minus .2ex}{1.5ex plus .2ex}
\titlespacing*{\paragraph}{0pt}{3.25ex plus 1ex minus .2ex}{0em}
\titlespacing*{\subparagraph}{0pt}{3.25ex plus 1ex minus .2ex}{0em}
\begin{document}
\chapter{Test chapter}
\section{Test Section}
\lipsum[2]
\subsection{Test Subsection}
\lipsum[2]
\paragraph{}% acts like a numbered subsection without title
\lipsum[2]
\subsubsection{Test Subsubsection}
\lipsum[2]
\subparagraph{}% acts like a numbered subsubsection without title
\lipsum[2]
\end{document}
以前的方法假设您不会使用\paragraph
其\subparagraph
标准格式;另一个(也许更明智的)选择是定义两个全新的分段单元;当然,这需要一些额外的工作,但现在您将拥有标准分段单元加上两个新的分段单元。
以下代码说明了此方法的定义\subsectionwt
(对于没有标题的编号小节)和\subsubsectionwt
(对于没有标题的编号小节);它还为目录做出了必要的规定。
新的“词典”现在是:
章节 ->
\chapter
章节 ->
\section
带标题的编号小节 ->
\subsection
无标题的带编号小节 ->
\subsectionwt
带标题的编号子部分 ->
\subsubsection
无标题的带编号子小节 ->
\subsubsectionwt
段落 ->
\paragraph
子段落 ->
\subparagraph
示例代码:
\documentclass{book}
\usepackage{titlesec,titletoc}
\usepackage{etoolbox}
\usepackage{lipsum}
\setcounter{secnumdepth}{5}
\renewcommand\thesection{\arabic{section}}
% this length controls tha hanging indent for titles
% change the value according to your needs
\newlength\titleindent
\setlength\titleindent{2cm}
% counters for the new sectional units
\newcounter{subsectionwt}
\newcounter{subsubsectionwt}
% definition of the new sectional units with the representation of the counters
\titleclass{\subsectionwt}{straight}[\subsubsection]
\renewcommand{\thesubsectionwt}{\thesection.\arabic{subsectionwt}}
\titleclass{\subsubsectionwt}{straight}[\subsectionwt]
\renewcommand{\thesubsubsectionwt}{\thesubsection.\arabic{subsubsectionwt}}
% \subsection must increase the subsectionwt counter
% and \subsectionwt must increase the subsection counter
% Analogous treatment for \subsubsection and \subsubsectionwt
\pretocmd{\subsectionwt}{\stepcounter{subsection}}{}{}
\pretocmd{\subsection}{\stepcounter{subsectionwt}}{}{}
\pretocmd{\subsubsectionwt}{\stepcounter{subsubsection}}{}{}
\pretocmd{\subsubsection}{\stepcounter{subsubsectionwt}}{}{}
% format for the sectional units
\titleformat{\chapter}[block]
{\normalfont\huge\bfseries}{}{0pt}{\hspace*{-\titleindent}}
\titleformat{\section}
{\normalfont\Large\bfseries}{\llap{\parbox{\titleindent}{\thesection\hfill}}}{0em}{}
\titleformat{\subsection}
{\normalfont\large}{\llap{\parbox{\titleindent}{\thesubsection\hfill}}}{0em}{\bfseries}
\titleformat{\subsectionwt}[runin]
{\normalfont\large}{\llap{\parbox{\titleindent}{\thesubsectionwt\hfill}}}{0em}{\bfseries}
\titleformat{\subsubsection}
{\normalfont\normalsize}{\llap{\parbox{\titleindent}{\thesubsubsection}}}{0em}{\bfseries}
\titleformat{\subsubsectionwt}[runin]
{\normalfont\normalsize}{\llap{\parbox{\titleindent}{\thesubsubsectionwt}}}{0em}{\bfseries}
\titlespacing*{\chapter}{0pt}{0pt}{20pt}
\titlespacing*{\subsection}{0pt}{3.25ex plus 1ex minus .2ex}{1.5ex plus .2ex}
\titlespacing*{\subsectionwt}{0pt}{3.25ex plus 1ex minus .2ex}{0em}
\titlespacing*{\subsubsection}{0pt}{3.25ex plus 1ex minus .2ex}{1.5ex plus .2ex}
\titlespacing*{\subsubsectionwt}{0pt}{3.25ex plus 1ex minus .2ex}{0em}
% numbered entries without title shouldn't go to the ToC
\titlecontents{subsectionwt}[]{}{}{}{}
\titlecontents{subsubsectionwt}[]{}{}{}{}
\begin{document}
\tableofcontents
\chapter{Test chapter}
\section{Test Section}
\lipsum[2]
\subsection{Test Subsection}
\lipsum[2]
\subsectionwt{}% for numbered subsections without title
\lipsum[2]
\subsubsection{Test Subsubsection}
\lipsum[2]
\subsubsectionwt{}% for numbered subsubsections without title
\lipsum[2]
\end{document}
答案2
对于 KOMA-Script 类,您不需要额外的包。在 KOMA-Script 类中,章节标题的数量由\partformat
、\chapterformat
、\sectionformat
、\subsectionformat
……打印\subparagraphformat
。所以我的第一个建议是重新定义这些命令:
\documentclass{scrreprt}
\usepackage{blindtext}
\setcounter{secnumdepth}{\paragraphnumdepth}% To show the result for all
% levels down to paragraph
\newcommand*{\numberinmargin}[1]{%
\makebox[0pt][r]{#1\autodot\hskip\marginparsep}}
\renewcommand*{\chapterformat}{\numberinmargin{\thechapter}}
\renewcommand*{\sectionformat}{\numberinmargin{\thesection}}
\renewcommand*{\subsectionformat}{\numberinmargin{\thesubsection}}
\renewcommand*{\subsubsectionformat}{\numberinmargin{\thesubsubsection}}
\renewcommand*{\paragraphformat}{\numberinmargin{\theparagraph}}
\begin{document}
\chapter{A Chapter Title}
\blindtext
\section{A Section Title}
\blindtext
\subsection{A Subsection Title}
\blindtext
\subsubsection{A Subsubsection Title}
\blindtext
\paragraph{A Paragraph Title}
\blindtext
\end{document}
您可以使用的另一种定义来将数字左对齐\numberinmargin
,例如:
\newcommand*{\numberinmargin}[1]{%
\makebox[0pt][r]{%
\makebox[\marginparwidth][l]{#1\autodot}%
\hskip\marginparsep
}%
}
将导致:
但是如果你使用相同的代码\subparagraph
:
\setcounter{secnumdepth}{\subparagraphnumdepth}
\renewcommand*{\subparagraphformat}{\numberinmargin{\thesubparagraph}}
在文件序言中和
\subparagraph{A Subparagraph Title}
\blindtext
在正文中你会发现它不起作用:
为什么会失败?的默认设置\subparagraph
是缩进标题。因此\makebox[0pt][r]{…}
,从当前位置开始打印内容(= 数字)的,现在不是从文本区域的左边缘打印,而是从缩进位置打印。
我们可以通过删除缩进来解决这个问题:
\RedeclareSectionCommand[indent=0pt]{subparagraph}
但是如果我们想尊重缩进,那也可以为其他部分级别进行配置,我们必须向下一步进入 KOMA-Script 的较低级别界面并重新定义\sectionlinesformat
和\sectioncatchphraseformat
。
\sectionlinesformat
用于格式化打印显示的节级的节标题。默认情况下,这些是\section
、\subsection
和\subsubsection
。默认定义(在 KOMA-Script 手册中给出)是:
\newcommand{\sectionlinesformat}[4]{%
\@hangfrom{\hskip #2#3}{#4}%
}
第一个参数是节级的名称,即section
,,,subsection
。subsubsection
第二个参数是缩进。第三个参数是给出的数字\…format
,第四个参数是标题文本。\@hangfrom
用于格式化多行标题的悬挂标题。假设我们想要边距中的数字,但文本区域中的缩进,我们可以移动#2' to the front still using the redefined
\…format` 命令:
\renewcommand{\sectionlinesformat}[4]{%
#3\@hangfrom{\hskip #2}{#4}%
}
\sectioncatchpraseformat
用于在文本中打印为标语的章节标题。通常用于\paragraph
和\subparagraph
。默认类似于\sectionlinesformat
但没有\@hangfrom
:
\newcommand{\sectioncatchphraseformat}[4]{%
\hskip #2#3#4%
}
重新定义也类似:
\renewcommand{\sectioncatchphraseformat}[4]{%
#3\hskip #2#4%
}
让我们再次使用右对齐版本\numbersinmargin
:
\documentclass{scrreprt}
\usepackage{blindtext}
\setcounter{secnumdepth}{\subparagraphnumdepth}% To show the result for all
% levels down to subparagraph
\newcommand*{\numberinmargin}[1]{%
\makebox[0pt][r]{%
\makebox[\marginparwidth][r]{#1\autodot}%
\hskip\marginparsep
}%
}
\renewcommand*{\chapterformat}{\numberinmargin{\thechapter}}
\renewcommand*{\sectionformat}{\numberinmargin{\thesection}}
\renewcommand*{\subsectionformat}{\numberinmargin{\thesubsection}}
\renewcommand*{\subsubsectionformat}{\numberinmargin{\thesubsubsection}}
\renewcommand*{\paragraphformat}{\numberinmargin{\theparagraph}}
\renewcommand*{\subparagraphformat}{\numberinmargin{\thesubparagraph}}
\makeatletter% because of @ in \@hangfrom
\renewcommand{\sectionlinesformat}[4]{%
#3\@hangfrom{\hskip #2}{#4}%
}
\makeatother% switch back from \makeatletter
\renewcommand{\sectioncatchphraseformat}[4]{%
#3\hskip #2#4%
}
\begin{document}
\chapter{A Chapter Title}
\blindtext
\section{A Section Title}
\blindtext
\subsection{A Subsection Title}
\blindtext
\subsubsection{A Subsubsection Title}
\blindtext
\paragraph{A Paragraph Title}
\blindtext
\subparagraph{A Subparagraph Title}
\blindtext
\end{document}
如您所见,\subparagraph
标题现在缩进,而不会干扰数字的位置。
如果您还想处理带有前缀行的章节标题(请参阅chapterprefix
KOMA-Script 手册中的选项)或部分标题,则需要额外的定义。例如,对于前缀行,您可以像上面一样将数字移动到边距,但术语Chapter
保留在文本区域中:
\renewcommand*{\chapterformat}{%
\numberinmargin{\thechapter}\chapappifchapterprefix{}%
}
如果您现在添加选项chapterprefix
,\documentclass
您将获得:
我要说的是:我不喜欢这个结果并建议不要使用chapterprefix
。
对于部分标题,您可以做类似的事情,但我也不喜欢结果,所以我不会显示它。
答案3
如果章节编号位于标题下方,请输入\parbox[b]
@GonzaloMedina 的答案。要增加子章节的缩进,请参阅以下答案所有 ((sub)sub) 部分均自动按合法样式缩进。