\AtEndDocument 的奇怪行为

\AtEndDocument 的奇怪行为

我正在创建一个包含草稿和最终版本的文档类。最终版本有一个由 生成的首页\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 而是elseand \fi(因此终止\iffinal

相关内容