From 53919860065377b6d27550319b476186d313280e Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Mon, 18 Aug 2014 13:46:43 -0400 Subject: [PATCH] Allow \newenvironment to provide an optional argument. Issue #881 --- unpacked/extensions/TeX/newcommand.js | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/unpacked/extensions/TeX/newcommand.js b/unpacked/extensions/TeX/newcommand.js index a86ee7d77..bbc66e2e4 100644 --- a/unpacked/extensions/TeX/newcommand.js +++ b/unpacked/extensions/TeX/newcommand.js @@ -48,7 +48,7 @@ MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () { TEX.Parse.Augment({ /* - * Implement \newcommand{\name}[n]{...} + * Implement \newcommand{\name}[n][default]{...} */ NewCommand: function (name) { var cs = this.trimSpaces(this.GetArgument(name)), @@ -76,6 +76,7 @@ MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () { NewEnvironment: function (name) { var env = this.trimSpaces(this.GetArgument(name)), n = this.GetBrackets(name), + opt = this.GetBrackets(name), bdef = this.GetArgument(name), edef = this.GetArgument(name); if (n) { @@ -85,7 +86,7 @@ MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () { "Illegal number of parameters specified in %1",name]); } } - this.setEnv(env,['BeginEnv',[null,'EndEnv'],bdef,edef,n]); + this.setEnv(env,['BeginEnv',[null,'EndEnv'],bdef,edef,n,opt]); }, /* @@ -203,10 +204,14 @@ MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () { /* * Process a user-defined environment */ - BeginEnv: function (begin,bdef,edef,n) { + BeginEnv: function (begin,bdef,edef,n,def) { if (n) { var args = []; - for (var i = 0; i < n; i++) {args.push(this.GetArgument("\\begin{"+name+"}"))} + if (def != null) { + var optional = this.GetBrackets("\\begin{"+name+"}"); + args.push(optional == null ? def : optional); + } + for (var i = args.length; i < n; i++) {args.push(this.GetArgument("\\begin{"+name+"}"))} bdef = this.SubstituteArgs(args,bdef); edef = this.SubstituteArgs([],edef); // no args, but get errors for #n in edef }