我正在处理一个文档,其中页眉的数字显示在左边距,例如
1 Main header
some text within the given section.
1.1 A Subheader
Some text within the subheader.
我在网上某处找到了以下代码,可以实现这一点
\newlength\titleindent
\setlength\titleindent{1.35cm}
\titleformat{\chapter}[block]
{\normalfont\huge\bfseries\center}{}{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}{\theparagraph\hfill}}}{0em}{}
\titleformat{\subparagraph}[runin]
{\normalfont\normalsize}{\llap{\parbox{\titleindent}{\theparagraph\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}
我需要的是某种方式,让我也可以将这些数字添加到文本部分。想象一下这样的事情
\section{Main header}
some text within the given section.
\subsection{A Subheader}
\subsubsection{} Some text within the subheader
会产生
1 Main header
some text within the given section.
1.1 A Subheader
1.1.1 Some text within the subheader.
这就是我想要的。无论我在哪个级别执行此操作,这都应该有效。在这种情况下,它是一个subsubsection
,但它也可能是一个paragraph
我从当前的序言中实际得到的是
1 Main header
some text within the given section.
1.1 A Subheader
1.1.1
Some text within the subheader.
也就是说,subsubsection
标题为空的 仍然占据一行,段落显示如下。
tex 标记不必完全像这样,带有空标题。重要的是
- 数字显示在左边距
- 层次结构得以保留,因此目录看起来正确(并尊重级别)
\ref{...}
将插入正确的数字
编辑:这个问题与章节和段落的编号但我无法自己把这些点联系起来
答案1
使用explicit
选项titlesec
;现在您可以使用来获取部分标题单元#1
,并且可以执行条件测试:如果标题为空,则添加一些负垂直间距;否则,排版标题。该想法针对部分、小节和小小节进行了说明(您可以使用我的代码作为参考轻松修改其余级别):
\documentclass{book}
\usepackage[explicit]{titlesec}
\setcounter{secnumdepth}{5}
\newlength\titleindent
\setlength\titleindent{1.35cm}
\titleformat{\chapter}[block]
{\normalfont\huge\bfseries\center}{}{0pt}{\hspace*{-\titleindent}#1}
\titleformat{\section}
{\normalfont\Large\bfseries}
{\llap{\parbox[t]{\titleindent}{\thesection\hfill}}}{0em}
{\if\detokenize{#1}\relax\relax
{\Large\bfseries\vspace*{-\dimexpr2.3ex+0.5\baselineskip\relax}}
\else#1
\fi
}
\titleformat{\subsection}
{\normalfont\large}{\llap{\parbox[t]{\titleindent}{\thesubsection\hfill}}}
{0em}
{\if\detokenize{#1}\relax\relax
{\Large\bfseries\vspace*{-\dimexpr1.5ex+0.5\baselineskip\relax}}
\else\bfseries#1
\fi
}
\titleformat{\subsubsection}
{\normalfont\normalsize}{\llap{\parbox[t]{\titleindent}{\thesubsubsection}}}
{0em}
{\if\detokenize{#1}\relax\relax
{\Large\bfseries\vspace*{-\dimexpr1.5ex+0.5\baselineskip\relax}}
\else\bfseries#1
\fi
}
\titleformat{\paragraph}[runin]
{\normalfont\large}{\llap{\parbox{\titleindent}{\theparagraph\hfill}}}{0em}{}
\titleformat{\subparagraph}[runin]
{\normalfont\normalsize}{\llap{\parbox{\titleindent}{\theparagraph\hfill}}}{0em}{}
\titlespacing*{\chapter}{0pt}{0pt}{20pt}
\titlespacing*{\section}
{0pt}{3.5ex}{2.3ex}
\titlespacing*{\subsection}
{0pt}{3.25ex plus 1ex minus .2ex}{1.5ex plus .2ex}
\titlespacing*{\subsubsection}{0pt}{3.25ex}{1.5ex}
\titlespacing*{\paragraph}{0pt}{3.25ex plus 1ex minus .2ex}{0em}
\titlespacing*{\subparagraph}{0pt}{3.25ex plus 1ex minus .2ex}{0em}
\begin{document}
\chapter{A test chapter}
Some test text. And cross-references to~\ref{sec:test}, \ref{ssec:test} and~\ref{sssec:test}
\section{A test section}
Some test text.
\section{}
\label{sec:test}
Some test text.
\subsection{A test subsection}
Some test text.
\subsection{}
\label{ssec:test}
Some test text.
\subsubsection{A test subsubsection}
Some test text.
\subsubsection{}
\label{sssec:test}
Some test text.
\end{document}
附带说明一下,您的\parbox
数字应该t
对齐以获得正确的垂直定位(我在修改后的部分单元的示例代码中使用了它)。