mathlive
Version:
A web component for math input
237 lines (235 loc) โข 10.6 kB
TypeScript
/* 0.101.1 */
export type MathstyleName = 'displaystyle' | 'textstyle' | 'scriptstyle' | 'scriptscriptstyle';
/** @internal */
export type ArgumentType = ParseMode | ('bbox' | 'colspec' | 'delim' | 'value' | 'rest' | 'string' | 'balanced-string' | 'expression' | 'auto');
/** @internal */
export type Token = string;
/**
* The mode that indicates how a portion of content is interpreted
*
*/
/** @internal */
export type ParseMode = 'math' | 'text' | 'latex';
/**
* Error codes returned by the `mf.errors` property.
*
*
*
| | |
| ------------------ | --- |
| `unknown-command` | There is no definition available for this LaTeX command, e.g. `\zin` |
| `unknown-environment` | There is no definition available for this environment, e.g. `\begin{foo}` |
| `invalid-command` | This command is not valid in the current context (e.g. text command in math mode) |
| `unbalanced-braces` | There are too many or too few `{` or `}` |
| `unbalanced-environment` | An environment was open but never closed (`\begin{array}`) or the `\end` command does not match the `\begin` command (`\begin{array*}\end{array}`) |
| `unbalanced-mode-shift` | A `$`, `$$`, `\(` or `\[` was not balanced |
| `missing-argument` | A required argument is missing, e.g. `\frac{2}` |
| `too-many-infix-commands` | A group can include only one infix command (i.e. `\choose`, `\atop`). In general it's best to avoid infix commands. |
| `unexpected-command-in-string`| A command expected a string argument, but there was a command instead |
| `missing-unit` | An argument requiring a dimension was missing an unit. |
| `unexpected-delimiter` | An invalid symbol or command was used as a delimiter. |
| `unexpected-token` | An unexpected character was encountered. |
| `unexpected-end-of-string` | The end of the string was reached, but some required arguments were missing. |
| `improper-alphabetic-constant` | The alphabetic constant prefix `` ` `` was not followed by a letter or single character command. |
*/
export type ParserErrorCode = 'unknown-command' | 'invalid-command' | 'unbalanced-braces' | 'unknown-environment' | 'unbalanced-environment' | 'unbalanced-mode-shift' | 'missing-argument' | 'too-many-infix-commands' | 'unexpected-command-in-string' | 'missing-unit' | 'unexpected-delimiter' | 'unexpected-token' | 'unexpected-end-of-string' | 'improper-alphabetic-constant';
export type LatexSyntaxError<T = ParserErrorCode> = {
code: T;
arg?: string;
latex?: string;
before?: string;
after?: string;
};
/**
* Variants indicate a stylistic alternate for some characters.
*
* Typically, those are controlled with explicit commands, such as
* `\mathbb{}` or `\mathfrak{}`. This type is used with the
* {@linkcode MathfieldElement.applyStyle} method to change the styling of a range of
* selected characters.
*
* In mathematical notation these variants are used not only for visual
* presentation, but they may have semantic significance.
*
* For example,
* - the set โ should not be confused with
* - the physical unit ๐ข (Coulomb).
*
* When rendered, these variants can map to some built-in fonts.
*
* LaTeX supports a limited set of characters. However, MathLive will
* map characters not supported by LaTeX fonts (double-stuck variant for digits
* for example) to a Unicode character (see [Mathematical Alphanumeric Symbols on Wikipedia](https://en.wikipedia.org/wiki/Mathematical_Alphanumeric_Symbols) ).
*
* `normal` is a synthetic variant that maps either to `main` (upright) or
* `math` (italic) depending on the symbol and the `letterShapeStyle`.
*
* The `math` variant has italic characters as well as slightly different
* letter shape and spacing (a bit more space after the "f" for example), so
* it's not equivalent to a `main` variant with `italic` variant style applied.
*
* **See Also**
* * {@linkcode Style}
*/
export type Variant = 'ams' | 'double-struck' | 'calligraphic' | 'script' | 'fraktur' | 'sans-serif' | 'monospace' | 'normal' | 'main' | 'math';
/**
* Some variants support stylistic variations.
*
* Note that these stylistic variations support a limited set of characters,
* typically just uppercase and lowercase letters, and digits 0-9 in some cases.
*
| variant | `up` | `bold` | `italic` | `bolditalic` |
| ------------------ | --- | --- | --- | --- |
| `normal` | ABCabc012 | ๐๐๐๐๐๐๐๐๐ | ๐ด๐ต๐ถ๐๐๐ |๐จ๐ฉ๐ช๐๐๐ |
| `double-struck` | ๐ธ๐นโ๐๐๐๐๐๐ | n/a | n/a | n/a |
| `calligraphic` | ๐โฌ๐๐ถ๐ท๐ธ | ๐๐๐๐ช๐ซ๐ฌ | n/a | n/a |
| `fraktur` | ๐๐
โญ๐๐๐ | ๐ฌ๐ญ๐ฎ๐๐๐ | n/a | n/a |
| `sans-serif`| ๐ ๐ก๐ข๐บ๐ป๐ผ๐ข๐ฃ๐ค | ๐๐๐๐ฎ๐ฏ๐ฐ๐ฌ๐ญ๐ฎ | ๐๐๐๐ข๐ฃ๐ค | ๐ผ๐ฝ๐พ๐๐๐ |
| `monospace` | ๐ฐ๐ฑ๐ฒ๐๐๐ | n/a | n/a | n/a |
*/
export type VariantStyle = 'up' | 'bold' | 'italic' | 'bolditalic' | '';
export type FontShape = 'auto' | 'n' | 'it' | 'sl' | 'sc' | '';
export type FontSeries = 'auto' | 'm' | 'b' | 'l' | '';
export type FontFamily = 'none' | 'roman' | 'monospace' | 'sans-serif';
export type FontSize = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10;
/**
* Use a `Style` object literal to modify the visual appearance of a
* mathfield or a portion of a mathfield.
*
* You can control the color ("ink") and background color ("paper"),
* the font variant, weight (`FontSeries`), size and more.
*
* **See Also**
* * `applyStyle()`
* * [Interacting with a Mathfield](mathfield/guides/interacting/)
*/
export interface Style {
color?: string;
backgroundColor?: string;
fontSize?: FontSize | 'auto';
variant?: Variant;
variantStyle?: VariantStyle;
fontFamily?: FontFamily;
fontShape?: FontShape;
fontSeries?: FontSeries;
}
/**
* **See Also**
* * {@linkcode MacroDictionary}
* * {@link mathfield/guides/macros/|Macros Guide}
*
* @category Macros
*/
export type MacroDefinition = {
/** Definition of the macro as a LaTeX expression */
def: string;
args?: number;
captureSelection?: boolean;
expand?: boolean;
};
/** @category Macros */
export type NormalizedMacroDictionary = Record<string, MacroDefinition>;
/** @category Macros */
export type MacroPackageDefinition = {
package: Record<string, string | MacroDefinition>;
primitive?: boolean;
captureSelection?: boolean;
};
/**
* Glue represents flexible spacing, that is a dimension that
* can grow (by the `grow` property) or shrink (by the `shrink` property).
*
* @category Registers
*/
export type Glue = {
glue: Dimension;
shrink?: Dimension;
grow?: Dimension;
};
/**
* @category Registers
*/
export type DimensionUnit = 'pt' | 'mm' | 'cm' | 'ex' | 'px' | 'em' | 'bp' | 'dd' | 'pc' | 'in' | 'mu' | 'fil' | 'fill' | 'filll';
/**
* A dimension is used to specify the size of things
*
* @category Registers
*/
export type Dimension = {
dimension: number;
unit?: DimensionUnit;
};
/**
* A LaTeX expression represent a sequence of tokens that can be evaluated to
* a value, such as a dimension.
*
* @category Registers
*/
export type LatexValue = {
relax?: boolean;
} & (Dimension | Glue | {
string: string;
} | {
number: number;
base?: 'decimal' | 'octal' | 'hexadecimal' | 'alpha';
} | {
register: string;
factor?: number;
global?: boolean;
});
/**
* TeX registers represent "variables" and "constants".
*
* Changing the values of some registers can modify the layout
* of math expressions.
*
* The following registers might be of interest:
*
* - `thinmuskip`: space between items of math lists
* - `medmuskip`: space between binary operations
* - `thickmuskip`: space between relational operators
* - `nulldelimiterspace`: minimum space to leave blank in delimiter constructions, for example around a fraction
* - `delimitershortfall`: maximum space to overlap adjacent elements when a delimiter is too short
* - `jot`: space between lines in an array, or between rows in a multiline construct
* - `arraycolsep`: space between columns in an array
* - `arraystretch`: factor by which to stretch the height of each row in an array
*
* To modify a register, use:
*
* ```javascript
* mf.registers.arraystretch = 1.5;
* mf.registers.thinmuskip = { dimension: 2, unit: "mu" };
* mf.registers.medmuskip = "3mu";
*```
* @category Registers
*
*/
export type Registers = Record<string, number | string | LatexValue>;
/**
* A dictionary of LaTeX macros to be used to interpret and render the content.
*
* For example:
```javascript
mf.macros = { smallfrac: "^{#1}\\!\\!/\\!_{#2}" };
```
The code above will support the following notation:
```latex
\smallfrac{5}{16}
```
* **See Also**
* * [Macros Example](/mathfield/guides/macros/)
*
* @category Macros
*/
export type MacroDictionary = Record<string, string | Partial<MacroDefinition> | MacroPackageDefinition>;
/** @internal */
export type BoxCSSProperties = 'background-color' | 'border' | 'border-bottom' | 'border-color' | 'border-left' | 'border-radius' | 'border-right' | 'border-right-width' | 'border-top' | 'border-top-width' | 'box-sizing' | 'color' | 'display' | 'font-family' | 'left' | 'height' | 'line-height' | 'margin-top' | 'margin-left' | 'margin-right' | 'opacity' | 'padding' | 'padding-left' | 'padding-right' | 'position' | 'top' | 'bottom' | 'vertical-align' | 'width' | 'z-index';
/** @internal */
export type MatrixEnvironment = 'matrix' | 'matrix*' | 'pmatrix' | 'pmatrix*' | 'bmatrix' | 'bmatrix*' | 'Bmatrix' | 'Bmatrix*' | 'vmatrix' | 'vmatrix*' | 'Vmatrix' | 'Vmatrix*';
/** @internal */
export type CasesEnvironment = 'cases' | 'dcases' | 'rcases';
/** @internal */
export type TabularEnvironment = 'array' | 'equation' | 'equation*' | 'subequations' | 'multline' | 'align' | 'align*' | 'aligned' | 'eqnarray' | 'split' | 'gather' | 'gather*' | 'gathered' | 'lines' | 'multline' | 'multline*' | 'cases' | 'dcases' | 'rcases' | 'smallmatrix' | 'smallmatrix*' | CasesEnvironment | MatrixEnvironment;
/** @internal */
export type AlignEnvironment = 'align' | 'align*' | 'aligned' | 'gather' | 'gather*' | 'gathered' | 'split' | 'multline';
/** @internal */
export type Environment = 'math' | 'displaymath' | 'center' | TabularEnvironment;