[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Per Skript Schriftparameter auslesen und an die Zwischenablage übergeben

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

Per Skript Schriftparameter auslesen und an die Zwischenablage übergeben

Pomeranz
Beiträge gesamt: 23

2. Feb 2025, 22:57
Beitrag # 1 von 8
Bewertung:
(17853 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Sehr geehrte Damen und Herren,

in einer Excel-Tabelle trage ich Schriftnamen, Schriftgröße, Versalhöhe, Ober- und Unterlänge* ein. Die Werte beziehen sich auf eine Mittellänge von 500 Punkt. Hierzu nutze ich das am Ende meines Posts angehängte Skript**, das ich in vier Varianten*** angelegt habe:

­• x-hoehe.jsx (gemessen wird die optische Höhe des Minuskel-x),
­• versalhoehe.jsx (gemessen wird die optische Höhe des Versal-H),
• oberlaenge.jsx (gemessen wird die optische Höhe des Minuskel-f) und
• unterlaenge.jsx (gemessen wird die optische Höhe des Minuskel y).

Meine bisherige Vorgehensweise ist folgende:

(1) Ich markiere das Feld »Schriftname« im InDesign-Steuerungsbedienfeld »Zeichensätze«; ich tippe Strg+C; ich wechsle zur Excel-Tabelle; ich tippe Strg+V.
(2) Ich rufe das Skript x-hoehe.jsx auf und gebe in die Abfragemaske den Wert 500 ein; das Skript setzt die Schrift auf eine x-Höhe von 500 Punkt.
(3) Ich markiere das Feld »Schriftgröße« im InDesign-Steuerungsbedienfeld »Zeichensätze«; ich tippe Strg+C; ich wechsle zur Excel-Tabelle; ich tippe Strg+V.
(4) Ich führe das Skript versalhoehe.jsx aus (ohne die Schriftgröße zu verändern); ich kopiere den Wert aus dem Dialogfeld des Skripts; ich wechsle zur Excel-Tabelle; ich tippe Strg+V.
(5) Ich führe das Skript oberlaenge.jsx aus (ohne die Schriftgröße zu verändern); ich kopiere den Wert aus dem Dialogfeld des Skripts; ich wechsle zur Excel-Tabelle; ich tippe Strg+V.
(6) Ich führe das Skript unterlaenge.jsx aus (ohne die Schriftgröße zu verändern); ich kopiere den Wert aus dem Dialogfeld des Skripts; ich wechsle zur Excel-Tabelle; ich tippe Strg+V.

Diese Schritte müssten sich doch durch Erweiterung des Skripts in einem Durchgang erledigen lassen:

(1) Ich rufe das Skript auf; das Skript …
(a) ermittelt den Schriftnamen,
(b) setzt die optische x-Höhe auf 500 Punkt,
(c) ermittelt die Schriftgröße,
(d) ermittelt die optische Höhe des Versal-H,
(e) ermittelt die optische Höhe des Minuskel-f,
(f) ermittelt die optische Höhe des Minuskel-y und
(g) gibt die Werte tabulatorgetrennt in folgender Reihenfolge an die Zwischenablage weiter
- Schriftname,
- Schriftgröße,
- Versalhöhe,
- Oberlänge,
- Unterlänge.
(2) Ich wechsle zur Excel-Tabelle; ich tippe Strg+V.

* Der ermittelte Wert ist die Summe von Mittellänge und Unterlänge; die reine Unterlänge errechnet Excel durch Subtraktion des Wertes 500 (= x-Höhe).
** Die Herkunft des Skripts kann ich leider nicht angeben. Ich hoffe, es ist in Ordnung, dass ich es hier poste. In meinem Hinterkopf ist das Skript mit dem Namen des auch hier agierenden Herrn Singelmann verknüpft. Ich konnte diese Annahme allerdings weder auf seiner Cuppa-Seite noch hier bei HDS bestätigt finden.
*** Die Varianten unterscheiden sich dahingehen, dass in der siebtletzten Zeile des Skripts [[aStory.insertionPoints[anIX+1].contents = "x";;]] statt des x ein H, f bzw. y steht.

Leider kann ich gar nicht programmieren. Deshalb wende ich mich an die HDS-Gemeinschaft mit der Bitte, ob das jemand für mich tun könnte?

Freundlicher Gruß
Thomas

Skript:

Code
if (app.documents.length != 0){ 
if (app.selection.length >0){
var s = app.selection[0].constructor.name;
switch (app.selection[0].constructor.name){
case "Text":
case "InsertionPoint":
case "Character":
case "Word":
case "Line":
case "TextStyleRange":
case "TextColumn":
case "Paragraph":
main(false);
break;
case "TextFrame":
var aSel = app.selection;
var myHeight = false;
for (var n = 0; n < aSel.length; n++) {
if (aSel[n].constructor.name == "TextFrame") {
app.select(aSel[n].texts);
myHeight = main(myHeight);
}
}
break;
default:
alert("Es ist kein Text markiert.");
break;
}
}
else{
alert("Es ist nichts markiert.");
}
}
else{
alert("Es ist kein Dokument offen.");
}

function main(myHeight) {
var prevHUnits =
app.activeDocument.viewPreferences.horizontalMeasurementUnits;
app.activeDocument.viewPreferences.horizontalMeasurementUnits =
MeasurementUnits.points;
var prevVUnits =
app.activeDocument.viewPreferences.verticalMeasurementUnits;
app.activeDocument.viewPreferences.verticalMeasurementUnits =
MeasurementUnits.points;

var aStory = app.selection[0].parentStory;
var tRanges = app.selection[0].textStyleRanges;
if (myHeight == false) {
var aSize = app.selection[0].pointSize / getRel(aStory,
app.selection[0].index);
var myDialog = app.dialogs.add({name:"x-Höhe eingeben"});
with(myDialog.dialogColumns.add()){
var vHeightField = measurementEditboxes.add({editValue: aSize,
editUnits:MeasurementUnits.points, smallNudge:0.5});
}
var myResult = myDialog.show();
if(myResult == true){
var vHeight = vHeightField.editValue;
myDialog.destroy();
}
else{
var vHeight = false;
myDialog.destroy();
}
} else {
// Damit kann main() der gewünschte wert übergeben werden und muss nicht
mehr abgefragt werden.
var vHeight = myHeight;
}

if (vHeight != false) {
for (var n = 0; n < tRanges.length; n++) {
var aRel = getRel(aStory, tRanges[n].index);
tRanges[n].pointSize = vHeight * aRel;
}
}
app.activeDocument.viewPreferences.horizontalMeasurementUnits = prevHUnits;
app.activeDocument.viewPreferences.verticalMeasurementUnits = prevVUnits;
return vHeight;
}

function getRel(aStory, anIX) {
aStory.insertionPoints[anIX+1].contents = "x";;
var aChar = aStory.characters[anIX+1];
var aSize = aChar.pointSize;
var aPath = aChar.createOutlines();
var bSize = aPath[0].geometricBounds[2]-aPath[0].geometricBounds[0];
aPath[0].remove();
return aSize / bSize;
}

X

Per Skript Schriftparameter auslesen und an die Zwischenablage übergeben

Gerald Singelmann
  
Beiträge gesamt: 6290

3. Feb 2025, 09:24
Beitrag # 2 von 8
Beitrag ID: #589372
Bewertung:
(17389 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Lustige Anforderung und ein guter Wochenstart :)

Ich habe das jetzt mal so umgesetzt, dass das Script davon ausgeht, dass in einem Textrahmen pro Zeile ein zu untersuchender Font angewendet ist, die Fonts alle ausgemessen werden und dann das Ergebnis in der Zwischenablage landet.

Ausgangssituation ist, dass mindestens ein Zeichen im Textrahmen markiert sein muss.

Code
main(); 

function main() {
var s = app.selection
if ( ! s || ! s.length || ! s[0].hasOwnProperty("baseline") ) {
alert("Bitte markieren Sie text von der gewünschten Schriftart");
return;
}
var doc = app.activeDocument;

var rs = [];
rs[0] = [
'font',
'x-höhe',
'pointSize',
'H',
'f',
'y',
'ober',
'unter'
]

var story = s[0].parentStory;
for ( var n = 0; n < story.lines.length; n++ ) {
var msr = measure( story.lines[n].characters.firstItem() );
rs.push( msr );
}
var tf = doc.textFrames.add({geometricBounds: [0, 0, 300, 300]});
tf.contents = rs.join("\n");
doc.select( tf.parentStory.texts.everyItem() );
app.copy();
tf.remove();
alert("Ergebnis ist kopiert")

function measure( text, fontSize ) {
if ( ! fontSize ) fontSize = 100;
var tf = app.activeDocument.textFrames.add({ geometricBounds: [0, 0, 1000, 1000]});
text.duplicate( LocationOptions.AT_END, tf.parentStory);
tf.parentStory.contents = "xxHfy"
tf.texts.everyItem().pointSize = fontSize;
var x = tf.characters[0].createOutlines();
var h = UnitValue(x[0].geometricBounds[2] - x[0].geometricBounds[0], doc.viewPreferences.verticalMeasurementUnits).as("pt");
tf.texts.everyItem().pointSize = fontSize * fontSize / h ;
x[0].remove();

var y = tf.characters[3].createOutlines(),
f = tf.characters[2].createOutlines(),
H = tf.characters[1].createOutlines(),
x = tf.characters[0].createOutlines(),
yh = UnitValue(y[0].geometricBounds[2] - y[0].geometricBounds[0], doc.viewPreferences.verticalMeasurementUnits).as("pt"),
fh = UnitValue(f[0].geometricBounds[2] - f[0].geometricBounds[0], doc.viewPreferences.verticalMeasurementUnits).as("pt"),
Hh = UnitValue(H[0].geometricBounds[2] - H[0].geometricBounds[0], doc.viewPreferences.verticalMeasurementUnits).as("pt"),
fplus = UnitValue(x[0].geometricBounds[0] - f[0].geometricBounds[0], doc.viewPreferences.verticalMeasurementUnits).as("pt"),
yplus = UnitValue(y[0].geometricBounds[2] - x[0].geometricBounds[2], doc.viewPreferences.verticalMeasurementUnits).as("pt"),
font = text.appliedFont;
if ( font instanceof Font ) font = font.fullName.replace(/\t/, " ");

tf.remove();

return [
font,
fontSize,
r(fontSize * fontSize / h),
r(Hh),
r(fh),
r(yh),
r(fplus),
r(yplus)
].join("\t");


function r(x) {
return Math.round( x * 100 ) / 100;
}
}
}


Spannend finde ich diese Zeile:
Code
fh = UnitValue(f[0].geometricBounds[2] - f[0].geometricBounds[0], doc.viewPreferences.verticalMeasurementUnits).as("pt") 


Den Trick hab ich von ChatGPT. Ich bin nie darauf gekommen, dass man die Angabe aus den ViewPreferences als Parameter in UnitValue verwenden kann.
=> Kein Umschalten der Lineale mehr, man bekommt MM oder PT oder was auch immer, egal welchen Zustand das Dok hat.

Grok und DeepSeek kannten den Trick nicht ;)


als Antwort auf: [#589371]

Per Skript Schriftparameter auslesen und an die Zwischenablage übergeben

Gerald Singelmann
  
Beiträge gesamt: 6290

3. Feb 2025, 09:40
Beitrag # 3 von 8
Beitrag ID: #589373
Bewertung:
(17378 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hier noch ein Script, das alle aktiven Schriften vermisst.

Bei einigen kann es zu Problemen kommen, die Buchstaben zu Pfade umzuwandeln (z.B. AppleEmoji hat kein "x"), dann liefert das Script -1 für alle Werte.

Code
main(); 

function main() {
var rs = [];
rs[0] = [
'font',
'x-höhe',
'pointSize',
'H',
'f',
'y',
'ober',
'unter'
].join("\t")

var doc = app.documents.add();
var tf1 = doc.textFrames.add({geometricBounds: [0, 0, 300, 300]});
tf1.contents = "blah";
var fonts = app.fonts.everyItem().getElements();
var w = new Window("palette");
w.font = w.add("statictext", [undefined,undefined, 600, 20]);
w.pb = w.add("progressbar", [undefined, undefined, 600, 10]);
w.pb.maxvalue = fonts.length;
w.show();

for ( var nf = 0; nf < Math.min(4000, fonts.length); nf++ ) {
if ( nf % 10 == 0) {
w.font.text = nf + "/" + fonts.length + " -- " + fonts[nf].fullName;
}
w.pb.value = nf;
tf1.parentStory.texts.everyItem().appliedFont = fonts[nf];
var msr = measure(tf1.parentStory.characters.firstItem() );
rs.push( msr );
}
w.close();

var tf = doc.textFrames.add({geometricBounds: [0, 0, 300, 300]});
tf.contents = rs.join("\n");
doc.select( tf.parentStory.texts.everyItem() );
app.copy();
tf.remove();
alert("Ergebnis ist kopiert")

function measure( text, fontSize ) {
var font = text.appliedFont;
if ( font instanceof Font ) font = font.fullName.replace(/\t/, " ");
if ( ! fontSize ) fontSize = 100;
var tf = app.activeDocument.textFrames.add({ geometricBounds: [0, 0, 1000, 1000]});
text.duplicate( LocationOptions.AT_END, tf.parentStory);
tf.parentStory.contents = "xxHfy"
tf.texts.everyItem().pointSize = fontSize;
try {
var x = tf.characters[0].createOutlines();
var h = UnitValue(x[0].geometricBounds[2] - x[0].geometricBounds[0], doc.viewPreferences.verticalMeasurementUnits).as("pt");
tf.texts.everyItem().pointSize = fontSize * fontSize / h ;
x[0].remove();

var y = tf.characters[3].createOutlines(),
f = tf.characters[2].createOutlines(),
H = tf.characters[1].createOutlines(),
x = tf.characters[0].createOutlines(),
yh = UnitValue(y[0].geometricBounds[2] - y[0].geometricBounds[0], doc.viewPreferences.verticalMeasurementUnits).as("pt"),
fh = UnitValue(f[0].geometricBounds[2] - f[0].geometricBounds[0], doc.viewPreferences.verticalMeasurementUnits).as("pt"),
Hh = UnitValue(H[0].geometricBounds[2] - H[0].geometricBounds[0], doc.viewPreferences.verticalMeasurementUnits).as("pt"),
fplus = UnitValue(x[0].geometricBounds[0] - f[0].geometricBounds[0], doc.viewPreferences.verticalMeasurementUnits).as("pt"),
yplus = UnitValue(y[0].geometricBounds[2] - x[0].geometricBounds[2], doc.viewPreferences.verticalMeasurementUnits).as("pt");
} catch(e) {
return [ font, fontSize, -1, -1, -1, -1, -1, -1 ].join("\t");
} finally {
tf.remove();
}

return [
font,
fontSize,
r(fontSize * fontSize / h),
r(Hh),
r(fh),
r(yh),
r(fplus),
r(yplus)
].join("\t");

function r(x) {
return Math.round( x * 100 ) / 100;
}
}
}



als Antwort auf: [#589372]

Per Skript Schriftparameter auslesen und an die Zwischenablage übergeben

Martin Fischer
  
Beiträge gesamt: 12885

3. Feb 2025, 10:09
Beitrag # 4 von 8
Beitrag ID: #589374
Bewertung:
(17354 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Gerald,

mit Interesse habe ich Deinen Ansatz verfolgt.

Zitat Hier noch ein Script, das alle aktiven Schriften vermisst.


Ein doppeldeutiger Satz. Smile

Bei mir war es irgendwo noch zu einem Fehler gekommen, weil InDesign eine ermittelte Schrift nicht zuweisen konnte.* Deswegen wären zumindest folgende Zeilen noch in eine try-catch Klammer zu setzen.

Code
   tf1.parentStory.texts.everyItem().appliedFont = fonts[nf]; 
var msr = measure(tf1.parentStory.characters.firstItem() );


Und statt alle aktiven Schriften berechnen zu lassen, was mitunter sehr lange dauern könnte, wäre mein Vorschlag, nur die in einem Dokument verwendeten Schriften zu vermessen.


---
* edit: Es handelte sich um Regular-Schnitte der Noto Sans:
Noto Sans JP Regular-Regular
Noto Sans SC Regular-Regular
Noto Sans TC Regular-Regular


als Antwort auf: [#589373]
(Dieser Beitrag wurde von Martin Fischer am 3. Feb 2025, 10:41 geändert)

Per Skript Schriftparameter auslesen und an die Zwischenablage übergeben

Gerald Singelmann
  
Beiträge gesamt: 6290

3. Feb 2025, 10:55
Beitrag # 5 von 8
Beitrag ID: #589375
Bewertung:
(17304 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi Martin,

von einer Montag-Morgen-Fingerübung bitte kein ausgefeiltes Error-Handling erwarten :D

Ich fände als nächsten Ausarbeitungsschritt interessanter, von jedem Schriftschnitt ein PNG zu exportieren, alles in eine Datenbank schreiben und dann diese oder jene Auswertung fahren. Man könnte auch die Laufweite noch in die Statistik aufnehmen. Oder ChatGPT das PNG vorsetzen und klassifizieren lassen. Oder so.

Wenn man zu viel Zeit hätte...

Ich hab 1080 Schnitte installiert. Bin aber ja auch kein Setzer.


als Antwort auf: [#589374]

Per Skript Schriftparameter auslesen und an die Zwischenablage übergeben

Martin Fischer
  
Beiträge gesamt: 12885

3. Feb 2025, 14:58
Beitrag # 6 von 8
Beitrag ID: #589377
Bewertung:
(17131 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Gerald,

Antwort auf: von einer Montag-Morgen-Fingerübung bitte kein ausgefeiltes Error-Handling erwarten :D


Keine Bange.
Das war nur ein kurzes Erstaunen, weil's wo gehakt hat und nicht weiterlief.


Antwort auf: Wenn man zu viel Zeit hätte...


Du greifst immerhin mit KI gekonnt auf einen großen Zeit- und Ressourcensatz zurück.
Mir war's am Wochenende nicht gelungen, ein altes Problem (verfolgt mich inzwischen ein Berufsleben lang) zur Markierung von verwaisten Anführungszeichen (einfach und doppelt) in gemischtsprachigen Dokumenten (deutsch, englisch, französisch) und Fehlern bei der Paarung (sprachgemischte Paare) und unter Miteinbezug der Unterscheidung einfacher Anführungszeichen von Apostrophen damit zu lösen: KI versuchte vergeblich indexOf eines Zeichens innerhalb eines Textobjekts (Fundstellen) auszuwerten. Smile

Antwort auf: Ich hab 1080 Schnitte installiert. Bin aber ja auch kein Setzer.

Als Mengensetzer genügen mir in der Regel ein Dutzend Schriftfamilien mit den dazugehörigen Schnitten.

Aber Betriebssystem und verschiedene Software jubeln einem eigenwillig Fonts noch und nöcher unter, so dass ich es derzeit tatsächlich auf stolze 1500 Schnitte, die ich größtenteils nicht bestellt habe, bringe ... Allein diese »Noto«s. Verrückt! Mehr Leichen als Beiträger.

Deine Ausbauperspektiven mit PNG und weiteren metrischen Analysen gefallen mir.
Du erinnerst Dich auch an das erstaunliche Werkzeug zur Fontanalyse FontDrop!. Allein was der Reiter »Data« zu bieten hat.

Carpe diem!


als Antwort auf: [#589375]
(Dieser Beitrag wurde von Martin Fischer am 3. Feb 2025, 15:02 geändert)

Per Skript Schriftparameter auslesen und an die Zwischenablage übergeben

Pomeranz
Beiträge gesamt: 23

3. Feb 2025, 20:16
Beitrag # 7 von 8
Beitrag ID: #589378
Bewertung:
(16920 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Gerald,

vielen Dank für die Mühe, die du dir gemacht hast. Das erste Skript, das die Daten für eine einzelne Schrift ermittelt, läuft fehlerfrei.

Diese Daten werden an die Zwischenablage übergeben:

font,x-höhe,pointSize,H,f,y,ober,unter
Adelle Sans EXT 100 194.55 140.86 148.83 143.39 48.83 43.39


Ich bräuchte die Daten in dieser Form:

Adelle Sans EXT 100 194,55 140,86 148,83 143,39 48,83 43,39

Also nur das reine Ergebnis ohne die Überschrift. Und Kommata statt Punkten.

------

Dem zweiten Skript kann man schön beim Arbeiten zusehen: eine Schrift nach der anderen wird analysiert. Leider kommt dann folgende Fehlermeldung:

Zitat JavaScript Fehler!
Fehlernummer: 15875
Fehlerzeichenfolge: Die gewünschte Schriftfamilie ist nicht verfügbar.
Engine: main
Datei:C:\Users\thoma\AppData\Roaming\Adobe\InDesign\Version 19.0\de_DE\Scripts\Scripts Panel\InDesign - Scripts\HilfDirSelbst\FontParameterAuslesenALL.jsx
Zeile:31
Quelle: tf1.parentStory.texts.everyItem().appliedFont = fonts[nf];


Danach bricht das Skript ergebnislos ab.


als Antwort auf: [#589372]

Per Skript Schriftparameter auslesen und an die Zwischenablage übergeben

Pomeranz
Beiträge gesamt: 23

4. Feb 2025, 03:13
Beitrag # 8 von 8
Beitrag ID: #589379
Bewertung:
(16793 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: Bei mir war es irgendwo noch zu einem Fehler gekommen, weil InDesign eine ermittelte Schrift nicht zuweisen konnte.* Deswegen wären zumindest folgende Zeilen noch in eine try-catch Klammer zu setzen.

Code
   tf1.parentStory.texts.everyItem().appliedFont = fonts[nf]; 
var msr = measure(tf1.parentStory.characters.firstItem() );


Und statt alle aktiven Schriften berechnen zu lassen, was mitunter sehr lange dauern könnte, wäre mein Vorschlag, nur die in einem Dokument verwendeten Schriften zu vermessen.


---
* edit: Es handelte sich um Regular-Schnitte der Noto Sans:
Noto Sans JP Regular-Regular
Noto Sans SC Regular-Regular
Noto Sans TC Regular-Regular


Martin, wie konntest du feststellen, dass die drei von dir genannten Schriften die Fehlermeldung verursacht haben? Ich musste meinen Schriftordner fast total ausräumen, damit das zweite Skript von Gerald fehlerfrei durchlief. Hier ist das Ergebnis:

Zitat font x-höhe pointSize H f y ober unter
Arial 100 192.84 138.04 140.4 140.58 40.4 40.58
Arial Italic 100 192.84 138.04 140.4 140.58 40.4 40.58
Arial Bold 100 192.84 138.04 140.4 140.58 40.4 40.58
Arial Bold Italic 100 192.84 138.04 140.4 140.58 40.4 40.58
Marlett 100 -1 -1 -1 -1 -1 -1
Segoe Fluent Icons 100 -1 -1 -1 -1 -1 -1
Segoe UI Light 100 200 140.04 149.61 146.97 49.61 46.97
Segoe UI Light Italic 100 200 140.04 183.59 146.97 50.39 46.97
Segoe UI Semilight 100 200 140.04 149.9 146.97 49.9 46.97
Segoe UI Semilight Italic 100 199.8 139.9 183.41 146.83 50.34 46.83
Segoe UI 100 200 140.04 150.2 147.07 50.2 47.07
Segoe UI Italic 100 199.61 139.77 183.24 146.69 50.29 46.69
Segoe UI Semibold 100 200 140.04 150.29 147.07 50.29 47.07
Segoe UI Semibold Italic 100 200 140.04 183.59 146.97 50.39 46.97
Segoe UI Bold 100 200 140.04 150.39 146.97 50.39 46.97
Segoe UI Bold Italic 100 200 140.04 183.59 146.97 50.39 46.97
Segoe UI Black 100 200 140.04 150.39 146.97 50.39 46.97
Segoe UI Black Italic 100 200 140.04 183.59 146.97 50.39 46.97
Times New Roman 100 223.58 148.03 155.02 148.25 55.02 48.25
Times New Roman Italic 100 220.45 145.96 200.65 144.99 55.65 44.99
Times New Roman Bold 100 219.04 145.03 148.34 147.27 48.34 47.27
Times New Roman Bold Italic 100 214.45 141.99 191.52 143.35 48.17 43.35


(Den Fontordner so weit zu leeren, ging weit über die Schmerzgrenze von Windows hinaus. Es war ein Kampf, das System zu überreden die MS-Schriften zu löschen. Ich habe ihn nur dank NT Lite gewonnen.)


als Antwort auf: [#589374]
X