DeclareOption 条件似乎不起作用

DeclareOption 条件似乎不起作用

我似乎无法弄清楚为什么这不起作用。我想为这个包设置一个选项,以允许预印版本(没有标记页面范围)和包含页面范围的最终版本。\@firstpage\@lastpage命令在其他地方定义。

根据我对 TeX 条件的理解,我定义了一个新的选择,\@final默认情况下将其定义为 true。当用户调用它时,\documentstyle[preprint]{package}它应该设置\@final为 false,然后稍后定义\thepagerange为一些文本。如果未使用预印选项或将其设置为 final,则\@final应该为 true(默认值),并且\thepagerange应该按所示定义。

问题是这似乎不起作用。无论我传递的是 preprint 还是 final,编译器都会抛出错误:

./package.cls:388: Undefined control sequence.
l.388 \if@finaltrue

./package.cls:393: Extra \fi.
l.393 \fi

./package.cls:394: Undefined control sequence.
l.394 \if@finalfalse

./package.cls:396: Extra \fi.
l.396 \fi

这里有麻烦的 MWE:

\newif\if@final
\@finaltrue

\DeclareOption{final}{\@finaltrue}
\DeclareOption{preprint}{\@finalfalse}

\ProcessOptions

\if@finaltrue
\def\thepagerange{%                                   
   \ifnum\@lastpage =0 {\ \bf ???} \else
   \ifnum\@lastpage = \@firstpage \ \thefirstpage\else
   \thefirstpage--\thelastpage \fi\fi}
\fi
\if@finalfalse
\def\thepagerange{xx--xx}
\fi

答案1

当您使用 定义条件时, \newif\if@final条件本身很简单。您可以使用或\if@final来设置条件。\@finaltrue\@finalfalse

如果您想使用条件,那么语法是:

\if@final
   <true part code>
\else
   <false part code>
\fi

您正在尝试使用\if@finaltrue(及更高版本\if@finalfalse),并且由于这些宏不存在,您可以预见地收到“未定义的控制序列”错误(如您的错误所示。)

您也不应该使用\bf,这是一个已弃用的命令。请\bfseries改用 。

相关内容