# base/mkern-to-mspace

Collapse mkern to the explicit mspace command.

https://texform.dev/rules/base/mkern-to-mspace

## Metadata

| Field | Value |
| --- | --- |
| Key | base/mkern-to-mspace |
| Level | faithful |
| Fidelity | reading |
| Enabled by packages | base |
| Profiles | Faithful, Corpus, Equiv |

## Rewrite patterns

From:

```latex
\mkern #1
```

To:

```latex
\mspace{#1}
```

## Examples

Examples show the rule in isolation, not a complete normalization profile.

### mkern between text glyphs

Before:

```latex
\text{A\mkern 1em B}
```

After this rule:

```latex
\text{A\mspace{1em}B}
```

Packages: base, textmacros.

Rendering verified with the declared packages.

### mkern mu length

Before:

```latex
A\mkern 2mu B
```

After this rule:

```latex
A\mspace{2mu} B
```

Packages: base, textmacros.

Rendering verified with the declared packages.

### Text mkern braced space loss

Before:

```latex
\text{A\mkern{1em} B}
```

After this rule:

```latex
\text{A\mspace{1em}B}
```

Packages: base, textmacros.

The rendered result has pixel differences from the input.

## Triggers

- [\\mkern](https://texform.dev/latex/commands/mkern)

## Eliminates

- [\\mkern](https://texform.dev/latex/commands/mkern)

## Produces

- [\\mspace](https://texform.dev/latex/commands/mspace)

## Same family

- [ams/nobreakspace-to-tilde](https://texform.dev/rules/ams/nobreakspace-to-tilde): Collapse nobreakspace to the canonical nonbreaking space token.
- [base/break-to-linebreak](https://texform.dev/rules/base/break-to-linebreak): Collapse break to the explicit linebreak command.
- [base/newline-to-linebreak](https://texform.dev/rules/base/newline-to-linebreak): Collapse newline to the explicit linebreak command.
- [base/control-space-to-tilde](https://texform.dev/rules/base/control-space-to-tilde): Rewrite math-mode control space to the canonical active space token.
- [base/gt-space-to-colon-space](https://texform.dev/rules/base/gt-space-to-colon-space): Collapse \> to the canonical medium math space command \:
- [base/hfil-to-hfill](https://texform.dev/rules/base/hfil-to-hfill): Collapse hfil to the canonical hfill command under MathJax spacing semantics.
- [base/hfilll-to-hfill](https://texform.dev/rules/base/hfilll-to-hfill): Collapse hfilll to the canonical hfill command.
- [base/hskip-to-hspace](https://texform.dev/rules/base/hskip-to-hspace): Collapse hskip to the explicit hspace command.
- [base/negthinspace-to-neg-comma-space](https://texform.dev/rules/base/negthinspace-to-neg-comma-space): Collapse negthinspace to the explicit negative thin math space command.
- [base/space-to-tilde](https://texform.dev/rules/base/space-to-tilde): Collapse space to the explicit nonbreaking space token.
- [base/thinspace-to-comma-space](https://texform.dev/rules/base/thinspace-to-comma-space): Collapse thinspace to the explicit thin math space command.
- [base/double-enspace-to-quad](https://texform.dev/rules/base/double-enspace-to-quad): Rewrite two adjacent enspaces to one exact-width quad.
- [base/double-quad-to-qquad](https://texform.dev/rules/base/double-quad-to-qquad): Merge two adjacent quads into one qquad for authoring normalization.
- [base/small-spacer-merge-to-enspace](https://texform.dev/rules/base/small-spacer-merge-to-enspace): Merge exact half-em small-spacer chunks into enspace in one pass.
- [base/allowbreak-drop](https://texform.dev/rules/base/allowbreak-drop): Drop allowbreak as a pure linebreak hint during cleanup-oriented normalization.
- [base/badbreak-drop](https://texform.dev/rules/base/badbreak-drop): Drop badbreak as a pure linebreak hint during cleanup-oriented normalization.
- [base/goodbreak-drop](https://texform.dev/rules/base/goodbreak-drop): Drop goodbreak as a pure linebreak hint during cleanup-oriented normalization.
- [base/mathstrut-drop](https://texform.dev/rules/base/mathstrut-drop): Drop the invisible mathstrut layout helper in cleanup-oriented normalization.
- [base/nobreak-drop](https://texform.dev/rules/base/nobreak-drop): Drop nobreak as a pure linebreak hint during cleanup-oriented normalization.
- [base/strut-drop](https://texform.dev/rules/base/strut-drop): Drop the fixed empty strut node in cleanup-oriented normalization.
- [base/enspace-drop](https://texform.dev/rules/base/enspace-drop): Drop enspace in math mode and collapse each text-mode enspace run to one ordinary space.
- [base/qquad-drop](https://texform.dev/rules/base/qquad-drop): Drop qquad in math mode and collapse each text-mode qquad run to one ordinary space.
- [base/quad-drop](https://texform.dev/rules/base/quad-drop): Drop quad in math mode and collapse each text-mode quad run to one ordinary space.
- [base/mskip-to-mspace](https://texform.dev/rules/base/mskip-to-mspace): Collapse mskip to the explicit mspace command.

## Notes

MathJax base/math gives \mkern a nobreak flag that \mspace does not preserve. In text content, MathJax's unbraced dimension scanner also consumes one ASCII space after the unit, while a braced dimension preserves it; TeXForm's AST cannot distinguish those scalar source forms, so canonicalizing the common primitive form can drop an intentional space after a braced argument. Both gaps make worst-case fidelity approximate. The base record owns this name by package import order.

## Disable this rule

```python
TransformEngine(profile="corpus", disable_rules=["base/mkern-to-mspace"])
```

```javascript
new TransformEngine({ profile: 'corpus', disableRules: ['base/mkern-to-mspace'] })
```

[Open in Playground](https://play.texform.dev/?input=%5Ctext%7BA%5Cmkern+1em+B%7D)
