定义标题页时出现问题

定义标题页时出现问题

msc我正在为我的系论文/学位论文编写一个包含两个选项的LaTeX 2e 类phd。在这个类中,我需要为论文/学位论文的第一页定义一个标题页,其中包含大学名称、系名称、标题、作者姓名等。代码如下:

\documentclass[‎phd‎]{‎book‎}‎
‎\makeatletter‎‎
‎‎\newif\if@‎phdthesis‎
‎\@‎phdthesis‎‎false‎
‎\DeclareOption{phd}{\@‎phdthesis‎‎true}‎
‎\newif\if@‎msc‎thesis‎‎
‎\@‎mscthesis‎‎false‎
‎\DeclareOption{‎msc‎}{\@‎mscthesis‎‎true}‎‎
‎‎‎
‎\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‎‎‎\my‎title{‎‎‎‎\begin{titlepage}‎‎‎
‎   \begin{center}‎
    A ‎Dissertation‎ for the ‎Degree‎‎ of Doctor of ‎Philosophy ‎by\\‎
    \@author‎
‎   \end{center}‎‎‎‎
    ‎\end‎{titlepage}‎‎
‎‎‎‎}‎‎
‎\fi‎
‎\makeato‎ther‎
\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‎}{\@‎mscthesis‎‎true}‎‎
\ProcessOptions   

‎\def\author‎#1{\gdef\@‎author‎{#1}}‎‎‎‎
%...

我假设这里的代码在类文件中。clsguide有关如何定义选项的更多信息,请参阅。

答案2

请按如下方式使用,默认使用 msc:

\documentclass[‎phd]{book}
\makeatletter

\newif\if@phdthesis
‎\DeclareOption{‎phd‎}{\@‎phdthesis‎‎true}‎‎
\ProcessOptions
‎‎‎
‎\def‎‎‎\my‎title{‎‎‎‎\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}‎‎}‎‎
‎\makeato‎ther‎
\begin{document}
\author{‎Vahid‎}‎‎‎
‎‎\mytitle‎
‎‎\chapter{Chapter Name}‎
‎bla ‎bla ‎bla‎
‎\newpage‎
‎bla ‎bla ‎bla‎‎
‎\end{document}

相关内容