라텍스 \@author with ifthenelse

라텍스 \@author with 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다음을 정의합니다.~ 아니다no가 지정되었더라도 비어 있어야 합니다 \author. 실제로 no를 \author지정 하면 \@author다음과 같습니다(fromlatex.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}

관련 정보