由于我没有写作经验,
cls
所以这可能是一个非常简单的问题,而且是重复的,但我无法用确切的词来表达它。
以下是我想在此 cls 中实现的目标:
- 有两个命令,
\author
和instructor
(在 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}
现在一切正常。