A TeX/LaTeX validator.
texvcjs
takes user input and validates it while replacing
MediaWiki-specific functions. It is a JavaScript port of texvc,
which was originally written in OCaml for the Math extension.
The texvcjs
library was originally written to be used by the
mw-ocg-latexer PDF-generation backend of the mediawiki
Collection extension.
Node version 4, 5, 6, 7, and 8 are tested to work.
Install the node package dependencies with:
npm install
Ensure everything works:
npm test
To test your installation:
bin/texvcjs '\sin(x)+{}{}\cos(x)^2 newcommand'
which should emit:
+\sin(x)+{}{}\cos(x)^{2}newcommand
Your programs can also use the JavaScript API exported by the
texvcjs
node module:
var texvcjs = require('texvcjs');
var result = texvcjs.check('\\sin(x)+{}{}\\cos(x)^2 newcommand');
console.log(result.status);
console.log(result.output || ''); // cleaned/validated output
If the output
field is not undefined
, then validation was successful.
The status
field is a single character:
+
: Success! The result is in theoutput
field.F
: A TeX function was not recognized. The function name is in thedetails
field.S
: A parsing error occurred.-
: Some other problem occurred.
For status types F
, S
, and -
, the position of the error may be found
in the line
, column
and offset
fields of the result. More information
about the problem can be found in the details
field of the result, which
is a string.
The fields ams_required
, cancel_required
, color_required
,
euro_required
, and teubner_required
are set to true
iff the input
string requires the use of the corresponding LaTeX packages.
The ams_required
field requires the use of the amsmath
and amssymb
packages.
The low level parser, abstract syntax tree (AST), and renderer are also
exported from the module. This allows you to define more interesting
queries on the input source. An example can be found in lib/astutil.js
which defines a visitor function to test for the presence of specific
TeX functions in the input.
To use the \ce
tags from the mhchem package the parser needs to be called
with the mhchem option. During the parsing if a \ce
tag is encountered
its contens is treated according to the mhchem grammar. The parsing in
general and the building up of the AST is done in a similar fashion to the
math mode but preserves the whitespaces when needed.
As the design of the parser does not allow the usage of the dollar sign in
the math mode the tags \begin{math}
and \end{math}
were introduced to
provide the ability to switch to math mode within a chemical formula. The
undocumented \color
tag of mhchem is only supported for named colors.
The full documentation of the mhchem package can be found on the
mhchem website.
This example would be typeset wrongly without the extended parser as some charges would be typeset as bonds and some addition signs would end up as charges. Running:
bin/texvcjs --usemhchem \ce{2Na + 2H2O -> 2Na+ + 2OH- + H-H}
emits:
+{\ce {2Na + 2H2O -> 2Na+ + 2OH- + H-H}}
More examples can be found on the mhchem website.
Copyright (c) 2014 C. Scott Ananian
Licensed under GPLv2.