Ich möchte die Dokumentklasse nach einem Wert auswählen. Zum Beispiel so etwas
\newcommand{\mode}{0}
if (mode is 0)
then \documentclass{...}
else if (mode is 1)
then \documentclass{---}
fi
Gibt es eine Möglichkeit, so etwas zu tun?
Antwort1
Ich habe mein MWE überarbeitet, um einige der Kritikpunkte bezüglich der Schwierigkeiten zu beantworten, die durch die Verwendung einer auswählbaren Dokumentklasse entstehen. Wenn ich im MWE die article
Klasse auswähle, definiere ich auch andere Dinge neu (in diesem Fall \chapter
), um sie mit der alternativen Klasse kompatibel zu machen, die book
in diesem Fall ist.
Mit einem derart erweiterten Ansatz kann man schnell zwischen benutzerdefinierten und Standardklassen wechseln, wenn man sich die Zeit nimmt, eine logische Möglichkeit zum Umgang mit den benutzerdefinierten Makros neu zu definieren.
\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}
Wenn Sie einen aussagekräftigeren Modusnamen mit mehreren Zeichen wünschen, können Sie Folgendes tun:
\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}
Antwort2
Möglich: ja, aber es ist trotzdem meistens notwendig, es manuell zu ändern.
Der Hauptgrund hierfür liegt darin, dass unterschiedliche Klassen unterschiedliche Funktionen bereitstellen und diese teilweise im Widerspruch zueinander stehen, d. h. man muss Bedingungen stellen, um anschließend trotzdem die richtigen Einstellungen auszuwählen.
\newcommand{\mode}{1}
\ifnum\mode=0
\documentclass{article}
\else
\documentclass{book}
\fi
\begin{document}
Foo
\ifnum\mode>0
\chapter{Foo}
\fi
\end{document}
Hier ist ein Weg mit\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}
Aktualisieren-- mitetoolbox
Die Verwendung ist \RequirePackage{...}
auch schon vorher möglich \documentclass
, jedoch nicht \usepackage{...}
– es gibt Fälle, in denen dies wirklich notwendig sein kann, aber im Allgemeinen empfehle ich dieses Verfahren nicht.
\RequirePackage{etoolbox}
\def\mode{artmode}
\ifstrequal{\mode}{artmode}{%
\documentclass{article}
}{%
\documentclass{report}
}
\begin{document}
\tableofcontents
\section{Foo}
\end{document}