msc
我正在为我的系论文/学位论文编写一个包含两个选项的LaTeX 2e 类phd
。在这个类中,我需要为论文/学位论文的第一页定义一个标题页,其中包含大学名称、系名称、标题、作者姓名等。代码如下:
\documentclass[phd]{book}
\makeatletter
\newif\if@phdthesis
\@phdthesisfalse
\DeclareOption{phd}{\@phdthesistrue}
\newif\if@mscthesis
\@mscthesisfalse
\DeclareOption{msc}{\@mscthesistrue}
\def\author#1{\gdef\@author{#1}}
\if@mscthesis
\def\mytitle{\begin{titlepage}
\begin{center}
A thesis for the degree of master of science by\\
\@author
\end{center}
\end{titlepage}
}
\fi
\if@phdthesis
\def\mytitle{\begin{titlepage}
\begin{center}
A Dissertation for the Degree of Doctor of Philosophy by\\
\@author
\end{center}
\end{titlepage}
}
\fi
\makeatother
\begin{document}
\author{Vahid}
\mytitle
\chapter{Chapter Name}
bla bla bla
\newpage
bla bla bla
\end{document}
但是我收到一个错误:Undefined control sequence.l.32 \mytitle
。我想知道是否有人能帮助我解决这个问题。
答案1
您之所以会得到此错误,是因为您定义了两个版本的\mytitle
内部条件。在您的示例中,它们都是 false,因此宏永远不会被定义。
你错过了一个\ProcessOptions
实际处理给定[phd]
选项的前's的第一次使用if
:
%...
\DeclareOption{msc}{\@mscthesistrue}
\ProcessOptions
\def\author#1{\gdef\@author{#1}}
%...
我假设这里的代码在类文件中。clsguide
有关如何定义选项的更多信息,请参阅。
答案2
请按如下方式使用,默认使用 msc:
\documentclass[phd]{book}
\makeatletter
\newif\if@phdthesis
\DeclareOption{phd}{\@phdthesistrue}
\ProcessOptions
\def\mytitle{\begin{titlepage}
\begin{center}
\if@phdthesis
A Dissertation for the Degree of Doctor of Philosophy by\par
\else
A thesis for the degree of master of science by\par
\fi
\@author
\end{center}
\end{titlepage}}
\makeatother
\begin{document}
\author{Vahid}
\mytitle
\chapter{Chapter Name}
bla bla bla
\newpage
bla bla bla
\end{document}