![将 \section* 居中并添加到目录中](https://linux22.com/image/231894/%E5%B0%86%20%5Csection*%20%E5%B1%85%E4%B8%AD%E5%B9%B6%E6%B7%BB%E5%8A%A0%E5%88%B0%E7%9B%AE%E5%BD%95%E4%B8%AD.png)
我正在使用 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
。这也会影响正在运行的页面标题,否则将保持不变。