KOMA 类中的 \maketitle 的重新定义问题(带有可选参数)

KOMA 类中的 \maketitle 的重新定义问题(带有可选参数)

我尝试重新定义\maketitle命令,如下所示。

如果我在重新定义中使用可选参数,就会出现错误TeX capacity exceeded

有什么建议吗?

MNWE:

\documentclass{scrreprt}

\title{My Title}
\author{My Name}

\let\oldmaketitle\maketitle

\renewcommand{\maketitle}[1][]{%
  \oldmaketitle
  \rule{\textwidth}{1pt}
}

\begin{document}

\maketitle

\end{document}

答案1

\let使用带有可选参数的命令(在 KOMA 类中用\maketitle一个可选参数定义)可能会产生不良影响:你可以\LetLtxMacro使用letltxmacro改为包:

\documentclass{scrreprt}
\usepackage{letltxmacro}
\title{My Title}
\author{My Name}

\LetLtxMacro\oldmaketitle\maketitle

\renewcommand{\maketitle}[1][]{%
  \oldmaketitle
  \rule{\textwidth}{1pt}
}

\begin{document}

\maketitle

\end{document}

您的示例代码没有显示可选参数的用法。

答案2

\maketitle中的命令scrreprt一个可选参数,因此用\let\oldmaketitle\maketitle和重新定义它\renewcommand\maketitle会使您面临一个非常大的问题,这在的文档中有很好的描述letltxmacro

如果你需要做的只是在末尾添加一些内容\maketitle,那么安全的方法是使用xpatch(或regexpatch):

\usepackage{xpatch} % or \usepackage{regexpatch}
\xapptocmd{\maketitle}{\noindent\rule{\textwidth}{1pt}}{}{}

然而这惯于在日期下方添加规则。原因是使用默认选项\maketitle会自行打印一页,规则将转到下一页;如果titlepage=false在选项中指定,则\@maketitle使用内部命令。

因此,为了获得日期以下的规则,更好的技巧是修补命令并在打印日期之后准确添加规则,方法是\@date

\documentclass{scrreprt}

\usepackage{xpatch} % or \usepackage{regexpatch}

\makeatletter
%% the following patch is for the `titlepage=true` option
\xpatchcmd{\maketitle}{\@date}{\@date\par\rule{\textwidth}{1pt}}{}{}
%% the following patch is for the `titlepage=false` option
\xpatchcmd{\@maketitle}{\@date}{\@date\par\rule{\textwidth}{1pt}}{}{}
\makeatother

\begin{document}

\title{My Title}
\author{My Name}

\maketitle

\end{document}

在此处输入图片描述

相关内容