Vor einiger Zeit habe ich mich mit dem Aufbau einer Karte in Adobe InDesign beschäftigt. Mein Ziel war es, verschiedene Orte durchnummeriert auf einer grafischen Straßenkarte darzustellen. Insgesamt waren es etwas über 45 Einträge. Bis dahin kein Problem – ein Marker aus einem Rechteck und einem Textfeld ist schnell erstellt, schnell dupliziert und die Zahl um eins erhöht.
Ein Problem entstand dann beim Ergänzen eines neuen Markers. Die nachfolgenden Marker mussten manuell angepasst werden, was schnell zu einer sehr aufwendigen Aufgabe werden kann. Also habe ich mich auf die Suche nach einer guten Lösung gemacht. In Adobe InDesign können Scripte eingebunden werden, um verschiedene Aufgaben zu automatisieren. Es war also naheliegend, ein Script zu schreiben, das das Nummerieren der Marker für mich übernimmt.
Das Script sucht zunächst nach dem Ordner „Standorte“ im Adobe InDesign-Dokument. Anschließend ruft es jede Gruppe in diesem Ordner auf – jeder Marker muss also in einer eigenen Gruppe gekapselt sein. Im nächsten Schritt wird in jeder Gruppe das erste Textfeld ausgewählt und die fortlaufende Nummer eingetragen. Das Script, das ich für diese Aufgabe verwendet habe, findest du am Ende dieser Seite.
Eine genaue Anleitung zur Verwendung des Scripts findest du in diesem Video:
Und hier das Script, das dir helfen kann, nummerierte Marker in Adobe InDesign zu realisieren:
#target indesign
// -----------------------------------------------
// Marker Nummerieren v4
// Nummeriert alle Gruppen auf der Ebene "Standorte"
// Reihenfolge = Reihenfolge im Ebenen-Panel (oben = 1)
// -----------------------------------------------
var doc = app.activeDocument;
var layerName = "Standorte";
var layer = doc.layers.itemByName(layerName);
if (!layer.isValid) {
alert("Ebene '" + layerName + "' wurde nicht gefunden!");
} else {
var allItems = layer.allPageItems;
var groups = [];
// Nur direkte Top-Level-Gruppen sammeln (keine Untergruppen)
for (var i = 0; i < allItems.length; i++) {
var item = allItems[i];
try {
if (item.reflect.name === "Group" && item.parent.reflect.name !== "Group") {
groups.push(item);
}
} catch(e) {}
}
if (groups.length === 0) {
alert("Keine Gruppen gefunden.\nGesamt-Elemente auf Ebene: " + allItems.length);
} else {
// Nach Z-Order sortieren: index 0 = vorne = oben im Ebenen-Panel = Marker 1
groups.sort(function(a, b) {
return a.index - b.index;
});
var errors = 0;
for (var j = 0; j < groups.length; j++) {
var group = groups[j];
var nummer = j + 1;
var tf = findFirstTextFrame(group);
if (tf !== null) {
tf.contents = nummer.toString();
} else {
errors++;
}
}
var msg = "Fertig! " + groups.length + " Marker nummeriert.";
if (errors > 0) {
msg += "\n\nHinweis: In " + errors + " Gruppe(n) wurde kein Textrahmen gefunden.";
}
alert(msg);
}
}
function findFirstTextFrame(group) {
if (group.textFrames.length > 0) {
return group.textFrames[0];
}
if (group.groups.length > 0) {
for (var i = 0; i < group.groups.length; i++) {
var tf = findFirstTextFrame(group.groups[i]);
if (tf !== null) return tf;
}
}
return null;
}