条件に応じてドキュメントクラスを選択する

条件に応じてドキュメントクラスを選択する

値に応じてドキュメントクラスを選択したい。例えば、次のようなもの

\newcommand{\mode}{0}

if (mode is 0)
then \documentclass{...}
else if (mode is 1)
then \documentclass{---}
fi

そのようなことをする方法はありますか?

答え1

選択可能なドキュメント クラスを持つことで生じる困難さに関する批判に答えるために、私は MWE を改訂しました。MWE では、クラスを選択した場合article、他のもの (この場合は ) も再定義して、この場合は\chapterという代替クラスと互換性を持たせます。book

このような拡張されたアプローチを使用すると、カスタム マクロを処理する論理的な方法を再定義する時間を取れば、カスタム クラスと標準クラスをすばやく切り替えることができます。

\def\mode{1}
\if 0\mode
  \documentclass{article}
  \let\chapter\section
\else
  \documentclass{book}
\fi
\usepackage{lipsum}
\begin{document}
\chapter{This is my chapter}
\lipsum[1-10]
\end{document}

より説明的な複数文字のモード名が必要な場合は、次のようにします。

\def\mode{ArticleMode}
\def\ArticleMode{%
  \documentclass{article}
  \let\chapter\section
}
\def\BookMode{%
  \documentclass{book}
}
\csname\mode\endcsname
\usepackage{lipsum}
\begin{document}
\chapter{This is my chapter}
\lipsum[1-10]
\end{document}

答え2

可能: はい。ただし、ほとんどの場合、手動で変更する必要があります。

主な原因は、異なるクラスが異なる機能を提供しており、それらのいくつかは互いに矛盾しているため、いずれにしても後で正しい設定を選択するために条件を設定する必要があることです。

\newcommand{\mode}{1}

\ifnum\mode=0
\documentclass{article}
\else
\documentclass{book}
\fi


\begin{document}


Foo

\ifnum\mode>0
\chapter{Foo}
\fi
\end{document}

ここに方法があります\ifcase

\newcommand{\mode}{3}

\ifcase\mode
\documentclass{article}
\or \documentclass{report} % 1
\else
\documentclass{book} % Default 
\fi


\begin{document}

\tableofcontents

\ifnum\mode>0
\chapter{Foo}
\else
\section{Foo}
\fi
\end{document}

アップデート- とetoolbox

\RequirePackage{...}以前でも使用可能です\documentclass\usepackage{...}、これが本当に必要な場合もありますが、一般的にはこの手順はお勧めしません。

\RequirePackage{etoolbox}
\def\mode{artmode}

\ifstrequal{\mode}{artmode}{%
  \documentclass{article}
}{%
  \documentclass{report}
}


\begin{document}

\tableofcontents

\section{Foo}
\end{document}

関連情報