feat: \operatornamewithlimits (and clean up \operatorname support) (#2984)

* feat: \operatornamewithlimits (and clean up \operatorname support)

Add support for `\operatornamewithlimits` (an alias to `\operatorname*`
defined in `amsmath/amsopn.sty`), and use KaTeX's existing `\@ifstar`
macro to define `\operatorname` instead of a special lexing rule
(simplifying the lexer).

* Pick up one comment

* Actually fix docs this time

Co-authored-by: Ron Kok <ronkok@comcast.net>
This commit is contained in:
Erik Demaine
2021-05-06 17:49:34 -04:00
committed by GitHub
parent 6a7e3073a7
commit e9b751b72d
4 changed files with 9 additions and 6 deletions

View File

@@ -59,7 +59,6 @@ const tokenRegexString = `(${spaceRegexString}+)|` + // whitespace
`${combiningDiacriticalMarkString}*` + // ...plus accents
"|\\\\verb\\*([^]).*?\\4" + // \verb*
"|\\\\verb([^*a-zA-Z]).*?\\5" + // \verb unstarred
"|\\\\operatorname\\*" + // \operatorname*
`|${controlWordWhitespaceRegexString}` + // \macroName + spaces
`|${controlSymbolRegexString})`; // \\, \', etc.

View File

@@ -1,5 +1,6 @@
// @flow
import defineFunction, {ordargument} from "../defineFunction";
import {defineMacro} from "../macros";
import buildCommon from "../buildCommon";
import mathMLTree from "../mathMLTree";
import {SymbolNode} from "../domTree";
@@ -140,7 +141,7 @@ const mathmlBuilder: MathMLBuilder<"operatorname"> = (group, options) => {
// amsopn.dtx: \mathop{#1\kern\z@\operator@font#3}\newmcodes@
defineFunction({
type: "operatorname",
names: ["\\operatorname", "\\operatorname*"],
names: ["\\operatorname@", "\\operatornamewithlimits"],
props: {
numArgs: 1,
},
@@ -150,7 +151,7 @@ defineFunction({
type: "operatorname",
mode: parser.mode,
body: ordargument(body),
alwaysHandleSupSub: (funcName === "\\operatorname*"),
alwaysHandleSupSub: (funcName === "\\operatornamewithlimits"),
limits: false,
parentIsSupSub: false,
};
@@ -159,3 +160,5 @@ defineFunction({
mathmlBuilder,
});
defineMacro("\\operatorname",
"\\@ifstar\\operatornamewithlimits\\operatorname@");