为什么在重新定义 \appendix 命令时会出现错误“!\appendix 定义中的参数数量非法。”?

为什么在重新定义 \appendix 命令时会出现错误“!\appendix 定义中的参数数量非法。”?

我正在尝试重新定义\appendix命令,以便附录标题移至页面顶部。为此,我尝试了以下代码,但出现错误! Illegal parameter number in definition of \appendix。为什么会出现此错误以及如何消除它?

\documentclass{book}
\makeatletter
\renewcommand\appendix{\par
\def\@makechapterhead#1{%
  \vspace*{0\p@}%
  {\parindent \z@ \raggedright \normalfont
    \ifnum \c@secnumdepth >\m@ne
      \if@mainmatter
        \huge\bfseries \@chapapp\space \thechapter
        \par\nobreak
        \vskip 20\p@
      \fi
    \fi
    \interlinepenalty\@M
    \Huge \bfseries #1\par\nobreak
    \vskip 40\p@
  }}
  \setcounter{chapter}{0}%
  \setcounter{section}{0}%
  \gdef\@chapapp{\appendixname}%
  \gdef\thechapter{\@Alph\c@chapter}}
\makeatother
\begin{document}
\appendix
\chapter{Foo}
\end{document}

请记住,我知道一个解决方案是将 的重新定义放在文档主体中的命令\@makechapterhead开头\appendix,但我想在序言中完成这项工作。另外,我宁愿不使用额外的包来完成这项工作。

答案1

在 的定义中\appendix#1将是 的第一个参数,\appendix该参数不存在,\appendix定义为无参数。对于定义中的定义的参数,您需要将哈希字符加倍:

\renewcommand\appendix{\par
  \def\@makechapterhead##1{%
    ... ##1 ...
  }%
  ...
}

如果\@makechapterhead包含另一个带有参数的定义,则####需要内部参数。

相关内容