我想编写我自己的包作为我经常使用的其他包的集合。
我的包中的一些声明仅适用于书籍,一些适用于文章,其余的适用于两者。
在 (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
}