First, escape sequences are not supported in the Jack grammar. You need to use Output.println() to display a newline.
There is a trick that lets you avoid using a temporary variable.
Go back to
this post (where you caught my missing "constant" typos)
Because the String.new() constructor returns the 'this' for the new string on the stack, if you
do not pop temp 0, the 'this' will be in the correct place to be the first argument to the String.append() call.
Because String.append() returns the 'this' that was passed to it, it can be repeatedly called without popping the return value or pushing 'this'.
Basically, this code just eliminates pairs of pop/push instructions that are popping a value off the stack and pushing the identical value back onto the stack. Here's the code with those pops and pushes:
push 3
call String.new 1
pop temp 1 // temp 1 = string constant 'this'
push temp 1 // push 'this'
push constant 97
call String.append 1
pop temp 0 // throw away returned 'this'
...
push temp 1 // push 'this'
push constant 98
call String.append 1
pop temp 0 // throw away returned 'this'
push temp 1 // push 'this'
call Output.printString 1
--Mark