我正在创建一个包含草稿和最终版本的文档类。最终版本有一个由 生成的首页\maketitle
,但在草稿模式下是\maketitle
。我决定插入一个测试以确保在最终模式下存在 。最简单的方法似乎是使用。\let
\relax
\maketitle
\AtEndDocument
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{myexam}[2013/03/08 \space (v1.0) \space\space Ian Thompson]
\newif\iffinal %Option for final or draft mode
\finalfalse %Default to draft mode
\DeclareOption{final}{\finaltrue}
\DeclareOption{draft}{\finalfalse}
\ProcessOptions\relax
\LoadClass[12pt]{article}
\iffinal
\typeout{FINAL MODE}
\newif\ifmaketitle
\maketitlefalse
\AtEndDocument{\ifmaketitle\relax\else \ClassError{myexam}{Final version requires maketitle}{}\fi}
\renewcommand\maketitle{THIS IS THE TITLE\newpage\maketitletrue}
\else
\typeout{DRAFT MODE}
\let\maketitle\relax
\fi
然而,尝试排版这个简单的示例文件
\documentclass[draft]{myexam}
\begin{document}
\maketitle
The quick brown fox jumps over the lazy dog.
\end{document}
导致错误
!Class myexam 错误:最终版本需要 maketitle
尽管示例使用的是草稿模式。在我插入之前,一切正常\AtEndDocument
。这是怎么回事?
答案1
你需要:
\newif\ifmaketitle
\iffinal
您需要始终声明新的 if,否则\iffinal
块的扫描将出错,因为\ifmaketitle
不是 if 而是else
and \fi
(因此终止\iffinal
。