包的文档选项

包的文档选项

假设我有一个这样的包:

\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{test}[2014/08/21 Example package]

\newcommand{\bla}{}
\DeclareOption{optiona}{
    \renewcommand{\bla}{Choice A}
}

\DeclareOption{optionb}{
    \renewcommand{\bla}{Choice B}
}
\ProcessOptions\relax

我想编写一个文档,在其中显示这两个选项,如下所示:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[optionb]{test}
\begin{document}
This is the output with optiona:
\bla %prints Choice A
This is the output with optionb:
\bla%prints Choice B
\end{document}

我该如何实现?我发现了一些关于 keyval 的信息,但老实说,我不明白它是如何工作的。有什么有用的提示吗?

答案1

简短的回答是,您不能追溯更改已加载包的选项(请参见此处:将选项应用于已加载的包),但如果你仔细设计你的类文件,那么你可能可以在每种情况下为你制作钩子。使用你的例子:

\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{test}[2014/08/21 Example package]

\newcommand{\bla}{}
\newcommand{\abla}{Choice A}
\newcommand{\bbla}{Choice B}
\DeclareOption{optiona}{
    \renewcommand{\bla}{\abla}
}

\DeclareOption{optionb}{
    \renewcommand{\bla}{\bbla}
}
\ProcessOptions\relax

然后在你的文档中,类似

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[optionb]{test}
\begin{document}
This is the output with optiona:
\abla %prints Choice A
This is the output with optionb:
\bbla%prints Choice B
\end{document}

上面的方法没问题,但是如果你使用命令,你会更聪明,\if比如如果指定了,则\if@optiona设置为,然后你可以将其构建到的定义中。然而,最终,它总是归结为同一件事:找到一种从 tex 文件中指定两个不同定义的方法。trueoptiona\bla

相关内容