我正在尝试使用以下代码:
\documentclass{article}
\makeatletter
\def\@maketitle{%
\newpage
\null
\begin{center}%
\let \footnote \thanks
{\Large \MakeUppercase{\@title} \par}%
\ifthenelse{\equal{\@author}{}}{no author}%
{\vskip 1.5em\textsc{\setstretch{1.32}\@author\\\hfill}\par}%
\end{center}
\par
\vskip 4em\noindent}
\begin{document}
\maketitle
\end{document}
但是,它无法编译。删除这些\ifthenelse
作品(可以通过在%
它前面放一个来测试),但我确实需要它。错误如下:
/tmp/gummi_V2UOCX:32: Use of \@item doesn't match its definition.
\@ifnextchar ... \reserved@d =#1\def \reserved@a {
#2}\def \reserved@b {#3}\f...
l.32 \maketitle
答案1
有几个问题:
然而,更大的问题是测试是否\@author
为空{}
。默认的 LaTeX 文档类定义\@author
为不是为空,即使未\author
指定。事实上,如果没有\author
指定,则\@author
看起来像这样(来自latex.ltx
):
\def\author#1{\gdef\@author{#1}}
\def\@author{\@latex@warning@no@line{No \noexpand\author given}}
\author
只需重新定义\@author
为包含作者姓名,否则其默认输出是警告No \author given
。以下只是改变这一部分,因为我不确定你想对其余的标题格式做什么:
\documentclass{article}
\usepackage{setspace}% http://ctan.org/pkg/setspace
\makeatletter
\let\@emptyauthor\@author
\def\@maketitle{%
\newpage
\null
\begin{center}%
\let \footnote \thanks
{\Large \MakeUppercase{\@title} \par}%
\ifx\@author\@emptyauthor
no author%
\else% \author is supplied
\vskip 1.5em\textsc{\setstretch{1.32}\@author\\\hfill}\par
\fi%
\end{center}
\par
\vskip 4em\noindent}
\makeatother
\title{A title}
\begin{document}
\maketitle
\end{document}
这个想法是捕捉\@author
序言开头的内容。然后您可以准确检查宏定义并相应地进行分支/条件。\@emptyauthor
存储\@author
不做任何修改,文本\ifx\@author\@emptyauthor <true/no author> \else <false/author> \fi
提供条件。
然而,实际上,指定它会更容易\author{no author}
。
要添加日期作为另一个分支输出,您可以使用
\makeatletter
\def\ifemptyarg#1{% http://tex.stackexchange.com/q/308/5764
\if\relax\detokenize{#1}\relax % H. Oberdiek
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi}
\let\@emptyauthor\@author
\def\@maketitle{%
\newpage
\null
\begin{center}%
\let \footnote \thanks
{\Large \MakeUppercase{\@title} \par}%
\ifx\@author\@emptyauthor
no author%
\else% \author is supplied
\vskip 1.5em\textsc{\setstretch{1.32}\@author\\\hfill}\par
\fi%
\par\expandafter\ifemptyarg\expandafter{\@date}{no date}{\@date}%
\end{center}
\par
\vskip 4em\noindent}
\makeatother
在你的序言中。
\title{A title}
\date{}
\begin{document}
\maketitle
\end{document}