Rewrite patterns#
\~
Examples#
Each example shows this rule applied in isolation. A complete normalization profile may make additional changes.
Math control space#
Rendering verified with the declared packages.
Text control space preserved#
Rendering verified with the declared packages.
Related rules#
Same family#
ams/nobreakspace-to-tildeCollapse nobreakspace to the canonical nonbreaking space token.base/break-to-linebreakCollapse break to the explicit linebreak command.base/newline-to-linebreakCollapse newline to the explicit linebreak command.base/gt-space-to-colon-spaceCollapse \> to the canonical medium math space command \:base/hfil-to-hfillCollapse hfil to the canonical hfill command under MathJax spacing semantics.base/hfilll-to-hfillCollapse hfilll to the canonical hfill command.base/hskip-to-hspaceCollapse hskip to the explicit hspace command.base/negthinspace-to-neg-comma-spaceCollapse negthinspace to the explicit negative thin math space command.base/space-to-tildeCollapse space to the explicit nonbreaking space token.base/thinspace-to-comma-spaceCollapse thinspace to the explicit thin math space command.base/double-enspace-to-quadRewrite two adjacent enspaces to one exact-width quad.base/double-quad-to-qquadMerge two adjacent quads into one qquad for authoring normalization.base/small-spacer-merge-to-enspaceMerge exact half-em small-spacer chunks into enspace in one pass.base/allowbreak-dropDrop allowbreak as a pure linebreak hint during cleanup-oriented normalization.base/badbreak-dropDrop badbreak as a pure linebreak hint during cleanup-oriented normalization.base/goodbreak-dropDrop goodbreak as a pure linebreak hint during cleanup-oriented normalization.base/mathstrut-dropDrop the invisible mathstrut layout helper in cleanup-oriented normalization.base/nobreak-dropDrop nobreak as a pure linebreak hint during cleanup-oriented normalization.base/strut-dropDrop the fixed empty strut node in cleanup-oriented normalization.base/enspace-dropDrop enspace in math mode and collapse each text-mode enspace run to one ordinary space.base/qquad-dropDrop qquad in math mode and collapse each text-mode qquad run to one ordinary space.base/quad-dropDrop quad in math mode and collapse each text-mode quad run to one ordinary space.base/mkern-to-mspaceCollapse mkern to the explicit mspace command.base/mskip-to-mspaceCollapse mskip to the explicit mspace command.
Notes#
This is a partial matcher because the same command name has different base/math and textmacros/text semantics, so it touches rather than eliminates cmd: . The rule derives the actual content mode from the AST parent and slot and rewrite only math content; active_command() and match_command() are not sufficient mode tests. Text-mode control space remains an ordinary U+0020. Produces is empty because ~ is an ActiveSpace token rather than a knowledge target. Every Applied result replaces one math-mode control-space command with an ActiveSpace node; text-mode and otherwise ineligible nodes return Skipped, so the number of eligible control-space commands strictly decreases.
Disable this rule#
TransformEngine(profile="corpus", disable_rules=["base/control-space-to-tilde"])new TransformEngine({ profile: 'corpus', disableRules: ['base/control-space-to-tilde'] })