@@ -69,11 +69,11 @@ describe('Newcommand', () => {
6969 tex2mml (
7070 '\\newenvironment{argument}[1][a]{\\textbf{Argument #1:}}{aa}\\begin{argument}b\\end{argument}'
7171 ) ,
72- `<math xmlns=\ "http://www.w3.org/1998/Math/MathML\ " data-latex=\ "\\newenvironment{argument}[1][a]{\\textbf{Argument #1:}}{aa}\\begin{argument}b\\end{argument}\ " display=\ "block\ ">
73- <mtext mathvariant=\ "bold\ " data-latex=\ "\\textbf{Argument a:}\ ">Argument a:</mtext>
74- <mi data-latex=\"b\ ">b</mi>
75- <mi data-latex=\"a\ ">a</mi>
76- <mi data-latex=\"a\ ">a</mi>
72+ `<math xmlns="http://www.w3.org/1998/Math/MathML" data-latex="\\newenvironment{argument}[1][a]{\\textbf{Argument #1:}}{aa}\\begin{argument}b\\end{argument}" display="block">
73+ <mtext mathvariant="bold" data-latex="\\textbf{Argument a:}">Argument a:</mtext>
74+ <mi data-latex="b ">b</mi>
75+ <mi data-latex="a ">a</mi>
76+ <mi data-latex="a ">a</mi>
7777 </math>`
7878 ) ) ;
7979 it ( 'Newenvironment Arg Optional' , ( ) =>
@@ -773,12 +773,168 @@ describe('NewcommandError', () => {
773773 it ( 'Missing End Error' , ( ) =>
774774 toXmlMatch (
775775 tex2mml ( '\\newenvironment{env}{aa}{bb}\\begin{env}cc' ) ,
776- `<math xmlns=\ "http://www.w3.org/1998/Math/MathML\ " data-latex=\ "\\newenvironment{env}{aa}{bb}\\begin{env}cc\ " display=\ "block\ ">
777- <merror data-mjx-error=\ "Missing \\end{env}\ ">
776+ `<math xmlns="http://www.w3.org/1998/Math/MathML" data-latex="\\newenvironment{env}{aa}{bb}\\begin{env}cc" display="block">
777+ <merror data-mjx-error="Missing \\end{env}">
778778 <mtext>Missing \\end{env}</mtext>
779779 </merror>
780780 </math>`
781781 ) ) ;
782782} ) ;
783783
784+ describe ( 'Newcommand Overrides' , ( ) => {
785+ beforeEach ( ( ) => setupTex ( [ 'base' , 'newcommand' ] ) ) ;
786+ it ( 'Let def macro be undefined' , ( ) =>
787+ toXmlMatch (
788+ tex2mml ( '\\def\\test{error} \\let\\test=\\undefined \\test' ) ,
789+ `<math xmlns="http://www.w3.org/1998/Math/MathML" data-latex="\\def\\test{error} \\let\\test=\\undefined \\test" display="block">
790+ <merror data-mjx-error="Undefined control sequence \\test">
791+ <mtext>Undefined control sequence \\test</mtext>
792+ </merror>
793+ </math>`
794+ ) ) ;
795+ it ( 'Let existing macro be undefined' , ( ) =>
796+ toXmlMatch (
797+ tex2mml ( '\\let\\sqrt=\\undefined \\sqrt{x}' ) ,
798+ `<math xmlns="http://www.w3.org/1998/Math/MathML" data-latex="\\let\\sqrt=\\undefined \\sqrt{x}" display="block">
799+ <merror data-mjx-error="Undefined control sequence \\sqrt">
800+ <mtext>Undefined control sequence \\sqrt</mtext>
801+ </merror>
802+ </math>`
803+ ) ) ;
804+ it ( 'Let existing delimiter be undefined' , ( ) =>
805+ toXmlMatch (
806+ tex2mml ( '\\let\\|=\\undefined \\left\\| X \\right\\|' ) ,
807+ `<math xmlns="http://www.w3.org/1998/Math/MathML" data-latex="\\let\\|=\\undefined \\left\\| X \\right\\|" display="block">
808+ <merror data-mjx-error="Missing or unrecognized delimiter for \\left">
809+ <mtext>Missing or unrecognized delimiter for \\left</mtext>
810+ </merror>
811+ </math>`
812+ ) ) ;
813+ it ( 'Let after def of existing macro be undefined' , ( ) =>
814+ toXmlMatch (
815+ tex2mml ( '\\def\\sqrt{X} \\let\\sqrt=\\undefined \\sqrt{x}' ) ,
816+ `<math xmlns="http://www.w3.org/1998/Math/MathML" data-latex="\\def\\sqrt{X} \\let\\sqrt=\\undefined \\sqrt{x}" display="block">
817+ <merror data-mjx-error="Undefined control sequence \\sqrt">
818+ <mtext>Undefined control sequence \\sqrt</mtext>
819+ </merror>
820+ </math>`
821+ ) ) ;
822+ it ( 'Def overrides let delimiter' , ( ) =>
823+ toXmlMatch (
824+ tex2mml ( '\\let\\test=\\| \\def\\test{x} \\left\\test X \\right\\test' ) ,
825+ `<math xmlns="http://www.w3.org/1998/Math/MathML" data-latex="\\let\\test=\\| \\def\\test{x} \\left\\test X \\right\\test" display="block">
826+ <merror data-mjx-error="Missing or unrecognized delimiter for \\left">
827+ <mtext>Missing or unrecognized delimiter for \\left</mtext>
828+ </merror>
829+ </math>`
830+ ) ) ;
831+ it ( 'Def overrides let delimiter as macro' , ( ) =>
832+ toXmlMatch (
833+ tex2mml ( '\\let\\test=\\| \\def\\test{x} \\test' ) ,
834+ `<math xmlns="http://www.w3.org/1998/Math/MathML" data-latex="\\let\\test=\\| \\def\\test{x} \\test" display="block">
835+ <mi data-latex="x">x</mi>
836+ </math>`
837+ ) ) ;
838+ it ( 'Def overrides existing delimiter' , ( ) =>
839+ toXmlMatch (
840+ tex2mml ( '\\def\\|{x} \\left\\| X \\right\\|' ) ,
841+ `<math xmlns="http://www.w3.org/1998/Math/MathML" data-latex="\\def\\|{x} \\left\\| X \\right\\|" display="block">
842+ <merror data-mjx-error="Missing or unrecognized delimiter for \\left">
843+ <mtext>Missing or unrecognized delimiter for \\left</mtext>
844+ </merror>
845+ </math>`
846+ ) ) ;
847+ it ( 'Def overrides existing delimiter as macro' , ( ) =>
848+ toXmlMatch (
849+ tex2mml ( '\\def\\|{x} \\|' ) ,
850+ `<math xmlns="http://www.w3.org/1998/Math/MathML" data-latex="\\def\\|{x} \\|" display="block">
851+ <mi data-latex="x">x</mi>
852+ </math>`
853+ ) ) ;
854+ it ( 'Let overrides def macro' , ( ) =>
855+ toXmlMatch (
856+ tex2mml ( '\\def\\test{x} \\let\\test=\\| \\test X \\test' ) ,
857+ `<math xmlns="http://www.w3.org/1998/Math/MathML" data-latex="\\def\\test{x} \\let\\test=\\| \\test X \\test" display="block">
858+ <mo data-mjx-texclass="ORD" fence="false" stretchy="false" data-latex="\\test">‖</mo>
859+ <mi data-latex="X">X</mi>
860+ <mo data-mjx-texclass="ORD" fence="false" stretchy="false" data-latex="\\test">‖</mo>
861+ </math>`
862+ ) ) ;
863+ it ( 'Let overrides def macro as delimiter' , ( ) =>
864+ toXmlMatch (
865+ tex2mml ( '\\def\\test{x} \\let\\test=\\| \\left\\test X \\right\\test' ) ,
866+ `<math xmlns="http://www.w3.org/1998/Math/MathML" data-latex="\\def\\test{x} \\let\\test=\\| \\left\\test X \\right\\test" display="block">
867+ <mrow data-mjx-texclass="INNER" data-latex-item="\\left\\test X \\right\\test" data-latex="\\def\\test{x} \\let\\test=\\| \\left\\test X \\right\\test">
868+ <mo data-mjx-texclass="OPEN" symmetric="true" data-latex-item="\\left\\test " data-latex="\\left\\test ">‖</mo>
869+ <mi data-latex="X">X</mi>
870+ <mo data-mjx-texclass="CLOSE" symmetric="true" data-latex-item="\\right\\test" data-latex="\\right\\test">‖</mo>
871+ </mrow>
872+ </math>`
873+ ) ) ;
874+ it ( 'Let overrides existing macro' , ( ) =>
875+ toXmlMatch (
876+ tex2mml ( '\\let\\sqrt=\\| \\sqrt X' ) ,
877+ `<math xmlns="http://www.w3.org/1998/Math/MathML" data-latex="\\let\\sqrt=\\| \\sqrt X" display="block">
878+ <mo data-mjx-texclass="ORD" fence="false" stretchy="false" data-latex="\\sqrt">‖</mo>
879+ <mi data-latex="X">X</mi>
880+ </math>`
881+ ) ) ;
882+ it ( 'Let overrides existing macro as delimiter' , ( ) =>
883+ toXmlMatch (
884+ tex2mml ( '\\let\\sqrt=\\| \\left\\sqrt X \\right\\sqrt' ) ,
885+ `<math xmlns="http://www.w3.org/1998/Math/MathML" data-latex="\\let\\sqrt=\\| \\left\\sqrt X \\right\\sqrt" display="block">
886+ <mrow data-mjx-texclass="INNER" data-latex-item="\\left\\sqrt X \\right\\sqrt" data-latex="\\let\\sqrt=\\| \\left\\sqrt X \\right\\sqrt">
887+ <mo data-mjx-texclass="OPEN" symmetric="true" data-latex-item="\\left\\sqrt " data-latex="\\left\\sqrt ">‖</mo>
888+ <mi data-latex="X">X</mi>
889+ <mo data-mjx-texclass="CLOSE" symmetric="true" data-latex-item="\\right\\sqrt" data-latex="\\right\\sqrt">‖</mo>
890+ </mrow>
891+ </math>`
892+ ) ) ;
893+ it ( 'Let overrides delimiter' , ( ) =>
894+ toXmlMatch (
895+ tex2mml ( '\\let\\|=\\sqrt \\left\\| X \\right\\|' ) ,
896+ `<math xmlns="http://www.w3.org/1998/Math/MathML" data-latex="\\let\\|=\\sqrt \\left\\| X \\right\\|" display="block">
897+ <merror data-mjx-error="Missing or unrecognized delimiter for \\left">
898+ <mtext>Missing or unrecognized delimiter for \\left</mtext>
899+ </merror>
900+ </math>`
901+ ) ) ;
902+ it ( 'Let overrides delimiter as macro' , ( ) =>
903+ toXmlMatch (
904+ tex2mml ( '\\let\\|=\\sqrt \\| X' ) ,
905+ `<math xmlns="http://www.w3.org/1998/Math/MathML" data-latex="\\let\\|=\\sqrt \\| X" display="block">
906+ <msqrt data-latex="\\let\\|=\\sqrt \\| X">
907+ <mi data-latex="X">X</mi>
908+ </msqrt>
909+ </math>`
910+ ) ) ;
911+ it ( 'Let of character macro overrides delimiter' , ( ) =>
912+ toXmlMatch (
913+ tex2mml ( '\\let\\|=\\alpha \\left\\| X \\right\\|' ) ,
914+ `<math xmlns="http://www.w3.org/1998/Math/MathML" data-latex="\\let\\|=\\alpha \\left\\| X \\right\\|" display="block">
915+ <merror data-mjx-error="Missing or unrecognized delimiter for \\left">
916+ <mtext>Missing or unrecognized delimiter for \\left</mtext>
917+ </merror>
918+ </math>`
919+ ) ) ;
920+ it ( 'Let of character creates delimiter' , ( ) =>
921+ toXmlMatch (
922+ tex2mml ( '\\let\\test=< \\left\\test X \\right\\test' ) ,
923+ `<math xmlns="http://www.w3.org/1998/Math/MathML" data-latex="\\let\\test=< \\left\\test X \\right\\test" display="block">
924+ <mrow data-mjx-texclass="INNER" data-latex-item="\\left\\test X \\right\\test" data-latex="\\let\\test=< \\left\\test X \\right\\test">
925+ <mo data-mjx-texclass="OPEN" data-latex-item="\\left\\test " data-latex="\\left\\test ">⟨</mo>
926+ <mi data-latex="X">X</mi>
927+ <mo data-mjx-texclass="CLOSE" data-latex-item="\\right\\test" data-latex="\\right\\test">⟨</mo>
928+ </mrow>
929+ </math>`
930+ ) ) ;
931+ it ( 'Let of character overrides def' , ( ) =>
932+ toXmlMatch (
933+ tex2mml ( '\\def\\test{X}\\let\\test=< \\test' ) ,
934+ `<math xmlns="http://www.w3.org/1998/Math/MathML" data-latex="\\def\\test{X}\\let\\test=< \\test" display="block">
935+ <mo fence="false" stretchy="false" data-latex="\\def\\test{X}\\let\\test=< \\test">⟨</mo>
936+ </math>`
937+ ) ) ;
938+ } ) ;
939+
784940afterAll ( ( ) => getTokens ( 'newcommand' ) ) ;
0 commit comments