The script does appear to be doubling up... did you try the following?
Set Field [Substitute ( Get(ActiveFieldContents) ;
["sp." ; TextStyleAdd ( "sp." ; Plain)];
["spp." ; TextStyleAdd ("spp." ; Plain)];
["cf." ; TextStyleAdd ( "cf." ; Plain)];
["aff." ; TextStyleAdd ( "aff." ; Plain)])]
.... or similar to the above, but using ["sp." ; TextStyleRemove ("sp." ; AllStyles)] etc.?
Thanks for the feedback. Yes, tried this but it did not have any impact. Strange when you consider that replacing the formatting with Bold first and then with Plain works! Also tried AllStyles and the TextStyleRemove options. I was wondering if it was some sort of bug to do with formatting the whole field and then trying to reformat just one word.
Interestingly, I also tried reversing the process by formatting each of the words with Plain formatting and then formatting the whole field in Italic, just in case (by some weird logic) this worked. But it worked exactly as it should and formatted the whole field in Italics.
In desperation, I rebooted the machine and retried the TextStyleAdd function with just the Plain formatting option - IT WORKED! TextStyleRemove does still not work as it should and I am not sure why I had the initial problem. But, who cares! (Until it resurfaces.)