Escolha documentclass de acordo com a condição

Escolha documentclass de acordo com a condição

Gostaria de escolher a documentclass de acordo com um valor. Por exemplo, algo assim

\newcommand{\mode}{0}

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

Existe uma maneira de fazer isso?

Responder1

Revisei meu MWE para responder algumas das críticas sobre as dificuldades encontradas ao ter uma classe de documento selecionável. No MWE, se eu escolher a articleturma, também redefino outras coisas (neste caso \chapter) para torná-la compatível com a turma alternativa, que é bookneste caso.

Com essa abordagem estendida, é possível alternar rapidamente entre classes personalizadas e padrão, se dedicarmos algum tempo para redefinir uma maneira lógica de lidar com as macros personalizadas.

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

Se alguém quiser um nome de modo com vários caracteres mais descritivo, poderá fazer o seguinte:

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

Responder2

Possível: sim, mas na maioria das vezes é necessário trocá-lo manualmente.

O principal culpado é que diferentes classes fornecem recursos diferentes e alguns deles são contraditórios entre si, ou seja, é necessário fazer condicionais para escolher as configurações corretas posteriormente de qualquer maneira.

\newcommand{\mode}{1}

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


\begin{document}


Foo

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

Aqui está uma maneira com\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}

Atualizar-- cometoolbox

É possível usar \RequirePackage{...}antes mesmo, \documentclassmas não \usepackage{...}- há casos em que isso pode ser realmente necessário, mas em geral não recomendo esse procedimento.

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

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


\begin{document}

\tableofcontents

\section{Foo}
\end{document}

informação relacionada