我尝试运行这个:
\documentclass{article}
\usepackage{amsmath}
\renewcommand\thesection{\arabic{section}.}
\makeatletter
\renewcommand{\section}{
\@startsection
{section}{1}{0mm}
{\baselineskip}%
{\baselineskip}
{\fontsize{14}{14}\centering\bfseries\MakeUppercase}
}%
\makeatother
\begin{document}
\tableofcontents
\section{A}
\end{document}
我收到一条消息,说“.toc”文件有问题,那么问题出在哪里?为什么这不像amsmath
包?
答案1
amsmath
它巧妙地取决于重新定义的事实\@ifnextchar
。实际上,您有一个虚假空间,该内部命令的内核版本会删除它,而版本amsmath
不会。
\makeatletter
\renewcommand{\section}{%
\@startsection
{section}{1}{0mm}
{\baselineskip}
{\baselineskip}
{\fontsize{14}{14}\centering\bfseries\MakeUppercase}%
}
\makeatother
特别注意最后一个%
屏蔽行尾(这里相当于空格)的行尾。从行\@startsection
到最后一行的行尾不需要屏蔽,因为\@startsection
会查找参数,因此会忽略空格。%
无论如何,放在那里没有坏处。
顺便说一句,重新定义\thesection
并不是在标题中的章节编号后添加句点的最佳方法:
\makeatletter
\renewcommand\@seccntformat[1]{\csname the#1\endcsname.\quad}
\makeatother
更好,因为\ref
在引用章节编号时不会产生后面跟着句点的数字。因此,以下是完整的示例:
\documentclass{article}
\usepackage{amsmath}
\makeatletter
\renewcommand\@seccntformat[1]{\csname the#1\endcsname.\quad}
\renewcommand{\section}{%
\@startsection
{section}{1}{0mm}
{\baselineskip}
{\baselineskip}
{\fontsize{14}{14}\centering\bfseries\MakeUppercase}%
}
\makeatother
\begin{document}
\tableofcontents
\section{A}
\end{document}