以 key=boolean 值的方式将参数传递给类

以 key=boolean 值的方式将参数传递给类

假设我有一堆想要传递给我的班级的标志,我该怎么做呢?如果您看到下面的示例,我正在寻找以以下形式传递的标志:

key=<boolean value from flag>

到文档类。

如果我在下面的代码上运行 pdflatex,然后grep TEST test.log我只会得到:

测试:MyClass

现在我知道我可以通过以下方式解决这个问题:\iftodos \wlog{TEST: TODO visible} \fi因为这个 \iftodos 在文档类中也是可见的,但我只是好奇如何巧妙地解决这个问题。

例如:

平均能量损失

\newif\iftodos
\newif\ifshowfigures

%Set the flags (usually I do this by input a flags.tex)
\todostrue
\showfigurestrue

\documentclass[classtodo=\@todos,classshowfigures=\@showfigures]{myclass}

\begin{document}
dummy
\end{document}

我的班级

\ProvidesClass{myclass}

\newif\if@classtodos
\@classtodosfalse
\newif\if@classshowfigures
\@classshowfiguresfalse

\DeclareOption{classtodos}{\@classtodostrue}
\DeclareOption{classshowfigures}{\@classshowfigurestrue}
\ProcessOptions\relax

\LoadClass{book}

\wlog{TEST: MyClass}

\if@classtodos
   \wlog{TEST: TODO visible}
else
   \wlog{TEST: TODO not visible}
\fi

答案1

<key>=<value>语法需要额外的支持:默认情况下不解析它。因此<key>=<value>LaTeX 只会将其读取为选项的名称。要将其读取为<key>=<value>设置<key><value>,您必须进行设置。有各种软件包可以以不同的方式执行此操作。

然而,在这种情况下,您不需要这样做,因为您只关心选项是否设置,即您只执行布尔测试,并且无需任何额外的设备即可完成。

\begin{filecontents}{myclass.cls}
\ProvidesClass{myclass}

\newif\if@todos
\@todosfalse
\newif\if@showfigures
\@showfiguresfalse

\DeclareOption{todos}{\@todostrue}
\DeclareOption{showfigures}{\@showfigurestrue}

\DeclareOption*{\PassOptionsToClass{\CurrentOption}{book}}
\ExecuteOptions{}
\ProcessOptions*

\LoadClass{book}

\wlog{TEST: MyClass}

\if@todos
   \wlog{TEST: TODO visible}
\else
   \wlog{TEST: TODO not visible}
\fi
\end{filecontents}
\documentclass[todos,showfigures]{myclass}

\begin{document}
dummy
\end{document}

将以下内容写入日志文件:

TEST: MyClass
TEST: TODO visible

相关内容