向目录添加不同类型的实体

向目录添加不同类型的实体

我在使用书籍 documentclass 的文档中拥有多种不同类型的实体。有章节、实验室、附录等。

仅以实验室为例,我创建了一个新命令来定义实验室并自动编号。我希望它们位于目录中与章节相同的级别。现在,作为一个快速技巧,我创建了实验室章节,这使它们显示出来,但它们显示章节编号和实验室编号。

\newcounter{lab}
\newcommand{\lab}[1]{\stepcounter{lab} \chapter{Lab \arabic{lab}: #1}}

如何指定哪些实体进入目录?

此外,如果我要创建一个自己的独立章节,那么在另一个问题中:自定义 \chapter 定义

在其中一个答案中,我看到了对 chapter 宏的定义的引用,但我没有看到 chapter 如何设置字体和文本大小?代码如下:

\newcommand\chapter{\if@openright\cleardoublepage\else\clearpage\fi
                    \thispagestyle{plain}%
                    \global\@topnum\z@
                    \@afterindentfalse
                    \secdef\@chapter\@schapter}

结果是,我如何创建新实体放入目录,以及这些实体如何定义它们的外观?

答案1

\addtocontents 将记录写入文件 toc,下次运行 latex 时 \tableofcontents 将读取该文件。检查 .toc 文件以查看结果。例如,\string\contentsline 写入“\contentsline”,但不展开。{chapter} 条目与区分章节和节等有关。其余部分与章节相同,只是我使用 \thelab 而不是 \thechapter。

\documentclass{book}

\makeatletter
\newcounter{lab}% also defines \thelab

% roughly equivalent to \chapter
\newcommand{\lab}[1]{% #1 is lab heading
  \refstepcounter{lab}%
  \if@openright\cleardoublepage\else\clearpage\fi%
  \addtocontents{toc}{\string\contentsline {chapter}%
    {\hbox to .65in{Lab}\protect\numberline{\thelab}#1}{\thepage}}%
  \global\@topnum\z@% page number to bottom?
  \noindent%
  \@lab{#1}% fixed first character separation
}

% roughly equivalent to \@chapter
\def\@lab#1{% #1 is lab heading
  \if@twocolumn%
    \@topnewpage[{\huge\bfseries Lab \thelab: #1\par}]%
  \else{\huge\bfseries Lab \thelab: #1\par}%
  \@afterheading% no idea
  \fi}

% copied from mwe
\renewcommand\chapter{\if@openright\cleardoublepage\else\clearpage\fi
   \thispagestyle{plain}%
   \global\@topnum\z@
   \@afterindentfalse
   \secdef\@chapter\@schapter}

% copied from book.cls and modified
\def\@chapter[#1]#2{%
  \ifnum \c@secnumdepth >\m@ne
    \if@mainmatter
      \refstepcounter{chapter}%
      \typeout{\@chapapp\space\thechapter.}%
      \addtocontents{toc}{\string\contentsline {chapter}%
        {\hbox to .65in{Chapter}\protect\numberline{\thechapter}#1}{\thepage}}%
    \else
      \addtocontents{toc}{\string\contentsline {chapter}%
        {\hbox to .65in{Chapter}\protect\numberline{\thechapter}#1}{\thepage}}%
    \fi
  \else
    \addtocontents{toc}{\string\contentsline {chapter}%
      {\hbox to .65in{Chapter}\protect\numberline{\thechapter}#1}{\thepage}}%
  \fi
  \chaptermark{#1}%
  \addtocontents{lof}{\protect\addvspace{10\p@}}%
  \addtocontents{lot}{\protect\addvspace{10\p@}}%
  \if@twocolumn
    \@topnewpage[\@makechapterhead{#2}]%
  \else
    \@makechapterhead{#2}%
    \@afterheading
  \fi}
\makeatother

\begin{document}
\tableofcontents
\chapter{In the beginning}

This space intentionally left blank.

\lab{Eat the apple.}

This space intentionally left blank.
\end{document}

相关内容