我正在尝试拥有如下目录:
Name of part
Name of Chapter
Section 1 ..... page
Section 2 ..... page
我不希望该部分的名称出现在目录中的任何地方。我希望它被隐藏。
我尝试过\l@section
这样重新定义
\let\latexl@section\l@section
\def\l@section#1#2{\begingroup\numberline{#1}\latexl@section{}{#2}\endgroup}
但问题似乎是 \section 调用 addtocontents 并将行号和行名信息打包到同一个 numberline 调用中...有人有什么想法吗?
答案1
如果我理解正确的话,您已经创建了将“section”作为目录条目前缀的代码。要隐藏某个部分的列表标题并且只显示“section”前缀和数字,您可以将指令\null
作为宏的可选参数提供\section
,如下例所示。请注意,我没有提供任何代码来为示例中的字符串“Section”添加前缀。
\documentclass{article}
\begin{document}
\tableofcontents
\section{First section}
\section[\null]{Second section}
\end{document}
答案2
这里有一个方法,它定义了一个替代\tableofcontents
命令,称为\tableofcontentsssn
(具有单独章节编号的目录),因此,如果您愿意,您可以在同一个文档中同时使用两种目录样式。您可以配置\lssn@section
等以分别显示编号和名称;它们采用三个参数,即章节编号、章节名称和页码。部分的工作方式不同,因为\l@part
在下一个中硬编码部分编号而不是使用\numberline
,因此第一个参数\lssn@section
始终为空。
如果您想重新定义而不是使用替代命令,那么重要的是在处理 toc 条目时\tableofcontents
更改定义。\contentsline
我只用类测试了此代码report
。考虑到我使用了一些卑鄙的伎俩,它可能会在某些类或包中失败。仅仅包括它titlesec
不会破坏它,但我没有进一步测试它。
\documentclass{report}
\makeatletter
%% \tableofcontentsssn and supporting commands
\newcommand{\contentsline@ssn}[2]{%
\contentsline@ssn@{#1}#2\endcontentsline%
}
\def\contentsline@ssn@#1{%
\expandafter\def\expandafter\contentsline@ssn@command\expandafter{\csname lssn@#1\endcsname}%
\futurelet\contentsline@ssn@next\contentsline@ssn@@%
}
\def\contentsline@ssn@@{%
\ifx\contentsline@ssn@next\numberline%
\expandafter\contentsline@ssn@numberline%
\else%
\expandafter\contentsline@ssn@classic%
\fi
}
\def\contentsline@ssn@numberline\numberline#1#2\endcontentsline{%
\contentsline@ssn@command{#1}{#2}%
}
\def\contentsline@ssn@classic#1\endcontentsline{\contentsline@ssn@command{}{#1}}
\newcommand{\tableofcontentsssn}{%
\begingroup%
%\@fileswfalse % if you want the next \tableofcontents to show the same contents
\let\contentsline\contentsline@ssn%
\tableofcontents%
\endgroup%
}
%% Formatting for \tableofcontentsssn entries
\newcommand*{\lssn@part}[3]{\l@part{#2}{}}
\newcommand*{\lssn@chapter}[3]{\l@chapter{\numberline{#1}#2}{}}
\newcommand*{\lssn@section}[2]{\l@section{Section \numberline{#1}}}
\newcommand*{\lssn@subsection}[2]{\l@section{Subsection \numberline{#1}}}
\newcommand*{\lssn@subsubsection}[2]{\l@section{Subsubsection \numberline{#1}}}
\newcommand*{\lssn@paragraph}[2]{\l@section{Paragraph \numberline{#1}}}
\newcommand*{\lssn@subparagraph}[2]{\l@section{Subparagraph \numberline{#1}}}
\makeatother
\begin{document}
\tableofcontentsssn
\part{Party of the first part}
\chapter{Name of chapter}
\section{First}
\section{Second}
\end{document}