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