First, remember that no all errors can be trapped in in a TRY/CATCH setup.
Code your trigger to use TRY/CATCH. For the errors that can be caught, capture the error information to either a set of variables or a table variable. Then issue a rollback for the transaction. After the rollback and still in the trigger, write the information from the variables or table variable to your error table, then return from the trigger.
Hope this helps.