Выберите класс документа в соответствии с условием

Выберите класс документа в соответствии с условием

Я хотел бы выбрать documentclass в соответствии со значением. Например, что-то вроде этого

\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}

Связанный контент