使用 amsmath 包时出错

使用 amsmath 包时出错

我尝试运行这个:

   \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}

相关内容