setoptions
The setoptions extension implements a non-standard \setOptions
macro that allows you to change the options for a TeX package, or for
the TeX input jax itself, from within a TeX expression.
- \setOptions[package]{options}
Sets the options for package to the ones given in options. Here, options is a collection of space-separated option names (to be set to
true
) or option=value declarations, where the given option will get the specified value. If the value contains spaces, it can be enclosed in braces, which will not become part of the value.
For example:
\[
\setOptions{tagSide=left}
E = mc^2 \tag{1}
\]
\[
\setOptions{tagSide=right}
e^{\pi 1} + 1 = 0 \tag{2}
\]
would typeset the first expression with its tag on the left, and the second (and subsequent) expressions with tags on the right.
To change a package setting, use the package name as an optional bracket argument:
\[
\setOptions[physics]{arrowdel=true}
\grad
\setOptions[physics]{arrowdel=false}
\]
Here the gradient symbol with have an arrow, but subsequent ones will not.
Note that any changes made by \setOptions
are global, so will
affect all the following expressions. If you want a local change,
you will need to set the value back to its original one explicitly.
Because changing the option settings can cause adverse consequences,
and so could be misused in a setting where users are provided the TeX
content for your site, the setoptions package is not autoloaded,
it does not appear in the list of all packages, and it can not be
loaded with \require{}
. You must include it in the package list
explicitly if you want to allow its use.
To load the setoptions extension, add '[tex]/setoptions'
to the
load
array of the loader
block of your MathJax configuration, and add
'setoptions'
to the packages
array of the tex
block.
window.MathJax = {
loader: {load: ['[tex]/centernot']},
tex: {packages: {'[+]': ['centernot']}}
};
The require command with setoptions
If the require package is enabled, setoptions modifies
\require
to allow passing of options for the required package (and
makes the original \require
macro available as \Require
). So
the new syntax is:
- \require[options]{package}
where options is a list of options in the same format as used by
\setOptions
, and package
is the name of the extension to load.
This command is equivalent to:
\Require{package}\setOptions[package]{options}
meaning that the package is loaded and then its options are set.
For example:
\require[harrowsize=3em]{amscd}
would load the amscd extension and then set its harrowsize
option to 3em
.
Note that the same rules apply to which options can be set for which
package as those that govern \setOptions
itself.
setoptions Options
Adding the setoptions extension to the packages
array defines a
setoptions
sub-block of the tex
configuration block with the
following values:
MathJax = {
tex: {
setoptions: {
filterPackage: SetOptionsUtil.filterPackage, // filter for whether a package can be configured
filterOption: SetOptionsUtil.filterOption, // filter for whether an option can be set
filterValue: SetOptionsUtil.filterValue, // filter for the value to assign to an option
allowPackageDefault: true, // default for allowing packages when not explicitly set in allowOptions
allowOptionsDefault: true, // default for allowing option that isn't explicitly set in allowOptions
allowOptions: { // list of packages to allow/disallow, and their options to allow/disallow
//
// top-level tex items can be set, but not these ones
// (that leaves digits and the tagging options that can be set)
//
tex: {
FindTeX: false,
formatError: false,
package: false,
baseURL: false,
tags: false, // would require a new TeX input jax instance
maxBuffer: false,
maxMaxros: false,
macros: false,
environments: false
},
//
// These packages can't be configured at all
//
setoptions: false,
autoload: false,
require: false,
configmacros: false,
tagformat: false
}
}
}
};
- filterPackage: SetOptionsUtil.filterPackage
This is a function that is called to determine if a package can have its options set or not. It is passed the TeX parser and the name of the extension as its arguments, and returns true if the package allows its options to be configured and false otherwise. The default is to first check that the named package exists, then check if the package is explicitly allowed by its entry in the
allowOptions
property being eithertrue
or a list of theallowOptions
property. The entry can either betrue
, allowing all options of the package to be set, or a list of the options that are allowed to be set. If the entry is explicitlyfalse
or theallowPackageDefault
option isfalse
, an error is issued. You can supply your own function to process the package names in another way if you wish.
- filterOption: SetOptionsUtil.filterOption
This is a function that is called to determine whether an option can be set for a given package. It is passed the TeX parser, the package name, and the option name as its arguments, and returns true if that option can be set for that package, and false otherwise. The default is to check if the option is listed explicitly in the list of options for the given package in the
allowOptions
. If the value is explicitly false, or if it is not listed and theallowOptionDefault
is false, then produce an error. Otherwise check that the option actually exists for the package, and report an error if not, otherwise allow the option to be set. You can supply your own function to process the option names in another way if you wish.
- filterValue: SetOptionsUtil.filterValue
This is a function that is called to check the value provided for a given option is allowed. It is passed the TeX parser, the package name, the option name, and the new option value as its arguments, and it returns the value to be used for the option. The default is simply to return the value it is given, but you can use this to alter the value, or to produce an error if the value is not valid.
- allowPackageDefault: true
This indicates how to handle packages that are not listed explicitly in the
allowOptions
list. Iftrue
, packages that are not listed are allowed to have their options set. If the value isfalse
, only the packages that are listed astrue
or have explicit option lists can have their options set.
- allowOptionsDefault: true
This indicates how to handle options that are not listed explicitly in the
allowOptions
list for a given package. Iftrue
, options that are not listed are allowed to be set, and iffalse
, only the options that are listed explicitly astrue
for the given package can have their options set.
- allowOptions: {...}
This is a list of the packages that indicates whether their options can be set or not, and which options can be set. If a package name appears and is explicitly set to
false
, that package’s options can’t be set. If it istrue
andallowOptionsDefault
is true, then any of its options can be set. If it is an explicit list of options, then if the option is listed astrue
, it can be set, and iffalse
it can not. If an option is not listed, then the value ofallowOptionsDefault
is used to determine whether it can be set or not. If a package does not appear explicitly in the list, then the value ofallowPackageDefault
is used to determine if the package’s options can be set or not.You can include additional package names and their options in this list. The defaults are set to allow reasonable security without having to list every single option that can be set.
setoptions Commands
The setoptions extension implements the following macros:
\setOptions