#2549·KaTeX

\char can be used to write invalid raw characters

Author: anderskCreated Sep 25, 2020Updated Aug 2, 2026
Labelsbug

Using \char, KaTeX can be convinced to output raw characters that are invalid HTML5 and/or XML:

  • \char0: NUL character (invalid HTML5, XML)
  • \char1\char8, \char11, \char14\char31: C0 control codes (invalid HTML5)
  • \char12: form feed (invalid XML)
  • \char127: DEL character (invalid HTML5)
  • \char128\char159: C1 control codes (invalid HTML5)
  • \char55296\char57343: unpaired surrogates (invalid HTML5, XML)
  • \char64976\char65007: noncharacters (invalid HTML5)
  • \char65534, \char65535: noncharacters (invalid HTML5, XML)

The number is interpreted modulo 65536, so \char65536 also outputs a NUL character, etc.

> katex = require('katex'); katex.version
'0.12.0'
> katex.renderToString('\\char0').includes('\x00')  // NUL character
true
> katex.renderToString('\\char1').includes('\x01')  // C0 control code
true
> katex.renderToString('\\char12').includes('\f')  // form feed
true
> katex.renderToString('\\char127').includes('\x7f')  // DEL character
true
> katex.renderToString('\\char128').includes('\x80')  // C1 control code
true
> katex.renderToString('\\char55296').includes('\ud800')  // unpaired surrogate
true
> katex.renderToString('\\char64976').includes('\ufdd0')  // noncharacter
true
> katex.renderToString('\\char65534').includes('\ufffe')  // noncharacter
true
> katex.renderToString('\\char65536').includes('\x00')  // NUL character again
true