根据 texdoc回忆录课,第 63 和 64 页,通常的\maketitle
命令是:
\newcommand{\maketitle}{%
\vspace*{\droptitle}
\maketitlehooka
{\pretitle \title \posttitle}
\maketitlehookb
{\preauthor \author \postauthor}
\maketitlehookc
{\predate \date \postdate}
\maketitlehookd
\thispagestyle{title}
}
所以我认为输入那个来代替\maketitle
应该可以。但是当我这样做时,我收到错误“\posttitle 的参数有一个额外的 }”。
以下是代码:
\documentclass{memoir}
\begin{document}
\title{Hello}
%\maketitle
\vspace*{\droptitle}
\maketitlehooka
{\pretitle \title \posttitle}
\maketitlehookb
{\preauthor \author \postauthor}
\maketitlehookc
{\predate \date \postdate}
\maketitlehookd
\thispagestyle{title}
\end{document}
答案1
(回忆录手册memman
)第 63/64 页写道
The class provides a configurable \maketitle command. The \maketitle command as defined by the class is essentially
\newcommand{\maketitle}{%
\vspace*{\droptitle}
\maketitlehooka
{\pretitle \title \posttitle}
\maketitlehookb
{\preauthor \author \postauthor}
\maketitlehookc
{\predate \date \postdate}
\maketitlehookd
\thispagestyle{title}
}
然而,真正的代码memoir.cls
是
\newcommand{\@maketitle}{%
\let\footnote\@mem@titlefootkill
\ifdim\pagetotal>\z@
\newpage
\fi
\null
\vskip 2em%
\vspace*{\droptitle}
\maketitlehooka
{\@bspretitle \@title \@bsposttitle}
\maketitlehookb
{\@bspreauthor \@author \@bspostauthor}
\maketitlehookc
{\@bspredate \@date \@bspostdate}
\maketitlehookd
\par
\vskip 1.5em}
其中\@maketitle
实际上是在 内部 调用的\maketitle
。
事实上,\@bspretitle
使用的是 etc.,而不是\pretitle
etc,它们有类似的定义:
\newcommand{\pretitle}[1]{\def\@bspretitle{#1}}
\newcommand{\posttitle}[1]{\def\@bsposttitle{#1}}
\newcommand{\preauthor}[1]{\def\@bspreauthor{#1}}
\newcommand{\postauthor}[1]{\def\@bspostauthor{#1}}
\newcommand{\predate}[1]{\def\@bspredate{#1}}
\newcommand{\postdate}[1]{\def\@bspostdate{#1}}
现在,\pretitle
等等是使用一个参数的宏,它们在内部定义类似的内容\@bspretitle
,因此\pretitle
等等不能在没有参数的情况下直接使用。
基本上,使用就足够了\pretitle{something}\posttitle{other thing}
,但我们必须小心处理,例如(也在手册的第 64 页)中的默认定义memoir
是
\pretitle{\begin{center}\LARGE}
\posttitle{\par\end{center}\vskip 0.5em}
\preauthor{\begin{center}
\large \lineskip 0.5em%
\begin{tabular}[t]{c}}
\postauthor{\end{tabular}\par\end{center}}
\predate{\begin{center}\large}
\postdate{\par\end{center}}
如果\posttitle{foo}
不进行调整,\pretitle
将会出错,因为\pretitle
定义为\begin{center}
基本上,所以会出现不封闭的center
环境,从而导致编译错误。
此代码定义了一个以 开始的组\pretitle
,其中 为,\bfseries
以及一个以 结束的组,其中引入了\posttitle
一些文本。\LARGE
\documentclass{memoir}
\begin{document}
\pretitle{\begingroup\bfseries}
\posttitle{ \LARGE This is from \textbackslash\texttt{posttitle} \endgroup}
\title{Hello}
%\maketitlehookb{\preauthor \author \postauthor{foobar}}
%\maketitlehookc{\predate \date \postdate{foodate}}
%\maketitlehookd{\thispagestyle{title}}
\maketitle
\vspace*{\droptitle}
\end{document}
答案2
\begin{center}
在 的参数中,\pretitle
使用\centering
。同时\end{center}
从 中删除\postitle
。同样\centering
在\preauthor
和 中添加\predate
。