Berechnung x-facher Zeilenabstände in Microsoft Word

Die Berechnung der x-fachen (mehrfachen) Zeilenabstände in Microsoft Word entpuppt sich als Herausforderung: Ich wollte eine Microsoft-Word-Vorlage erstellen, die Flexibilität in der Schriftgröße ermöglicht. Das Layout gab PT Serif Regular 10pt/15pt vor. Word bietet die Möglichkeit, Zeilenabstände sowohl fest (»genau«) als auch flexibel (»Einfach« usw. bis »Mehrfach«) einzugeben.

Falsche Grundannahme

Man möchte annehmen, dass in Microsoft Word ein 1-facher Zeilenabstand bei einer 10-pt-Schrift genau 10 pt entspricht und ich demzufolge 10pt/1,5-fach einstellen müsste, um meiner Layout-Vorgabe folgend genau 15pt Zeilenabstand (ZAB) zu erhalten.

Dem! ist! nicht! so!

Nach kurzen Tests war klar: Word benutzt zur Berechnung des flexiblen Zeilenabstands bestimmte metrische Font-Attribute und die Schriftgröße. Das bedeutet: 1-facher Zeilenabstand ist je nach gewählter Schrift und Schriftgröße ein anderer absoluter Wert. Aber welche Werte werden zur Berechnung benutzt?

Internetsuche

Die Suche im Internet bestätigte zunächst mein vages Ergebnis recht amüsant (»defaults somewhere a little south of«):

Antwort von Eric Life-Putnam auf: How does Microsoft Word calculate the amount of line spacing?
Quelle: https://www.quora.com/How-does-Microsoft-Word-calculate-the-amount-of-line-spacing (abgerufen am 21.08.2017)

Und brachte mich anschließend auf diese wundervolle Aussage eines Microsoft-Mitarbeiters:

Jede Office-Anwendung kalkuliert also den x-fachen Zeilenabstand anders. Und jede Version ein jeder Office-Anwendung eventuell ebenfalls.

So geht’s … zumindest in meiner Anwendungsumgebung

Nach weiterem Testen und Tüfteln habe ich diese Formel aufgestellt, die bisher in meiner Anwendungsumgebung (MS Word 2010 für Windows, Version 14.0.7184.5000) präzise Ergebnisse liefert:

                      Fontsize [pt] * ( WinAscent + | WinDescent | )
1-fach-ZAB [pt]  =  --------------------------------------------------
                                           UPM

WinAscent und WinDescent stammen aus der OS/2-Tabelle eines Fonts (os2.usWinAscent, os2.usWinDescent: https://www.microsoft.com/typography/otspec/os2.htm#wa).
UPM (Units per EM, Einheiten pro Geviert) stammt aus der HEAD-Tabelle (head.unitsPerEm: https://www.microsoft.com/typography/otspec/head.htm).

Wollen wir also für einen Font bei vorgegebener Schriftgröße und festem Zeilenabstand den Wert berechnen, den wir in das Feld »Mehrfach« in Word eintragen müssen, hilft uns diese Formel (eine Kombination der oben dargestellten mit simplem Dreisatz):

                               ZAB [pt] * UPM
x[-fach]  =  --------------------------------------------------
               Fontsize [pt] * ( WinAscent + | WinDescent | )

Ein Beispiel:

Die PT Serif Regular hat folgende Font-Metriken:

head.unitsPerEm = 1000
os2.usWinAscent = 1039
os2.usWinDescent = -286

Bei gewünschten 10pt/15pt ergibt sich:

                       15 * 1000
x[-fach]  =  ----------------------------  =  1,132-facher Zeilenabstand in Word
               10 * ( 1039 + | -286 | )

Und siehe da: Es passt.