乳胶,TOC中的NO部分编号,但在实际部分标题中可见

时间:2010-10-20 14:07:31

标签: latex

我正在撰写一份文件,我不希望在TOC中显示小节编号(我希望小节标题在TOC中可见)但我希望小节编号显示在实际文档标题中。

这就是我想要的

Table of Contents
1. Chapter One
 1.1 Section One
       SubSection One

Chapter 1
Chapter One
Some chapter text

1.1 Section One
Some text

1.1.1 Subsection One
Some text

我尝试使用\ setcounter {secnumdepth} {1},但这会从标题部分删除数字,所以我拥有的是

Table of Contents
1. Chapter One
 1.1 Section One
       SubSection One

Chapter 1
Chapter One
Some chapter text

1.1 Section One
Some text

Subsection One
Some text

是否可以在文档标题中获取节号但不在TOC条目中?

2 个答案:

答案 0 :(得分:4)

在一个乳胶示例中(使用“article”类),我在.toc文件中得到了这个:

\contentsline {section}{\numberline {1}test section without number}{1}{section.1}

这里的重要部分是\numberline宏。将它重新定义为空的,如

\def\numberline#1{}

将删除toc中的所有编号,而不是其他地方。 如果你在.toc中得到类似\tocsubsection的内容(参见其他答案),那么你可以做类似的事情:

\let\oldtocsubsection=\tocsubsection
\def\tocsubsection#1#2#3{\oldtocsubsection{#1}{}{#3}}

但是,这会删除目录中的所有号码。如果您想控制编号消失的级别,\contentsline宏会根据上下文扩展到不同的宏,例如\l@section。这些宏反过来使用通用\@dottedtocline宏。这是您需要修改的内容,我们将有条件地重新定义\numberline

要控制停止显示数字的深度,让我们定义一个新的计数器:

\newcounter{sectocnonumdepth}
\setcounter{sectocnonumdepth}{2}

然后条件重新定义将跟随行(从代码中提取以获得更多可读性)。

 \ifnum #1>\c@sectocnonumdepth \def\numberline##1{}\fi%

我只是从\@dottedtocline源文件中复制粘贴了latex.ltx的定义,并在里面添加了检查。以下是整个示例的代码:

\newcounter{sectocnonumdepth}
\setcounter{sectocnonumdepth}{2}


\makeatletter
\def\@dottedtocline#1#2#3#4#5{%
  \ifnum #1>\c@tocdepth \else
    \vskip \z@ \@plus.2\p@
    {\ifnum #1>\c@sectocnonumdepth \def\numberline##1{}\fi%
     \leftskip #2\relax \rightskip \@tocrmarg \parfillskip -\rightskip
     \parindent #2\relax\@afterindenttrue
     \interlinepenalty\@M
     \leavevmode
     \@tempdima #3\relax
     \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip
     {#4}\nobreak
     \leaders\hbox{$\m@th
        \mkern \@dotsep mu\hbox{.}\mkern \@dotsep
        mu$}\hfill
     \nobreak
     \hb@xt@\@pnumwidth{\hfil\normalfont \normalcolor #5}%
     \par}%
  \fi}
\makeatother

最后注意事项:这将使部分和子部分的标题从相同的水平位置开始,因为没有要显示的数字。如果您想要更多填充,可以将\quad添加到\numberline的新定义,或者甚至使用原始定义,只删除#1

\def\numberline##1{\hb@xt@\@tempdima{\hfil}}

答案 1 :(得分:2)

我不确定这样做的程序化方法,但我知道您可以进入生成的文档的* .toc文件,并删除要抑制的部分的section number参数。 / p>

你可以改变这个:

\contentsline {subsection}{\tocsubsection {}{1.1}{subsection one}}{1}

对此:

\contentsline {subsection}{\tocsubsection {}{}{subsection one}}{1}

哪个会产生你想要的东西。注意,每次编译tex源时都会重新生成。