在编写用户定义包时,如何判断使用它的 \documentclass 是书籍还是文章?

在编写用户定义包时,如何判断使用它的 \documentclass 是书籍还是文章?

我想编写我自己的包作为我经常使用的其他包的集合。

我的包中的一些声明仅适用于书籍,一些适用于文章,其余的适用于两者。

在 (La)TeX 中,我们如何进行条件声明?

\ProvidesPackage{MyPackage}

\newcommand\ContentsDir{Contents/}

\newcommand\ChapterDir{\ContentsDir}

%==============================================
%== It will be defined for book document class
%==============================================
\newcommand\IncludeChapter[1]{%
\renewcommand\ChapterDir{\ContentsDir#1/}%
\include{\ContentsDir#1}%
}

\newcommand\IncludeOnlyChapter[1]{%
\includeonly{\ContentsDir#1}%
}

\newcommand\Chapter[1]%
{%
\chapter{#1}%
%\addcontentsline{toc}{chapter}{#1}%
}%
%==============================================



%==============================================
%== Common commands
%==============================================
\newcommand\SectionDir{\ChapterDir}

\newcommand\InputSection[1]{%
\renewcommand\SectionDir{\ChapterDir#1/}
\input{\ChapterDir#1}%
}
%----------------------------------------------
\newcommand\SubSectionDir{\SectionDir}

\newcommand\InputSubSection[1]{%
\renewcommand\SubSectionDir{\SectionDir#1/}
\input{\SectionDir#1}%
}
%----------------------------------------------
\newcommand\InputSubSubSection[1]{%
\input{\SubSectionDir#1}%
}
%----------------------------------------------
\newcommand\Section[1]%
{%
\section{#1}%
%\addcontentsline{toc}{section}{#1}%
}%
%----------------------------------------------
\newcommand\SubSection[1]%
{%
\subsection{#1}%
%\addcontentsline{toc}{chapter}{#1}%
}%
%----------------------------------------------
\newcommand\SubSubSection[1]%
{%
\subsubsection{#1}%
%\addcontentsline{toc}{chapter}{#1}%
}%
%----------------------------------------------

答案1

要回答你标题中的问题,

\@ifclassloaded{article}{%
  % code for article
}{%
  \@ifclassloaded{book}{%
    % code for book
  }{%
    % else clause
  }%
}

有关条件的更多常规信息,请参阅这个问题。有关编写自己的包的更多信息,请参阅标准文档文件clsguide

更新:Ulrich 提出了一个很好的建议;对于你的具体情况,可能只需要写

\@ifundefined{chapter}{%
  % code for article
}{%
  % code for book
}

相关内容