Latex \@author 與 ifthenelse

Latex \@author 與 ifthenelse

我正在嘗試使用以下程式碼:

\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(可以在%前面放一個in來測試),但我確實需要把它放進去,錯誤如下:

/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以包含作者姓名,否則它的預設輸出是 warning 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}

相關內容