Clever way to create a dynamic pop vs. classical title.
Here's a little cleanup, formatted for readability (which you can enter into the Expression Editor):
if(isempty([Composition]),
mid(/ / , length([track #]), -1)[track #] - [Name] /([Artist] - [Album]/),
Delimit([Composer], /,/ )/
Delimit([Composition], / -/ )/
Delimit(
if(compare([Movement], >, 12),
[Movement],
listitem(/;Ⅰ;Ⅱ;Ⅲ;Ⅳ;Ⅴ;Ⅵ;Ⅶ;Ⅷ;Ⅸ;Ⅹ;Ⅺ;Ⅻ, [Movement], ;)
),
./ )
)
There's no need to use Delimit() unless you're trying to omit the output when the first parameter is empty. Instead, just combine fields and strings as I've done in the second line.
If you need to join a bunch of data with a common separator, omitting empty values, use ListBuild(). That might come in handy when you're building your [Composer], [Composition], [Opus #] since they are all separated by comma: eg. ListBuild(1, /,, [Composer], [Composition], [Opus #]).
It would be great if you can include a screenshot showing the output of various titles so others can quickly see how your formatting works.