我似乎无法弄清楚为什么这不起作用。我想为这个包设置一个选项,以允许预印版本(没有标记页面范围)和包含页面范围的最终版本。\@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
改用 。