我对高级 LaTeX 编码还很陌生,因此可能没有一个非常具体的问题。无论如何,我希望你能帮助我:我想同时维护不同的序言。它们可以看作是不同风格的模板。所以我想创建一个带有选项的包(?),执行给定的模板。我的想法是使用例如来调用这个包\RequirePackage{templates}[Wissenschaft]
。我尝试了以下代码来执行包模板:
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{templates}[28.05.2021 templates.sty]
\RequirePackage{ifthen}
\newboolean{Wissenschaftbool}
\DeclareOption{Wissenschaft}{ \setboolean{Wissenschaftbool}{true}}
\newboolean{template1bool}
\DeclareOption{template1}{ \setboolean{template1bool}{true}}
\ExecuteOptions{Wissenschaft}
\ExecuteOptions{template1}
\ProcessOptions\relax
\ifthenelse{\boolean{Wissenschaftbool}}{%
\RequirePackage{core/Wissenschaft}
}{}
\ifthenelse{\boolean{template1bool}}{%
\RequirePackage{core/template1}
}{}
\endinput
我的问题是,两个选项总是执行。如果我注释一个选项,代码只会执行一个选项,这正是我想要的。有人能帮我修复代码,以便只执行给定的选项吗?
答案1
你好像想要\ProcessOptions
。
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{templates}[2021/05/28 templates]
\newif\iftemplates@Wissenschaft
\newif\iftemplates@templateone
\DeclareOption{Wissenschaft}{\templates@Wissenschafttrue}
\DeclareOption{template1}{\templates@templateonetrue}
\ProcessOptions\relax
\iftemplates@Wissenschaft
\RequirePackage{templates-Wissenschaft}
\fi
\iftemplates@templateone
\RequirePackage{templates-template1}
\fi
\endinput
用户将调用
\usepackage[Wissenschaft]{templates}
加载Wissenschaft
选项。
如果包的结构中有core
子目录,则不需要在\RequirePackage
调用时指定它,因为 TeX 系统通常会进行递归搜索。但没有必要使用这样的结构。最好使用特定的名称,如上面的代码所示。
顺便说一下,发布日期应以表格形式指定
YYYY/MM/DD
或者
YYYY-MM-DD
否则 LaTeX 将无法提取它。