Ich versuche, den folgenden Code zu verwenden:
\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}
Es lässt sich jedoch nicht kompilieren. Das Herausnehmen \ifthenelse
funktioniert (kann getestet werden, indem man ein %
davor setzt), aber ich muss es unbedingt drin haben. Der Fehler lautet wie folgt:
/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
Antwort1
Ein paar Probleme:
Sie verwenden
\ifthenelse
, was erfordert dieifthen
Paket(oderxifthen
).Das Gleiche gilt für
\setstretch
which erfordertsetspace
.
Ein größeres Problem ist jedoch der Test, ob \@author
leer ist {}
. Die Standard-LaTeX-Dokumentklassen \@author
definierennichtleer sein, auch wenn no \author
angegeben ist. Tatsächlich sieht es, wenn no \author
angegeben ist, \@author
so aus (vonlatex.ltx
):
\def\author#1{\gdef\@author{#1}}
\def\@author{\@latex@warning@no@line{No \noexpand\author given}}
\author
definiert einfach neu \@author
, um den Autorennamen zu enthalten, andernfalls ist die Standardausgabe eine Warnung No \author given
. Das folgendeNurändert diesen Teil, da ich nicht sicher bin, was Sie mit der restlichen Titelformatierung machen möchten:
\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}
Die Idee besteht darin, zu erfassen, wie \@author
der Anfang Ihrer Präambel aussieht. Dann können Sie die Makrodefinitionen genau überprüfen und entsprechend verzweigen/bedingen. \@emptyauthor
speichert \@author
ohne Änderungen und der Text \ifx\@author\@emptyauthor <true/no author> \else <false/author> \fi
stellt die Bedingung bereit.
Es wäre jedoch einfacher, es genauer anzugeben \author{no author}
... wirklich.
Um das Datum als weitere verzweigte Ausgabe hinzuzufügen, können Sie verwenden
\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
in Ihrer Präambel.
\title{A title}
\date{}
\begin{document}
\maketitle
\end{document}