将 \section* 居中并添加到目录中

将 \section* 居中并添加到目录中

我正在使用 LaTeX 和课程book,但遇到一个问题:

我希望我的加星标部分(仅加星标部分)出现在页面的中心而不是页面的左侧,并且这些部分会自动添加到目录中。

答案1

我建议创建一个具有不同名称的新宏,而不是更改的行为\section*并重新定义\section。单独的宏将是一个更清晰的解决方案。

用于分段的主要 LaTeX 命令是\@startsection。它记录在 source2e.pdf 中,只需texdoc source2e在命令提示符下输入即可。您可以在61.2 切片

因此,让我们创建一个宏,\@startsection\centering在格式化参数中使用:

\documentclass{book}
\makeatletter
\newcommand\@csection{\@startsection {section}{1}{\z@}%
  {-3.5ex \@plus -1ex \@minus -.2ex}%
  {2.3ex \@plus.2ex}%
  {\normalfont\Large\bfseries\centering}}
\newcommand{\csection}[1]{%
  \@csection*{#1}%
  \addcontentsline{toc}{section}{#1}%
}
\makeatother
\begin{document}
\tableofcontents
\chapter{First chapter}
\section{First section}
some text
\csection{A centered section}
more filler text.
\end{document}

由于\@startsection包含@字符,我不得不使用\makeatletter... 。我定义了一个执行分段的\makeatother内部宏。最终的用户命令调用此宏,但另外将条目添加到目录中。\@csection\csection

\csection执行您要求的操作:它创建一个带有目录条目的未编号的节级标题。请注意,它不支持可选参数,因为这不是必需的。

如果你需要更多自定义,也需要其他分段命令,我建议使用titlesec包。它为分段定制提供了非常好的界面。

输出:

输出

答案2

您可以定义一个新命令来代替\section*,结合Bran的答案和\centering命令:

\newcommand{\secstar}[1]{\addcontentsline{toc}{section}{#1}\section*{\centering #1}}

new\secstar命令将节名作为参数,然后将其添加到目录并创建一个新的\section*,以节标题为中心。其使用的完整示例如下:

\documentclass{book}
\newcommand{\secstar}[1]{\addcontentsline{toc}{section}{#1}\section*{\centering #1}}
\begin{document}
\tableofcontents
\section{Test 1}
First numbered section
\secstar{Test 2}
An unnumbered section
\end{document}

答案3

对于问题的第二部分(将这些部分添加到目录中),您可以\addcontentsline{toc}{chapter}{My chapter}在指定section命令之前使用。

答案4

看起来新生既不允许发表评论,上述修改提议也没有通过同行评审。所以很遗憾,我不得不添加一个单独的答案。

上述使用建议\addcontentsline是有缺陷的,因为\section*它鼓励在章节开始前进行分页,分离页面addcontentsline并导致页面条目早了一页。

解决这个问题的一种方法是将建议的定义重写为

\newcommand{\secstar}[1]{\section*{\addcontentsline{toc}{section}{#1}\centering #1}}

当然,使用 KomaScript 类及其命令会更简单\addsec。这也会影响正在运行的页面标题,否则将保持不变。

相关内容