From 6f1661f7da4b3e5073d1e0773515e13d333348be Mon Sep 17 00:00:00 2001 From: Hiromi Ishii Date: Wed, 22 Nov 2017 21:34:05 +0900 Subject: [PATCH] Implements \mathchoice command (#969) This PR implements `\mathchoice` function. I once created PR on the wrong branch. Sorry for the mess. This is particularly useful when one defines custom macro for "big operators". For example: ```latex \newcommand{\infdisj}{% \mathop{% \mathchoice{% display \bigvee\hspace{-2ex}\bigvee% }{ % inline \bigvee\hspace{-1.75ex}\bigvee% }{ % script \bigvee\hspace{-1.4ex}\bigvee% }{ % scriptscript \bigvee\hspace{-1ex}\bigvee% }}} ``` --- src/functions.js | 3 + src/functions/mathchoice.js | 57 +++++++ test/__snapshots__/mathml-spec.js.snap | 143 ++++++++++++++++++ test/katex-spec.js | 28 ++++ test/mathml-spec.js | 12 ++ .../images/MathChoice-chrome.png | Bin 0 -> 7193 bytes .../images/MathChoice-firefox.png | Bin 0 -> 6223 bytes test/screenshotter/ss_data.yaml | 2 + 8 files changed, 245 insertions(+) create mode 100644 src/functions/mathchoice.js create mode 100644 test/screenshotter/images/MathChoice-chrome.png create mode 100644 test/screenshotter/images/MathChoice-firefox.png diff --git a/src/functions.js b/src/functions.js index c53ecb37..dce57095 100644 --- a/src/functions.js +++ b/src/functions.js @@ -566,3 +566,6 @@ defineFunction(["\\verb"], { throw new ParseError( "\\verb ended by end of line instead of matching delimiter"); }); + +// MathChoice +import "./functions/mathchoice"; diff --git a/src/functions/mathchoice.js b/src/functions/mathchoice.js new file mode 100644 index 00000000..561c2b25 --- /dev/null +++ b/src/functions/mathchoice.js @@ -0,0 +1,57 @@ +// @flow +import defineFunction, {ordargument} from "../defineFunction"; +import buildCommon from "../buildCommon"; +import mathMLTree from "../mathMLTree"; +import Style from "../Style"; +import * as html from "../buildHTML"; +import * as mml from "../buildMathML"; + +const chooseMathStyle = (group, options) => { + const style = options.style; + if (style.size === Style.DISPLAY.size) { + return group.value.display; + } else if (style.size === Style.TEXT.size) { + return group.value.text; + } else if (style.size === Style.SCRIPT.size) { + return group.value.script; + } else if (style.size === Style.SCRIPTSCRIPT.size) { + return group.value.scriptscript; + } + return group.value.text; + +}; + +defineFunction({ + type: "mathchoice", + names: ["\\mathchoice"], + props: { + numArgs: 4, + }, + handler: (context, args) => { + return { + type: "mathchoice", + display: ordargument(args[0]), + text: ordargument(args[1]), + script: ordargument(args[2]), + scriptscript: ordargument(args[3]), + }; + }, + htmlBuilder: (group, options) => { + const body = chooseMathStyle(group, options); + const elements = html.buildExpression( + body, + options, + false + ); + return new buildCommon.makeFragment(elements); + }, + mathmlBuilder: (group, options) => { + const body = chooseMathStyle(group, options); + const elements = mml.buildExpression( + body, + options, + false + ); + return new mathMLTree.MathNode("mrow", elements); + }, +}); diff --git a/test/__snapshots__/mathml-spec.js.snap b/test/__snapshots__/mathml-spec.js.snap index 3edca120..ad4b36d7 100644 --- a/test/__snapshots__/mathml-spec.js.snap +++ b/test/__snapshots__/mathml-spec.js.snap @@ -74,6 +74,149 @@ exports[`A MathML builder should make prime operators into nodes 1`] = ` `; +exports[`A MathML builder should render mathchoice as if there was nothing 1`] = ` + + + + + + + + + ∑ + + + + k + + + = + + + 0 + + + + ∞ + + + + + x + + + k + + + + + + + \\displaystyle\\mathchoice{\\sum_{k = 0}^{\\infty} x^k}{T}{S}{SS} + + + + +`; + +exports[`A MathML builder should render mathchoice as if there was nothing 2`] = ` + + + + + + + + ∑ + + + + k + + + = + + + 0 + + + + ∞ + + + + + x + + + k + + + + + + \\mathchoice{D}{\\sum_{k = 0}^{\\infty} x^k}{S}{SS} + + + + +`; + +exports[`A MathML builder should render mathchoice as if there was nothing 3`] = ` + + + + + + + x + + + + T + + + + + + x_{\\mathchoice{D}{T}{\\sum_{k = 0}^{\\infty} x^k}{SS}} + + + + +`; + +exports[`A MathML builder should render mathchoice as if there was nothing 4`] = ` + + + + + + + x + + + + y + + + + T + + + + + + + x_{y_{\\mathchoice{D}{T}{S}{\\sum_{k = 0}^{\\infty} x^k}}} + + + + +`; + exports[`A MathML builder should use for colorbox 1`] = ` diff --git a/test/katex-spec.js b/test/katex-spec.js index 2f23a763..7bf73b8f 100644 --- a/test/katex-spec.js +++ b/test/katex-spec.js @@ -2660,3 +2660,31 @@ describe("The maxSize setting", function() { expect(built.style.borderTopWidth).toEqual("0em"); }); }); + +describe("The \\mathchoice function", function() { + const cmd = "\\sum_{k = 0}^{\\infty} x^k"; + + it("should render as if there is nothing other in display math", function() { + const plain = getBuilt("\\displaystyle" + cmd)[0]; + const built = getBuilt(`\\displaystyle\\mathchoice{${cmd}}{T}{S}{SS}`)[0]; + expect(built).toEqual(plain); + }); + + it("should render as if there is nothing other in text", function() { + const plain = getBuilt(cmd)[0]; + const built = getBuilt(`\\mathchoice{D}{${cmd}}{S}{SS}`)[0]; + expect(built).toEqual(plain); + }); + + it("should render as if there is nothing other in scriptstyle", function() { + const plain = getBuilt(`x_{${cmd}}`)[0]; + const built = getBuilt(`x_{\\mathchoice{D}{T}{${cmd}}{SS}}`)[0]; + expect(built).toEqual(plain); + }); + + it("should render as if there is nothing other in scriptscriptstyle", function() { + const plain = getBuilt(`x_{y_{${cmd}}}`)[0]; + const built = getBuilt(`x_{y_{\\mathchoice{D}{T}{S}{${cmd}}}}`)[0]; + expect(built).toEqual(plain); + }); +}); diff --git a/test/mathml-spec.js b/test/mathml-spec.js index 5c6c61fc..2eabf49a 100644 --- a/test/mathml-spec.js +++ b/test/mathml-spec.js @@ -58,4 +58,16 @@ describe("A MathML builder", function() { it('should use for colorbox', () => { expect(getMathML("\\colorbox{red}{b}")).toMatchSnapshot(); }); + + it('should render mathchoice as if there was nothing', () => { + const cmd = "\\sum_{k = 0}^{\\infty} x^k"; + expect(getMathML(`\\displaystyle\\mathchoice{${cmd}}{T}{S}{SS}`)) + .toMatchSnapshot(); + expect(getMathML(`\\mathchoice{D}{${cmd}}{S}{SS}`)) + .toMatchSnapshot(); + expect(getMathML(`x_{\\mathchoice{D}{T}{${cmd}}{SS}}`)) + .toMatchSnapshot(); + expect(getMathML(`x_{y_{\\mathchoice{D}{T}{S}{${cmd}}}}`)) + .toMatchSnapshot(); + }); }); diff --git a/test/screenshotter/images/MathChoice-chrome.png b/test/screenshotter/images/MathChoice-chrome.png new file mode 100644 index 0000000000000000000000000000000000000000..af3b6d1e98c548a3a85df1638dc21cba9a6a084f GIT binary patch literal 7193 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%0AuYSM6Z05v1CW{3+FCxS4C!Ei+ z{ZnyV@wfVxz1i|Mm!4hQ>-{-xf$S`H6TKHZ*Jhrcxb*PBzjo6PRISKoSoQa%`?uO- z@A`Gt!{y(dBbu7bT8P*L+f$#USPCKKQdVHI0ZhP4q{)+6|U!B?ex7-Pee>?sA z&x__J<;;9LfBo20|3c@$-u17{Ur#^&)-L~E*zfu$-#&iy&%bQ=>96=Zi|WO>^F!}T z|625%=bxd$-CwK^{)hdaS-H3Ss9wW_6>f^vOl%%aj2Wc^|D7P`{o6+y)GBc zwHK;5ed*ude~n9H48ERN^7?hY`nMOm&u`i(UGQ6R|3%&Pvn~fVtgSB3(X0MBr|5e# z-|h6on=gN@Kc8vu|6tegX+`^;=j}WmQF$u&_?o%9We&(*)@L}YT(SPG_OI7@`sv!@`#BeGUA3=Rl6mvDn%=YT$M)I( z-t#Q%@7H~Yr{16UXU5K4){4;YKQ6IPKYM=7{GNix7gKLnzMcK^=NTI?&qAvc-{WFW|1Uas+AOcCWn7(nYEkxbxtRs8e;yAPSG%?GexvX8y^D4RzPC%!cev~O|KqFQ=Fju) ze9b*Df19?o>H9@d`=>d*PE)gw2$&ak*ZAkR_Nkjz7I#FpZ()D1=5c@RRc`)!tE*ne znN`1iJ*&_1Rp|NZgwJKOo<96<`{C(1yPr=c``6r_9asD!PTD;E{N2~C`4y*k`&m7` za(SQihs@r59`j#e*(X(_r)^sCxc_Nzw*J?*ukLHd#~iaWKXgJ|bn9j<5T)LEn5@-NIe*PS>Lsq)&03%+B?upTsq#xU-TS*=V_BD< zUw!uGuLa?IUw&oRU2*>19{B_Qr|xZ^x7}5<{BG&_TeF+@>dU7-`C_MivF_8MO_8-~ zJp1{Q&USS&_uap>@y$ose9n2dcLkryojoNocfQy*O+KZB*h^v!@9jRwb(_t&TRwTk z?ES9=<>hvLyV5hBn^JtYqt{qn2a&FP8`;trFYAkJa_P1_(xh;<+;qKO?z@H`GH@&~YTu}OZ zQWe9yYrozU{+)EP{u=WJ_t&>u=UdJ1DD7h4`M%iBUG(aG#*%q?CDDIpx9vRt>&>Ni zD<6wrN#6K!_4%K-Z$-QAc+8TpL-_X`wTS=o_P-8OZx6Q?D62XtKCP5z&7EzA2Hzj% z|LEi9*l z8M`sGMeZ!r?2ijLb@+VVob#Li+!vc}w7mNFzD<9{9H(D1`^;}5AM@q)wu!$YuN}^h zV!G_h(6)2Q6nCB9?{%}I->LoH_onx_e4PE-irw71)9?Q7%;gU|ml=Ef&8%;SnUDWp zJteaF{bCMdM}{`bt#AGu|M+pKe#YD{R)k1Ln% zN!4Aee#eoiV7ct2Lc`6|r$tVlFSt$PeLnA+J4^4>{wTeYc#HGE+^t!Kkr#HYzRCY= zi=OA7%|YKXYU>NUG~?&pGi}!7JTUj`<)Bml&aM{vpHg@;`O}{H{8!xW-KqJoa^t5< zFXK#SbTQnCe6P(d7gF}?jPKU^e?N0SpI#g-&Qo7>v##*wf9tRL0@G#UPGzU%h$ad! z?%2#X=XdYy`N5~&y#02gG;inWlWX_3Xq(@Bbt_vg>QtNc`^x)4+y39;S*OgSz)*gz zEPl=3^Zs!^7x*3%d-wg|x82fzlU8dVKOR1}^afvdTK>N^`c@n>N+(i0Tt@l;+o%pI zj8cvU;%FdJFvvZcd`6ScX!0Rrc4(w$oHzfO|G#{HVxrG#BL)Tr22WQ%mvv4FO#soM BCDZ@_ literal 0 HcmV?d00001 diff --git a/test/screenshotter/images/MathChoice-firefox.png b/test/screenshotter/images/MathChoice-firefox.png new file mode 100644 index 0000000000000000000000000000000000000000..2e608e6cdba3baec38c1e5925e1af15bfb95a27c GIT binary patch literal 6223 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 literal 0 HcmV?d00001 diff --git a/test/screenshotter/ss_data.yaml b/test/screenshotter/ss_data.yaml index 959dd276..8d1384de 100644 --- a/test/screenshotter/ss_data.yaml +++ b/test/screenshotter/ss_data.yaml @@ -144,6 +144,8 @@ LowerAccent: | \end{matrix} MathAtom: a\mathrel{\mathop{=}\limits^{\blue ?}}b MathAtom2: \mathop{\overline{\mathrm{lim}}}\limits_{x\to\infty}f(x) +MathChoice: | + {\displaystyle\mathchoice{D}{T}{S}{SS}} {\textstyle\mathchoice{D}{T}{S}{SS}} {\scriptstyle \mathchoice{D}{T}{S}{SS}} {\scriptscriptstyle\mathchoice{D}{T}{S}{SS}} \displaystyle X_{\mathchoice{D}{T}{S}{SS}_{\mathchoice{D}{T}{S}{SS}}} MathDefaultFonts: Ax2k\breve{a}\omega\Omega\imath+\KaTeX MathBb: \mathbb{Ax2k\breve{a}\omega\Omega\imath+\KaTeX} MathBf: \mathbf{Ax2k\breve{a}\omega\Omega\imath+\KaTeX}