expandOnce(e) {
              const r = this.popToken(), l = r.text, c = r.noexpand ? null : this._getExpansion(l);
              if (c == null || e && c.unexpandable) {
                if (e && c == null && l[0] === "\\" && !this.isDefined(l))
                  throw new o("Undefined control sequence: " + l);
                return this.pushToken(r), !1;
              }
              this.countExpansion(1);
              let m = c.tokens;
              const g = this.consumeArgs(c.numArgs, c.delimiters);
              if (c.numArgs) {
                m = m.slice();
                for (let _ = m.length - 1; _ >= 0; --_) {
                  let v = m[_];
                  if (v.text === "#") {
                    if (_ === 0)
                      throw new o("Incomplete placeholder at end of macro body", v);
                    if (v = m[--_], v.text === "#")
                      m.splice(_ + 1, 1);
                    else if (/^[1-9]$/.test(v.text))
                      m.splice(_, 2, ...g[+v.text - 1]);
                    else
                      throw new o("Not a valid argument number", v);
                  }
                }
              }
              return this.pushTokens(m), m.length;
            }
Expand the next token only once (if possible), and return the resulting
top token on the stack (without removing anything from the stack).
Similar in behavior to TeX's `\expandafter\futurelet`.
Equivalent to expandOnce() followed by future().