I would declare and open the cursor before the BEGIN TRY
and then close and deallocate it after the END CATCH
to minimize the amount of time you're spending in the transaction. This also means you don't need to write the close/deallocate statements twice.
My second choice would be to declare and open the cursor inside the BEGIN TRANSACTION
and then close and deallocate before the ROLLBACK
. I'm sure others will prefer this style.
These ways the cursor is either entirely outside the try/catch and transaction or entirely contained within them. Doing it otherwise feels like crossing scopes to me, but would certainly still work. I think this question is mainly an issue of style