@@ -257,18 +257,20 @@ const NewcommandMethods: { [key: string]: ParseMethod } = {
257257 if ( begin . getProperty ( 'end' ) && parser . stack . env [ 'closing' ] === name ) {
258258 // @test Newenvironment Empty, Newenvironment Content
259259 delete parser . stack . env [ 'closing' ] ;
260- if ( edef && parser . stack . env [ 'processing' ] !== name ) {
261- // Parse the commands in the end environment definition, and do the \end again
262- parser . stack . env [ 'processing' ] = name ;
263- parser . string = ParseUtil . addArgs (
264- parser ,
265- `${ edef } \\end{${ begin . getName ( ) } }` ,
266- parser . string . slice ( parser . i )
267- ) ;
268- parser . i = 0 ;
269- return null ;
260+ const beginN = parser . stack . global [ 'beginEnv' ] as number ;
261+ if ( beginN ) {
262+ ( parser . stack . global [ 'beginEnv' ] as number ) -- ;
263+ if ( edef ) {
264+ // Parse the commands in the end environment definition.
265+ let rest = parser . string . slice ( parser . i ) ;
266+ parser . string = edef ;
267+ parser . i = 0 ;
268+ parser . Parse ( ) ;
269+ // Reset to parsing the remainder of the expression.
270+ parser . string = rest ;
271+ parser . i = 0 ;
272+ }
270273 }
271- delete parser . stack . env [ 'processing' ] ;
272274 // Close this environment.
273275 return parser . itemFactory . create ( 'end' ) . setProperty ( 'name' , name ) ;
274276 }
@@ -277,12 +279,12 @@ const NewcommandMethods: { [key: string]: ParseMethod } = {
277279 const args : string [ ] = [ ] ;
278280 if ( def != null ) {
279281 // @test Newenvironment Optional, Newenvironment Arg Optional
280- const optional = parser . GetBrackets ( ' \\begin{' + begin . getName ( ) + '}' ) ;
282+ const optional = parser . GetBrackets ( ` \\begin{${ name } }` ) ;
281283 args . push ( optional == null ? def : optional ) ;
282284 }
283285 for ( let i = args . length ; i < n ; i ++ ) {
284286 // @test Newenvironment Arg Optional
285- args . push ( parser . GetArgument ( ' \\begin{' + begin . getName ( ) + '}' ) ) ;
287+ args . push ( parser . GetArgument ( ` \\begin{${ name } }` ) ) ;
286288 }
287289 bdef = ParseUtil . substituteArgs ( parser , args , bdef ) ;
288290 edef = ParseUtil . substituteArgs ( parser , [ ] , edef ) ; // no args, but get errors for #n in edef
@@ -293,9 +295,10 @@ const NewcommandMethods: { [key: string]: ParseMethod } = {
293295 parser . string . slice ( parser . i )
294296 ) ;
295297 parser . i = 0 ;
298+ parser . stack . global [ 'beginEnv' ] = ( parser . stack . global [ 'beginEnv' ] as number || 0 ) + 1 ;
296299 return parser . itemFactory
297300 . create ( 'beginEnv' )
298- . setProperty ( 'name' , begin . getName ( ) ) ;
301+ . setProperty ( 'name' , name ) ;
299302 } ,
300303
301304 Macro : BaseMethods . Macro ,
0 commit comments