Chord Symbol Accidental Positioning Walkthrough

So positioning options for Chord Symbol Accidentals and Chord Symbol Suffix Accidentals has always been high on my wishlist, probably since the first week I started using Dorico. Unfortunately I don’t think they look balanced correctly with basically any text font other than Academico. There are actually 2 different sized glyphs for suffix accidentals, so for sharps these are called comp.csymAccidentalSharp and comp.csymAccidentalSharpSmall. The small glyph is used for scaling factors of 75% and lower and the larger glyph for 76% and up. The small one is too small to be used professionally due to legibility issues IMO, but here it is with all the default settings:

Once I switch to 76% to invoke the larger glyph, and switch to literally any font other than Academico, the positioning is poor. Here’s 76% and Times:

The suffix sharp and the number are poorly positioned both in relation to each other, but also within the parentheses. Additionally, I’ve never been happy with the root accidentals either. They share a physical baseline with the root, rather than an optical one, so seem slightly out of balance to me. There aren’t any user settings to adjust these either.

Ever since @benwiggy alerted me to the power of using doricolib files instead of modifying factory files, I had wondered if there was a way to accomplish some chord symbol accidental modifications without using Dorico’s painful method of having to modify each suffix for each root. It took a lot of poking around, but it turns out there is!

As Daniel has said many times, any editing of Dorico system files is unsupported and not recommended, but editing doricolib files seems a bit safer to me as all the system files remain intact. The system files are also overwritten with any update, but your user doricolib files will not be. The user doricolib files should live at C:\Users<your name here>\AppData\Roaming\Steinberg\Dorico 4\DefaultLibraryAdditions in Windows.

  1. To fix the root accidental baseline positioning, paste the following under compositeDefinitions. The yOffset value modifies the vertical positioning so you may want to play around with it to find a setting that works well with your default font.
Root Accidental compositeDefinitions

			<CompositeDefinition>
				<name>csymAccidentalFlat</name>
				<entityID>comp.csymAccidentalFlat</entityID>
				<parentEntityID/>
				<inheritanceMask>0</inheritanceMask>
				<category>kChordSymbols</category>
				<components array="true">
					<component>
						<componentId>glyph.csymAccidentalFlat</componentId>
						<componentType>kGlyph</componentType>
						<xOffset>0</xOffset>
						<yOffset>0.25</yOffset>
						<xScale>100.000000</xScale>
						<yScale>100.000000</yScale>
						<zOrder>0</zOrder>
						<maxOpticalScale>100</maxOpticalScale>
						<componentInstance>0</componentInstance>
						<colour>kDefault</colour>
					</component>
				</components>
				<relativeAttachments array="true"/>
				<scalingRules array="true"/>
			</CompositeDefinition>
			<CompositeDefinition>
				<name>csymAccidentalSharp</name>
				<entityID>comp.csymAccidentalSharp</entityID>
				<parentEntityID/>
				<inheritanceMask>0</inheritanceMask>
				<category>kChordSymbols</category>
				<components array="true">
					<component>
						<componentId>glyph.csymAccidentalSharp</componentId>
						<componentType>kGlyph</componentType>
						<xOffset>0</xOffset>
						<yOffset>0.5</yOffset>
						<xScale>100.000000</xScale>
						<yScale>100.000000</yScale>
						<zOrder>0</zOrder>
						<maxOpticalScale>100</maxOpticalScale>
						<componentInstance>0</componentInstance>
						<colour>kDefault</colour>
					</component>
				</components>
				<relativeAttachments array="true"/>
				<scalingRules array="true"/>
			</CompositeDefinition>

After that the root accidentals seem more balanced to me, but the suffix accidentals are still off:

  1. To fix the suffix accidentals, you’ll need to do it for each suffix you use, although they obviously follow a pattern. Here’s the code for a #5 that works for me. You’ll likely need to modify both xOffset and yOffset values to find something that works with your font.
