根据条件选择文档类别

根据条件选择文档类别

我想根据值选择文档类。例如,像这样

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

相关内容