조건에 따라 문서 클래스 선택

조건에 따라 문서 클래스 선택

값에 따라 문서 클래스를 선택하고 싶습니다. 예를 들어, 이런 것

\newcommand{\mode}{0}

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

그런 일을 할 수 있는 방법이 있나요?

답변1

나는 선택 가능한 문서 클래스를 사용함으로써 직면하는 어려움에 대한 일부 비판에 답하기 위해 MWE를 수정했습니다. MWE에서 클래스를 선택하면 대체 클래스(이 경우)와 호환되도록 article다른 항목(이 경우 )도 재정의합니다 .\chapterbook

이러한 확장된 접근 방식을 사용하면 사용자 정의 매크로를 처리하는 논리적 방법을 재정의하는 데 시간이 걸리면 사용자 정의 클래스와 표준 클래스 사이를 신속하게 전환할 수 있습니다.

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

관련 정보