#5 Suffix Adjustment
			<CompositeDefinition>
				<name>smufl.glyph.alteration.prefix.sharp5</name>
				<entityID>comp.csac.smufl.glyph.alteration.prefix.sharp.5</entityID>
				<parentEntityID/>
				<inheritanceMask>0</inheritanceMask>
				<category>kChordSymbols</category>
				<components array="true">
					<component>
						<componentId>glyph.csac.smufl.glyph.alteration.prefix.sharp</componentId>
						<componentType>kGlyph</componentType>
						<xOffset>0</xOffset>
						<yOffset>0.7</yOffset>
						<xScale>100.000000</xScale>
						<yScale>100.000000</yScale>
						<zOrder>0</zOrder>
						<maxOpticalScale>100</maxOpticalScale>
						<componentInstance>0</componentInstance>
						<colour>kDefault</colour>
					</component>
					<component>
						<componentId>text.csac.5</componentId>
						<componentType>kText</componentType>
						<xOffset>0</xOffset>
						<yOffset>0</yOffset>
						<xScale>100.000000</xScale>
						<yScale>100.000000</yScale>
						<zOrder>1</zOrder>
						<maxOpticalScale>100</maxOpticalScale>
						<componentInstance>0</componentInstance>
						<colour>kDefault</colour>
					</component>
				</components>
				<relativeAttachments array="true">
					<relativeAttachment>
						<xOffset>0.5</xOffset>
						<yOffset>-0.4</yOffset>
						<componentRelativePair1>
							<componentInstanceId>glyph.csac.smufl.glyph.alteration.prefix.sharp.0</componentInstanceId>
							<componentAttachmentPoint>kBaselineRight</componentAttachmentPoint>
						</componentRelativePair1>
						<componentRelativePair2>
							<componentInstanceId>text.csac.5.0</componentInstanceId>
							<componentAttachmentPoint>kBaselineLeft</componentAttachmentPoint>
						</componentRelativePair2>
					</relativeAttachment>
				</relativeAttachments>
				<scalingRules array="true"/>
			</CompositeDefinition>

It takes some playing around with settings, but you can do similarly for other suffixes, so I can end up with something more balanced like this:

The entire list of editable “composites” is in the composites.xml file in the main program folder, but I would not recommend editing that. In any case, it is possible to make suffix positioning adjustments using a doricolib file instead of tediously modifying every alteration for every root in Project Default Appearances. My previous “working default” file had hundreds of chord overrides that took hours and hours to do, while modifications done in a doricolib file can be done in just minutes and work for every root.

7 Likes

Thank you so much for your highly skilled, thorough and nicely put contributions to this forum. I must say it’s always a great pleasure to read you (or listen to what you post, when it’s audio). :pray::pray::pray:

For mac users, the path to the doricolib file is /Users/YourNameHere/Library/Application Support/Steinberg/Dorico 4

I must admit there’s no doricolib file there that I could tweak to get where you show us here, probably because I never created any change to the way chord symbols are displayed on my system, as this is not a feature I use extensively in my work., The only files I have there are my different libraries’ expression maps (so that I don’t have to load them in a new project when I need them, they’re already available in every project). What’s the exact name of the file you’re modifying?

In any case, this information you’re sharing is gold (especially when you read the last line ! time is money and hundreds of tweaks is certainly something we want to avoid !)

3 Likes

Thanks Marc!

Here’s an “empty” doricolib file that can be tweaked. I think there are a lot of potential possibilities with user customization here!
EmptyLibrary.zip (687 Bytes)

1 Like

As I’m experimenting with this a bit more, I just wanted to mention a few other advantages to this method. Previously using Dorico’s method, I would have to make 21 edits for every chord symbol suffix that I wanted to modify as I would make suffixes for 7 roots times 3 for natural, flat, and sharp. I ignored double flats and sharps in my default as they occur so infrequently in chord symbols, but that’s 21 times the work of editing a single suffix. But it’s actually even more useful than that, as it will change everywhere this composite suffix occurs. Once I’ve changed the definition of #5 for example, it will be changed it 7(#5) chords as well as 9(#5) so previously that was 42x the amount of editing work just for those 2 suffixes.

It also is basically impossible to edit stacked suffixes using Project Default Appearances, due to the fact that the editing window is slightly buggy and not WYSIWYG. I had simply given up and just dealt with the minor visual inconsistency. Using the doricolib method, these are all corrected!

Unfortunately, Dorico doesn’t have any sort of baseline settings for stacked alterations so I get the chord on the left by default. It’s not too hard to edit it manually to get the chord on the right, or to use Save as Default in Project Default Appearances to save it in your userlibrary.xml. I haven’t quite figured out if this can be done globally in the doricolib file, so if anyone else figures out a way to do it, please let me know.

2 Likes