cls 变量后备

cls 变量后备

由于我没有写作经验,cls所以这可能是一个非常简单的问题,而且是重复的,但我无法用确切的词来表达它。

以下是我想在此 cls 中实现的目标:

  • 有两个命令,\authorinstructor(在 cls 中定义),每个命令都带有一个参数。
  • 一般情况下,可以分别设置。
  • 然而,如果\author\instructor为空(即\author{}\instructor{}或者\author\instructor未被用户定义,他们应该使用倒退\@author将根据缺少哪一个\@instructor\@instructor被分配。\@author
  • 如果两者都错过了,也许就什么也不做。

这是一个锰氧化物。编译时出现错误。(奇怪的是,使用我的完整 cls,编译正常,但语句\if似乎不正确,结果错误。)

\RequirePackage{filecontents}
\begin{filecontents*}{myclass.cls}
    \NeedsTeXFormat{LaTeX2e}
    \ProvidesClass{myclass}
    \LoadClass{article}
    
    \let\@instructor\@empty
    \newcommand{\instructor}[1]{\gdef\@instructor{#1}}
    
    \newcommand{\test}{\@instructor}
    
    \makeatletter
    \if\@instructor\@empty
        \def\@instructor\@author % author is the instructor (if not specified)
    \else
        \if\@author\@empty
            \def\@author\@instructor % instructor is the author (if not specified)
        \fi
    \fi
    \makeatother
\end{filecontents*}

\documentclass{myclass}
\author{Author Name}
% \instructor{Instructor Name}
\instructor{}

\begin{document}
    \test{}
\end{document}

答案1

谢谢大卫·卡莱尔,我终于解决了这个问题。指出了\ifx和之间的区别\if这里

测试文件需要做一些修改,以便演示功能(这里我使用命令\maketitle作为示例):

\RequirePackage{filecontents}
\begin{filecontents*}{myclass.cls}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{myclass}
\LoadClass{article}

\let\@instructor\@empty
\newcommand{\instructor}[1]{\gdef\@instructor{#1}}

\makeatletter
\renewcommand\maketitle{
    \ifx\@instructor\@empty
        \let\@instructor\@author % author is the instructor (if not specified)
    \else
        \ifx\@author\@empty
            \let\@author\@instructor % instructor is the author (if not specified)
        \fi
    \fi
    \@instructor
}
\makeatother
\end{filecontents*}

\documentclass{myclass}
\author{Author Name}
% \instructor{Instructor Name}
\instructor{}

\begin{document}
    \maketitle
\end{document}

现在一切正常。

相关内容