假设我有一个这样的包:
\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 文件中指定两个不同定义的方法。true
optiona
\bla