From b83e0a3292d0eee2eb58d37d44f89730cc3383bd Mon Sep 17 00:00:00 2001 From: jkriege2 Date: Tue, 28 Jun 2022 10:15:54 +0200 Subject: [PATCH] NEW: JKQTMathText: added \underbracket and \overbracket --- doc/dox/whatsnew.dox | 1 + doc/images/jkqtmathtext/MTFMoverbracket.png | Bin 0 -> 2063 bytes doc/images/jkqtmathtext/MTFMunderbracket.png | Bin 0 -> 2030 bytes examples/jkqtmathtext_test/testform.cpp | 6 +-- lib/jkqtmathtext/jkqtmathtext.cpp | 12 +++++ lib/jkqtmathtext/jkqtmathtext.h | 2 + .../nodes/jkqtmathtextfracnode.cpp | 48 ++++++++++++++++-- lib/jkqtmathtext/nodes/jkqtmathtextfracnode.h | 2 + 8 files changed, 64 insertions(+), 7 deletions(-) create mode 100644 doc/images/jkqtmathtext/MTFMoverbracket.png create mode 100644 doc/images/jkqtmathtext/MTFMunderbracket.png diff --git a/doc/dox/whatsnew.dox b/doc/dox/whatsnew.dox index 058713ff6d..b4d2b2f204 100644 --- a/doc/dox/whatsnew.dox +++ b/doc/dox/whatsnew.dox @@ -49,6 +49,7 @@ Changes, compared to \ref page_whatsnew_V4_0_0 "v4.0.0" include:
  • NEW: LaTeX-Parser simplifies parrse-tree to increase speed of execution
  • NEW: \limits and \nolimits works as in LaTeX now (before it was simply removed and the functionality implemented for a fixed list of symbols)
  • NEW: added top-corner (\ulcorner/\urcorner) and bottom-corner brackets (\llcorner/\lrcorner)
  • +
  • NEW: added \overbracket and \underbracket
  • diff --git a/doc/images/jkqtmathtext/MTFMoverbracket.png b/doc/images/jkqtmathtext/MTFMoverbracket.png new file mode 100644 index 0000000000000000000000000000000000000000..f381390270a40f316582d80ef3265d091671659c GIT binary patch literal 2063 zcmZuydpOg58~=^OHXAJ@<*+QLBq}Y3F?+CinK?w>lw-qmur?2&9I{r#42zr|tyIV< z6{)1=urP%wM2ZSgJmzs4_Pq1H*ZW@Yb6w9L-@|=>zn{06fTmt_8|TZ7`MaPdWg= zn>PlCA5nTz>O@33_(Xa}ghWOM(#QawMkb%7hebsCc_~OC@=PatyCdiQeioUXRkc!K z>XM-qNqR7ZDik~T>V8<5iQFD+nU9?cri9R^axl^W0Sy2tATfpxmK?8_1#^Ylhxq&h zU#zr-`X#mvI&~Av12&(Ap#inF~bM#Ch>YkJ&yjEXP%j7nn6PafMh zGtcyBp7`7@3l8n^7mNDDA3?>m1zGUK>*<@vG!gHWP=(0pX!lqUmM2bP#M3MfSHi&4 z@`%{>iJN{g4;eI{iB8~j3!AAQi zP(C=nOI)NLKAgSGS?qn%`8&gJ`0D4F@Ye#D=-9SF-(RperKee!Me5G_tn)JWy^Cum z6cbu0u9m}P=R@k4r5}aiwU4*Q9mf)>%yF$9`)L`cCv%TdWC;eh@3(uptg3YhMA7nI ze8+}3npvnq1eERrG0T>LLF|Z2gQn?(hQ*$efJy-Da6xr)?~B(04buS5GiyAFz4iSm zu7}NZp%YCyC9Bs*@JaOy9 zY>~ci}%cT*&GlgC&;&p+*7LI59r=z3CXog35ly|zQA5?4WLvBPYj_LK` zDST^x2bf@B`$%Tq4bOsm%dxweN9!aO6mDT6<3L{JOY;YTN=WWy-=G*{ibvriR1GHdJ)&ACxTm<6j}FY*_KP z-UuY^K_3X^!o4s;>74gtEy6;bi4X2}Q}Z;jxX5C__FIAV4617|M;=vp!!Z2e%yaU# zt-*HwWE0n()l5%6$W8vryk#vfCcmvxg8Xp$u9It>y$&)^Eyvd=YOwu|ifZtybLL)c z!d@nhwvun?{KXpx#E(Cje|}L5v6g98Sc8yrrj}pseZuhGO*`Tx;0#rH>7Kkh73*KfV>U3v(%X;Fd@GVJYttX>cgvCvrQY82&v)N(|S%lgqRLP6BM1~v)Tvly%EVp~0 zNnYF(l_M#xQZIR$riVUZ`fhl&j)XJBj9LpQa~;%O=P-vFz9Y)UN9yA>zvVe~vglC; z4i00TVUfab?p=)$5)6_guz-uxM&@qx_6KJdn6ScUF0N_|YFd7vUrJgBGPzm>!;zFD z^x2`^f9U6ws9VwcHm;?G&tNVwf`WqmQ-$pw8N{xF@@ zcdy;bkIUGFBvpjc&3Y$R{Z8lJX(!H-l9#mbxQPYj(b~>xz8<>K3N{jl0>=bxd7)K^ z-3Ymn^7}}zlX{a5X+!^yHwVwpW}+fVCOkgxSemZWlknRGCRe2)Fd3p}dpZ>n1CuH325&pV&Itt-@VAf){WjpE@`|^mf~%rWvt0KpK~p=2?&Ut}7!*c-Dsq2# zactYewX4Ghs&YGmel|awc+@+1e@`d}XE4x>TU}1Q^&2K({mdcOZx%haynAJiNR`tD zB^S|qy0^o^IH|aW3kmCKG8qc@KA=PUvy&GE??7HVb}7~%-%Gzt4qPqa4y5I3Q+Q*7 z6gO4F4UN5v_4oOJHMIZ3a9bI2sO6aX(hE_x=}mV9 zxgC&j72GSP&(L&w7#hM2_{A>$-?$+X@00(F#so|I_(e&wnedFTpng78dh}=k^lT&4 ztB=EHG!a#2Hqe(eF1yum*>(3Ac=P{pD4$v&5IzElE?69}U-thhzG7{C)pmjMjacg3 S@=n^X0VfAn`zl<(rGEjaiM^Hp literal 0 HcmV?d00001 diff --git a/doc/images/jkqtmathtext/MTFMunderbracket.png b/doc/images/jkqtmathtext/MTFMunderbracket.png new file mode 100644 index 0000000000000000000000000000000000000000..a6d4ccabc0ae21bf20b87db830ac5179ecb3cd06 GIT binary patch literal 2030 zcmZvddpy(oAIHBl3~Sa=elnM86dgt3xNfz?8Ihz@E|crnM$wruHC{x%kH;s&%ae%Gz-Ryf zfO2zn_67jh4ruSIrUcE~=dYj-|#h0*|Rd7DTw4^Zwrw0>Oek(H|Vv zrz_UmAHdkcyvG4SGS`~cOHuP4SB_TNw<>&#d-fp&)_9Vf>bc2@Pq}X}G6a?eeLG#;X~+wP)87-wBJCdEA)UPn zrz0xtmw``CD6+`W2RLqhu3>ROKRRB+H9(uPfje;Ryr?bK)8DCOvi4QU*jz#h0X=GP z*yMs+g%JkSJzfvXxGmT26~0r5R5r+r%9mpG$>+KEFc1d%|E`V*vZW z4pBNbr{Z$+Ov6D|Ag<-!_mj~YOWqGqF56FNXT3jHAWy*IDJ@RuIicNZne%qxKCDzy zlPx%>xwa4O)ksi=8QSqHQSBmncKxe*PVD$ zOOErkHGDLLua{4;ZhP&-|A;EmKUaMLWo&|%Uii~E9tSVgJW4B*S&8**ZuXN06R!3P zRJC#<)LocWcc(JA7Vk&2FkDC4?9zqRrLhIRc{MeaZl@zBVQ@T=IhN}ZkdW3Z{ z{Bh%XQ-rcrb+_+OnAnO{zw)K0Mm%=gtujn@^>Y`8dLtuC82K55pTXBJe+v_3``L?v z{&T%_zxl>DJo2X!Vd3WCD`QEmL%r>16F&*eatt2b!LON`XFB+{IH_GjLzo%y+Rt9Z zyCK_co>U|;9ZlZoHGOE~5VrjtD^Yw|((X6uXK_o`M!pnz1*!7CFeMWE4VUCaArD+q z0!$$uei;8|i;hNwzxCfXgJJvUtKa7RS?3qVxqQ*)G1SwX4Fa#K@M+DuwQ#SXS5~-K zaoh11CvT%+NSf~yH|SH+lmT}9-5g}VW=?|S5qm(V<)1Q*Q>qj zQ|>a{Qy=KBRmN=sSt;)}V=6I@+7e`1dP$%Wfn`4Nw!-7`KK(h593|eQ*YUHF zOzL5cuG@#Ybv#9Qo{0*z^KS8%X5k(D4gxEkF0yhgEXR+x&4<)!j)yPzxe(hX*ez^9 zBb{0FwPcVqr`SY|F~;I04n~7&xy;8YCMy1KC-9rw4Am3Yu{vb;DtF%`8Df2=TR)v{ ziK_qb3I?KXsA@8ry7mlC?IMU|Ml#HDP>%fWSjs$w7&To}=f5ld>hB=zol>WDTpqi1 zpCx{?#6_#iFeKkpbYMx|_DYT>zHc~woful}qa3aE#Qv{Ptg@x*E%8-K#N*UZP?&b> zwUW5!6~;mwt7kRv4a043jCzxN`b9*xy`!RXSFDc!nNCgiiEFO1btAAcy#}WzG7g52 zM$g6EAX$|N8FkXa38TMxf6KO*7b?(p%1I~NzJGfzpgrNRWqFy z&oSRSAVxB4h72Z$r9BUQS+85VEvz|$Lj7iEdO>u-AH9LRysWK#LP03#w_tEY@TGg8 zdF4_6=++z@g=BV>Z`<7-U*}SH%DoH~hO)1F_16Z?GaX6Q3(_n~8uOQdf-~SLOVLgf zk_DYlQRED7jeeTuNIhDHx-|5gf=wc|sWZzB=&dq4H8OcnC>>f*dugHjK_wnb(e>m< z7SlRu1a@S4hWQ}hPl;0+zt<$R{E|9)=KHgu?w;HqxN?WUg4mSLs^klO-nz$`h(6u7dojKDNeqJ}jCu0Y>0;O64#T;UX){9pbp*cSi* literal 0 HcmV?d00001 diff --git a/examples/jkqtmathtext_test/testform.cpp b/examples/jkqtmathtext_test/testform.cpp index d927113863..f0689d34b4 100644 --- a/examples/jkqtmathtext_test/testform.cpp +++ b/examples/jkqtmathtext_test/testform.cpp @@ -155,9 +155,9 @@ TestForm::TestForm(QWidget *parent) : ui->cmbTestset->addItem("math 7", "$\\left(\\frac{\\partial^2}{\\partial x^2}+\\frac{\\partial^2}{\\partial y^2}\\right)\\left|\\varphi(x+\\mathrm{i}y)\\right|^2=0$"); ui->cmbTestset->addItem("math 8", "$2^{2^{2^{x}}}$"); ui->cmbTestset->addItem("math 9", "$\\iint_Df(x,y)\\;\\mathrm{d}x\\;\\mathrm{d}y$"); - ui->cmbTestset->addItem("math 10 (overbrace)", "$\\overbrace{x+x+...+x}{k\\ \\mathrm{times}}$"); - ui->cmbTestset->addItem("math 11 (underbrace)", "$\\underbrace{x+x+...+x}{k\\ \\mathrm{times}}$"); - ui->cmbTestset->addItem("math 12 (under/overbrace)", "$\\underbrace{\\overbrace{x+x+...+x}{k\\ \\mathrm{times}} \\overbrace{x+x+...+x}{k\\ \\mathrm{times}}}{2k\\ \\mathrm{times}}$"); + ui->cmbTestset->addItem("math 10 (overbrace+overbracket)", "$\\overbrace{x+x+...+x}{k\\ \\mathrm{times}}\\ \\ \\ \\overbracket{x+x+...+x}{k\\ \\mathrm{times}}$"); + ui->cmbTestset->addItem("math 11 (underbrace+underbracket)", "$\\underbrace{x+x+...+x}{k\\ \\mathrm{times}}\\ \\ \\ \\underbracket{x+x+...+x}{k\\ \\mathrm{times}}$"); + ui->cmbTestset->addItem("math 12 (under/overbrace+under/overbracket)", "$\\underbrace{\\overbrace{x+x+...+x}{k\\ \\mathrm{times}} \\overbrace{x+x+...+x}{k\\ \\mathrm{times}}}{2k\\ \\mathrm{times}}\\ \\ \\ \\underbracket{\\overbracket{x+x+...+x}{k\\ \\mathrm{times}} \\overbracket{x+x+...+x}{k\\ \\mathrm{times}}}{2k\\ \\mathrm{times}}$"); ui->cmbTestset->addItem("math 13", "$y_1''\\ \\ \\ y_2'''$"); ui->cmbTestset->addItem("math 14", "$f(x)=\\begin{cases} 1/3 & \\mathrm{if}\\ 0\\leq x\\leq1 \\\\ 2/3 & \\mathrm{if}\\ 3\\leq x\\leq4 \\\\0 & \\mathrm{elsewhere} \\end{cases}$"); ui->cmbTestset->addItem("math 15", "$\\Re(z) =\\frac{n\\pi \\dfrac{\\theta +\\psi}{2}}{\\left(\\dfrac{\\theta +\\psi}{2}\\right)^2 + \\left( \\dfrac{1}{2}\\log \\left\\lvert\\dfrac{B}{A}\\right\\rvert\\right)^2}.$"); diff --git a/lib/jkqtmathtext/jkqtmathtext.cpp b/lib/jkqtmathtext/jkqtmathtext.cpp index fa2cae730b..e35ef4f576 100644 --- a/lib/jkqtmathtext/jkqtmathtext.cpp +++ b/lib/jkqtmathtext/jkqtmathtext.cpp @@ -1168,6 +1168,12 @@ JKQTMathTextNode* JKQTMathText::parseLatexString(bool get, JKQTMathTextBraceType if (getToken()==MTTopenbrace) n2=parseLatexString(true); if (n1 && n2) nl->addChild(new JKQTMathTextFracNode(this, n1, n2, JKQTMathTextFracNode::MTFMunderbrace)); else error_list.append(tr("error @ ch. %1: expected two arguments in '{' braces after '%2' command").arg(currentTokenID).arg(currentInstructionName)); + } else if (currentInstructionName=="underbracket") { + JKQTMathTextNode* n1=parseLatexString(true); + JKQTMathTextNode* n2=nullptr; + if (getToken()==MTTopenbrace) n2=parseLatexString(true); + if (n1 && n2) nl->addChild(new JKQTMathTextFracNode(this, n1, n2, JKQTMathTextFracNode::MTFMunderbracket)); + else error_list.append(tr("error @ ch. %1: expected two arguments in '{' braces after '%2' command").arg(currentTokenID).arg(currentInstructionName)); } else if (currentInstructionName=="underset") { JKQTMathTextNode* n1=parseLatexString(true); JKQTMathTextNode* n2=nullptr; @@ -1180,6 +1186,12 @@ JKQTMathTextNode* JKQTMathText::parseLatexString(bool get, JKQTMathTextBraceType if (getToken()==MTTopenbrace) n2=parseLatexString(true); if (n1 && n2) nl->addChild(new JKQTMathTextFracNode(this, n1, n2, JKQTMathTextFracNode::MTFMoverbrace)); else error_list.append(tr("error @ ch. %1: expected two arguments in '{' braces after '%2' command").arg(currentTokenID).arg(currentInstructionName)); + } else if (currentInstructionName=="overbracket") { + JKQTMathTextNode* n1=parseLatexString(true); + JKQTMathTextNode* n2=nullptr; + if (getToken()==MTTopenbrace) n2=parseLatexString(true); + if (n1 && n2) nl->addChild(new JKQTMathTextFracNode(this, n1, n2, JKQTMathTextFracNode::MTFMoverbracket)); + else error_list.append(tr("error @ ch. %1: expected two arguments in '{' braces after '%2' command").arg(currentTokenID).arg(currentInstructionName)); } else if (currentInstructionName=="overset") { JKQTMathTextNode* n1=parseLatexString(true); JKQTMathTextNode* n2=nullptr; diff --git a/lib/jkqtmathtext/jkqtmathtext.h b/lib/jkqtmathtext/jkqtmathtext.h index 9d43a31d39..715d889783 100644 --- a/lib/jkqtmathtext/jkqtmathtext.h +++ b/lib/jkqtmathtext/jkqtmathtext.h @@ -156,6 +156,8 @@ class JKQTMathTextNode; // forward There are also instructions that allow to under/overset braces, arrows, ...: - $\\underbrace{x+x+...+x}{k\\ \\mathrm{times}}$ \image html jkqtmathtext/jkqtmathtext_brace_underbrace.png - $\\overbrace{x+x+...+x}{k\\ \\mathrm{times}}$ \image html jkqtmathtext/jkqtmathtext_brace_overbrace.png + - $\\underbracket{x+x+...+x}{k\\ \\mathrm{times}}$ \image html jkqtmathtext/MTFMunderbracket.png + - $\\overbracket{x+x+...+x}{k\\ \\mathrm{times}}$ \image html jkqtmathtext/MTFMoverbracket.png - $\\overset{main}{over}$ \image html jkqtmathtext/jkqtmathtext_brace_overset.png - $\\underset{main}{under}$ \image html jkqtmathtext/jkqtmathtext_brace_underset.png . diff --git a/lib/jkqtmathtext/nodes/jkqtmathtextfracnode.cpp b/lib/jkqtmathtext/nodes/jkqtmathtextfracnode.cpp index f360976785..d17fc9031f 100644 --- a/lib/jkqtmathtext/nodes/jkqtmathtextfracnode.cpp +++ b/lib/jkqtmathtext/nodes/jkqtmathtextfracnode.cpp @@ -53,6 +53,10 @@ QString JKQTMathTextFracNode::FracType2String(JKQTMathTextFracNode::FracType mod return "underbrace"; case JKQTMathTextFracNode::MTFMoverbrace: return "overbrace"; + case JKQTMathTextFracNode::MTFMunderbracket: + return "underbracket"; + case JKQTMathTextFracNode::MTFMoverbracket: + return "overbracket"; case JKQTMathTextFracNode::MTFMunderset: return "underset"; case JKQTMathTextFracNode::MTFMoverset: @@ -93,7 +97,7 @@ void JKQTMathTextFracNode::getSizeInternal(QPainter& painter, JKQTMathTextEnviro const double braceheight=fm.xHeight()*parentMathText->getUnderbraceBraceSizeXFactor(); const double braceseparation=fm.xHeight()*parentMathText->getUnderbraceSeparationXFactor(); - if (mode==JKQTMathTextFracNode::MTFMunderbrace || mode==JKQTMathTextFracNode::MTFMoverbrace) { + if (mode==JKQTMathTextFracNode::MTFMunderbrace || mode==JKQTMathTextFracNode::MTFMoverbrace||mode==JKQTMathTextFracNode::MTFMunderbracket || mode==JKQTMathTextFracNode::MTFMoverbracket) { ev2.fontSize=ev2.fontSize*parentMathText->getUnderbraceFactor(); } else if (mode==JKQTMathTextFracNode::MTFMunderset || mode==JKQTMathTextFracNode::MTFMoverset) { ev2.fontSize=ev2.fontSize*parentMathText->getUndersetFactor(); @@ -137,13 +141,13 @@ void JKQTMathTextFracNode::getSizeInternal(QPainter& painter, JKQTMathTextEnviro overallHeight=newascent+newdescent; baselineHeight=newascent; - } else if (mode==JKQTMathTextFracNode::MTFMunderbrace) { + } else if (mode==JKQTMathTextFracNode::MTFMunderbrace || mode==JKQTMathTextFracNode::MTFMunderbracket) { const double newdescent=descent1+overallHeight2+braceheight+2.0*braceseparation; overallHeight=newdescent+baselineHeight1; baselineHeight=baselineHeight1; width=qMax(width1, width2)+xwidth; strikeoutPos=line_ascent; - } else if (mode==JKQTMathTextFracNode::MTFMoverbrace) { + } else if (mode==JKQTMathTextFracNode::MTFMoverbrace || mode==JKQTMathTextFracNode::MTFMoverbracket) { overallHeight=overallHeight1+overallHeight2+braceheight+2.0*braceseparation; baselineHeight=baselineHeight1+overallHeight2+braceheight+2.0*braceseparation; width=qMax(width1, width2)+xwidth; @@ -196,7 +200,7 @@ double JKQTMathTextFracNode::draw(QPainter& painter, double x, double y, JKQTMat const double braceheight=fm.xHeight()*parentMathText->getUnderbraceBraceSizeXFactor(); const double braceseparation=fm.xHeight()*parentMathText->getUnderbraceSeparationXFactor(); - if (mode==JKQTMathTextFracNode::MTFMunderbrace || mode==JKQTMathTextFracNode::MTFMoverbrace) { + if (mode==JKQTMathTextFracNode::MTFMunderbrace || mode==JKQTMathTextFracNode::MTFMoverbrace||mode==JKQTMathTextFracNode::MTFMunderbracket || mode==JKQTMathTextFracNode::MTFMoverbracket) { ev2.fontSize=ev2.fontSize*parentMathText->getUnderbraceFactor(); } else if (mode==JKQTMathTextFracNode::MTFMunderset || mode==JKQTMathTextFracNode::MTFMoverset) { ev2.fontSize=ev2.fontSize*parentMathText->getUndersetFactor(); @@ -263,6 +267,24 @@ double JKQTMathTextFracNode::draw(QPainter& painter, double x, double y, JKQTMat child1->draw(painter, x+xwidth/2.0+(maxWidth-width1)/2.0, y, ev1); child2->draw(painter, x+xwidth/2.0+(maxWidth-width2)/2.0, ybot, ev2); deltaWidth=xwidth; + } else if (mode==JKQTMathTextFracNode::MTFMunderbracket) { + const double ybrace=y+descent1+braceseparation+braceheight/2.0; + const double ybot=y+descent1+2.0*braceseparation+braceheight+ascent2; + { + QPainterPath path; + const double y1=ybrace-braceheight/2.0; + const double y2=ybrace+braceheight/2.0; + const double x1=x+xwidth/2.0+p.width()/2.0; + const double x2=x+xwidth/2.0+maxWidth-p.width()/2.0; + path.moveTo(x1, y1); + path.lineTo(x1, y2); + path.lineTo(x2, y2); + path.lineTo(x2, y1); + painter.drawPath(path); + } + child1->draw(painter, x+xwidth/2.0+(maxWidth-width1)/2.0, y, ev1); + child2->draw(painter, x+xwidth/2.0+(maxWidth-width2)/2.0, ybot, ev2); + deltaWidth=xwidth; } else if (mode==JKQTMathTextFracNode::MTFMoverset) { child1->draw(painter, x+xwidth/2.0+(maxWidth-width1)/2.0, y, ev1); child2->draw(painter, x+xwidth/2.0+(maxWidth-width2)/2.0, y-ascent1-xheight/6.0-descent2, ev2); @@ -280,6 +302,24 @@ double JKQTMathTextFracNode::draw(QPainter& painter, double x, double y, JKQTMat painter.fillPath(path, QBrush(ev1.color)); } + child1->draw(painter, x+xwidth/2.0+(maxWidth-width1)/2.0, y, ev1); + child2->draw(painter, x+xwidth/2.0+(maxWidth-width2)/2.0, ytop, ev2); + deltaWidth=xwidth; + } else if (mode==JKQTMathTextFracNode::MTFMoverbracket) { + const double ybrace=y-ascent1-braceheight/2.0-braceseparation; + const double ytop=y-ascent1-2.0*braceseparation-braceheight-descent2; + { + QPainterPath path; + const double y1=ybrace+braceheight/2.0; + const double y2=ybrace-braceheight/2.0; + const double x1=x+xwidth/2.0+p.width()/2.0; + const double x2=x+xwidth/2.0+maxWidth-p.width()/2.0; + path.moveTo(x1, y1); + path.lineTo(x1, y2); + path.lineTo(x2, y2); + path.lineTo(x2, y1); + painter.drawPath(path); + } child1->draw(painter, x+xwidth/2.0+(maxWidth-width1)/2.0, y, ev1); child2->draw(painter, x+xwidth/2.0+(maxWidth-width2)/2.0, ytop, ev2); deltaWidth=xwidth; diff --git a/lib/jkqtmathtext/nodes/jkqtmathtextfracnode.h b/lib/jkqtmathtext/nodes/jkqtmathtextfracnode.h index f5b53aa968..abb13ad32e 100644 --- a/lib/jkqtmathtext/nodes/jkqtmathtextfracnode.h +++ b/lib/jkqtmathtext/nodes/jkqtmathtextfracnode.h @@ -55,6 +55,8 @@ class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextFracNode: public JKQTMathTextDualChild MTFMstfrac, /*!< \brief slanted text fraction \image html jkqtmathtext/MTFMstfrac.png */ MTFMunderbrace, /*!< \brief curly underbrace \image html jkqtmathtext/MTFMunderbrace.png */ MTFMoverbrace, /*!< \brief curly overbrace \image html jkqtmathtext/MTFMoverbrace.png */ + MTFMunderbracket, /*!< \brief square underbracket \image html jkqtmathtext/MTFMunderbracket.png */ + MTFMoverbracket, /*!< \brief square overbracket \image html jkqtmathtext/MTFMoverbracket.png */ MTFMstackrel, /*!< \brief binom/fraction without line \image html jkqtmathtext/MTFMstackrel.png */ MTFMunderset, /*!< \brief underset text \image html jkqtmathtext/MTFMunderset.png */ MTFMoverset /*!< \brief overset text \image html jkqtmathtext/MTFMoverset.png */