tagFormat
The tagFormat extension provides the ability to customize the format
of the equation tags and automatic equation numbers. You do this by
providing functions in the tagFormat
object of the tex
block
of your MathJax configuration. The functions you can provide are
listed in the TagFormat Options section.
For example,
MathJax = {
section: 1,
tex: {
tagFormat: {
number: (n) => MathJax.config.section + '.' + n,
id: (tag) => 'eqn-id-' + tag
}
},
startup: {
ready() {
MathJax.startup.defaultReady();
MathJax.startup.input[0].preFilters.add(({math}) => {
if (math.inputData.recompile) {
MathJax.config.section = math.inputData.recompile.section;
}
});
MathJax.startup.input[0].postFilters.add(({math}) => {
if (math.inputData.recompile) {
math.inputData.recompile.section = MathJax.config.section;
}
});
}
}
};
arranges for automatic equation numbers to be of the form 1.n
, and
uses ids of the form eqn-id-1.n
as the id
attribute of the
tags within the web page. It also sets up pre- and -post-filters for
the TeX input jax that arrange for the section number to be properly
handled for automatically numbered equations that contain forward
references to later expressions. This example uses the modern
function notation (using =>
), but you could also use
function (n) {return ...}
.
You can adjust the section numnber using JavaScript by setting the
MathJax.config.section
variable. It is also possible to create
TeX macros for controlling the section number. Here is one possibility:
MathJax = {
startup: {
ready() {
const Configuration = MathJax._.input.tex.Configuration.Configuration;
const CommandMap = MathJax._.input.tex.SymbolMap.CommandMap;
new CommandMap('sections', {
nextSection: 'NextSection',
setSection: 'SetSection',
}, {
NextSection(parser, name) {
MathJax.config.section++;
parser.tags.counter = parser.tags.allCounter = 0;
},
SetSection(parser, name) {
const n = parser.GetArgument(name);
MathJax.config.section = parseInt(n);
}
});
Configuration.create(
'sections', {handler: {macro: ['sections']}}
);
MathJax.startup.defaultReady();
}
}
};
(Of course, you will want to merge this configuraiton in with the rest of your configuration options.)
This makes two new macros available: \nextSection
, which
increments the section counter, and \setSection{n}
, which sets the
section number to n
. These must be issues within math delimiters
in order for MathJax to process them. In order to prevent them from
producing any output in your page, you could enclose them within a
hidden element. For example,
<span style="display: hidden">\(\nextSection\)</span>
or something similar.
To load the tagFormat extension, add '[tex]/tagFormat'
to the
load
array of the loader
block of your MathJax configuration,
and add 'tagFormat'
to the packages
array of the tex
block.
window.MathJax = {
loader: {load: ['[tex]/tagFormat']},
tex: {packages: {'[+]': ['tagFormat']}}
};