[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt automatischer Abstand zwischen 2 aufeinanderfolgenden Absatzformaten

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

automatischer Abstand zwischen 2 aufeinanderfolgenden Absatzformaten

allora
Beiträge gesamt: 47

23. Apr 2010, 09:25
Beitrag # 1 von 28
Bewertung:
(13522 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,
ich nehme mal an, mein Problem lässt sich per Skript lösen und bitte diesbezügliche Experten um Hilfe: Fließtext eines Buches ist mit "Abstand danach" versehen, innerhalb von Aufzählungen (eigenes Absatzformat) hingegen nicht - allerdings soll jeweils nach dem letzten Aufzählungspunkt wieder ein Abstand zum nachfolgenden Fließtext sein. Da es viiiele Aufzählungen gibt, wäre ich sehr dankbar für eine automatische Lösung ...
Schönen Gruß
Anita
X

automatischer Abstand zwischen 2 aufeinanderfolgenden Absatzformaten

Martin Fischer
  
Beiträge gesamt: 12783

23. Apr 2010, 10:29
Beitrag # 2 von 28
Beitrag ID: #439969
Bewertung:
(13387 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Anita,

> ich nehme mal an, mein Problem lässt sich per Skript lösen

Ja, das geht.
Hast Du schon nach so einem Skript recherchiert?
Ich meine, es müssten hier im Forum ein paar davon rumliegen.
Im Zusammenhang mit Überschriften.

Ich persönlich mach das inzwischen aber wieder von Hand.
Mit GREP-Ausdrücken und Platzhalterzeichen in zwei Durchläufen pro Absatzformatpaar.
Den Vorgang ausführlich zu beschreiben fehlt mir allerdings grad die Zeit.


als Antwort auf: [#439951]
(Dieser Beitrag wurde von Martin Fischer am 23. Apr 2010, 10:32 geändert)

automatischer Abstand zwischen 2 aufeinanderfolgenden Absatzformaten

allora
Beiträge gesamt: 47

23. Apr 2010, 10:32
Beitrag # 3 von 28
Beitrag ID: #439972
Bewertung:
(13381 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,
das mit den Überschriften (addierte Abstände eliminieren) hab ich schon gesehen - allerdings kenn ich mich nicht aus mit Skripts und kann es also nicht an meine Bedürfnisse anpassen :-(


als Antwort auf: [#439969]

automatischer Abstand zwischen 2 aufeinanderfolgenden Absatzformaten

Martin Fischer
  
Beiträge gesamt: 12783

23. Apr 2010, 10:37
Beitrag # 4 von 28
Beitrag ID: #439974
Bewertung:
(13376 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Anita,

dann könntest Du Dir einen Skripter suchen, der Dir das an Deine Bedürfnisse anpaßt.
Der bräuchte dafür wahrscheinlich ein paar Musterseiten, damit die Struktur der Absatzfolge deutlich wird.

Ich selbst kann Dir im Moment damit nicht dienen.
Zu viel um die Ohren.


als Antwort auf: [#439972]

automatischer Abstand zwischen 2 aufeinanderfolgenden Absatzformaten

Hans Haesler
  
Beiträge gesamt: 5826

23. Apr 2010, 11:12
Beitrag # 5 von 28
Beitrag ID: #439980
Bewertung:
(13350 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Anita,

auch ich habe zur Zeit viel um die Ohren. Doch wenn Du mir ein Musterdokument zustellst, werde ich versuchen, ein entsprechendes Script zu entwickeln.

Bitte mit Infos betreffend InDesign-Version und Betriebssystem.

Gruss, Hans


als Antwort auf: [#439974]

automatischer Abstand zwischen 2 aufeinanderfolgenden Absatzformaten

Hans Haesler
  
Beiträge gesamt: 5826

23. Apr 2010, 12:06
Beitrag # 6 von 28
Beitrag ID: #439994
Bewertung:
(13314 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Anita,

hier schon mal ein erster Versuch. In der Zeile vier den Namen des Formats anpassen und in Zeile fünf den Abstand auf den gewünschten Wert ändern.

Dann den Cursor in den Textfluss setzen und das Script starten.

Code
//AbstandNach_201d.js 
//DESCRIPTION:Jeden letzten Aufzählungsabsatz mit "Abstand nach" versehen

var psn = "Aufzaehlung";
var spa = "2mm";

// vorsichtshalber die Dialoge einschalten
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.interactWithAll;

// testen, ob ein Dokument geöffnet ist
if (app.documents.length == 0) {
alert ("Ein Dokument öffnen.", "Achtung");
exit();
}

// die Auswahl speichern und testen
var curSel = app.selection;
if (curSel.length == 0) {
alert ("Es ist nichts ausgewählt.", "Stop");
exit();
}

if (curSel[0].constructor.name != "InsertionPoint") {
alert ("Den Cursor in den Textfluss setzen.", "Stop");
exit();
}

// die Textkette und deren Absätze speichern
var curStory = curSel[0].parent;
var allParas = curStory.paragraphs;
// die Anzahl Absätze feststellen
var nParas = allParas.length;

var lastOne = true;
// eine Rückwärts-Schleife durch die Textkette
for (var p=nParas-1; p>-1; p--) {
curParaStyle = allParas[p].appliedParagraphStyle.name;
if (curParaStyle == psn) {
if (lastOne) {
allParas[p].spaceAfter = spa;
lastOne = false;
}
}
else {
lastOne = true;
}
}

Gruss, Hans


als Antwort auf: [#439980]
(Dieser Beitrag wurde von Hans Haesler am 23. Apr 2010, 12:09 geändert)

automatischer Abstand zwischen 2 aufeinanderfolgenden Absatzformaten

Quarz
Beiträge gesamt: 3555

23. Apr 2010, 13:13
Beitrag # 7 von 28
Beitrag ID: #440017
Bewertung:
(13288 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Danke Hans,

ich glaube, dieses Script kann ich gut gebrauchen :-)


Gruß
Quarz

--------------------------------------------
InDesign CS4 ver6.04 | WinXP SP3



als Antwort auf: [#439994]

automatischer Abstand zwischen 2 aufeinanderfolgenden Absatzformaten

allora
Beiträge gesamt: 47

23. Apr 2010, 13:59
Beitrag # 8 von 28
Beitrag ID: #440027
Bewertung:
(13265 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Vielen, vielen Dank - es klappt!

Liebe Grüße
Anita


als Antwort auf: [#439994]

automatischer Abstand zwischen 2 aufeinanderfolgenden Absatzformaten

Hans Haesler
  
Beiträge gesamt: 5826

23. Apr 2010, 15:33
Beitrag # 9 von 28
Beitrag ID: #440043
Bewertung:
(13233 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Ihr beiden Damen,

bitteschön.

Es freut mich, dass Euch mein Script nützlich sein wird.

Gruss, Hans


als Antwort auf: [#440027]

automatischer Abstand zwischen 2 aufeinanderfolgenden Absatzformaten

cwenet
Beiträge gesamt: 1139

24. Apr 2010, 07:36
Beitrag # 10 von 28
Beitrag ID: #440079
Bewertung:
(13180 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

danke auch für das Script. Das hat mich zu folgendem inspiriert: Nach Überschriften soll der Absatz einen Erstzeileneinzug mit dem Wert "null" bekommen. Das funktioniert auch soweit sehr gut:

Code
var psn = "U1";  
var spa = "0";

// vorsichtshalber die Dialoge einschalten
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.interactWithAll;

// testen, ob ein Dokument geöffnet ist
if (app.documents.length == 0) {
alert ("Ein Dokument öffnen.", "Achtung");
exit();
}

// die Auswahl speichern und testen
var curSel = app.selection;
if (curSel.length == 0) {
alert ("Es ist nichts ausgewählt.", "Stop");
exit();
}

if (curSel[0].constructor.name != "InsertionPoint") {
alert ("Den Cursor in den Textfluss setzen.", "Stop");
exit();
}

// die Textkette und deren Absätze speichern
var curStory = curSel[0].parent;
var allParas = curStory.paragraphs;
// die Anzahl Absätze feststellen
var nParas = allParas.length;

var lastOne = true;
// eine Rückwärts-Schleife durch die Textkette
for (var p=nParas-1; p>-1; p--) {
curParaStyle = allParas[p].appliedParagraphStyle.name;
if (curParaStyle == psn) {
if (lastOne) {
allParas[p+1].firstLineIndent = spa;// Einzug erste Zeile = null
lastOne = false;
}
}
else {
lastOne = true;
}
}


Nun möchte ich das aber einschränken. Der Einzug soll erst auf null gesetzt werden, wenn nach U1 der Absatz mit dem Format "Normal" folgt. Und: Wie kann ich dass für mehrere Überschriften in 1 Skript tun? Also (U1, U2, ...). Hast Du hierfür eine Idee?

Grüße
Christoph


als Antwort auf: [#440043]

automatischer Abstand zwischen 2 aufeinanderfolgenden Absatzformaten

Hans Haesler
  
Beiträge gesamt: 5826

24. Apr 2010, 09:06
Beitrag # 11 von 28
Beitrag ID: #440082
Bewertung:
(13166 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Christoph,

bitteschön.

Vorerst poste ich nachstehend ein zweite Version für Anita, welche ebenfalls die Aufhebung des Einzuges wünschte. Und dann muss ich gleich zur Arbeit.

Vielleicht hilft Dir folgendes Script schon weiter. Sonst werden wir später darauf zurückkommen.

Gruss, Hans


als Antwort auf: [#440079]

automatischer Abstand zwischen 2 aufeinanderfolgenden Absatzformaten

Hans Haesler
  
Beiträge gesamt: 5826

24. Apr 2010, 09:09
Beitrag # 12 von 28
Beitrag ID: #440083
Bewertung:
(13165 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Anita,

ich habe erst jetzt Zeit gefunden, um Dein Musterdokument anzuschauen.

Ich stelle fest, dass drei Aufzählungsformate verwendet werden. Der eine Name beginnt mit "02 GT", die beiden anderen mit "03 GT". Man darf also nicht nur eines einsetzen.

In einer PM schriebst Du mir, dass eigentlich noch beim jeweiligen ersten Absatz nach der Aufzählung der Einzug aufgehoben werden sollte. Aber nur, wenn es eine Fortsetzung des Satzes des letzten Absatzes vor der Aufzählung ist. Knifflig ...

Wie Du richtig vermutest, könnte man prüfen, ob der Absatz mit einem Kleinbuchstaben beginnt.

In der zweiten Version des Scripts habe ich dies umgesetzt und kommentiert.

Code
//AbstandNach_202d.js 
//DESCRIPTION:Jeden letzten Aufzählungsabsatz mit "Abstand nach" versehen und die Einzüge des folgenden Absatzes aufheben

// die Variablen für die Anfangsbuchstaben der Formate
var psn1 = "02 GT";
var psn2 = "03 GT";
// der Wert für den "Abstand nach"
var spa = "0c3";

// vorsichtshalber die Dialoge einschalten
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.interactWithAll;

// testen, ob ein Dokument geöffnet ist
if (app.documents.length == 0) {
alert ("Ein Dokument öffnen.", "Achtung");
exit();
}

// die Auswahl speichern und testen
var curSel = app.selection;
if (curSel.length == 0) {
alert ("Es ist nichts ausgewählt.", "Stop");
exit();
}

if (curSel[0].constructor.name != "InsertionPoint") {
alert ("Den Cursor in den Textfluss setzen.", "Stop");
exit();
}

// die Textkette und deren Absätze speichern
var curStory = curSel[0].parent;
var allParas = curStory.paragraphs;
// die Anzahl Absätze feststellen
var nParas = allParas.length;

// die Variable 'lastOne' dient als Ampel
var lastOne = true; // 'true' = 'wahr' = 'grün'
// eine Rückwärts-Schleife durch die Textkette
for (var p=nParas-1; p>-1; p--) {
// den Namen des aktuellen Absatzformates speichern
curParaStyle = allParas[p].appliedParagraphStyle.name;
// die ersten fünf Zeichen holen
curChars = curParaStyle.slice(0, 5);
// wenn diese Zeichen mit den Anfangsbuchstaben übereinstimmen ...
if (curChars == psn1 || curChars == psn2) {
// ... und die Ampel auf "grün" steht ...
if (lastOne) {
// ... den "Abstand nach" zuweisen ...
allParas[p].spaceAfter = spa;
// ... und die Ampel auf "rot" schalten
lastOne = false;
try {
// den ersten Buchstben des Folgeabsatzes speichern
var firstChar = allParas[p+1].characters[0].contents;
// in eine Grossbuchstaben umwandeln
var testChar = firstChar.toUpperCase();
// wenn die beiden Zeichen ungleich sind, den Einzug aufheben
if (firstChar != testChar) {
allParas[p+1].firstLineIndent = 0;
}
}
catch (e) {
}
}
}
else {
// sonst die Ampel auf "grün" stellen
lastOne = true;
}
}

//das Ende der Aktion melden
var dlog = new Window("palette");
dlog.size = [200,100];
dlog.add("statictext", [80, 80, 200, 96], "Fertig.");
dlog.show();
// eine kleine Pause
$.sleep(1200);
// den Dialog schliessen
dlog.close();

Das funktioniert gut. Damit auch Fälle abgefangen werden, in welchen die Fortsetzung des Satzes mit einem grossgeschriebenen Wort beginnt, sollte das Script ergänzt werden: Prüfen, ob der letzte Absatz vor der Aufzählung mit einem Satzzeichen endet. Falls dies zutrifft, hinunterlangen und den Einzug aufheben.

Das wäre möglich, aber weil auf jeden Fall eine optische Prüfung des Ergebnisses gemacht werden muss, lasse ich es vorerst bleiben.

[ Edit: Den klassischen Alert am Schluss habe ich nun durch ein Fensterchen ersetzt, welches automatisch geschlossen wird. Somit entfällt der Klick auf den "OK"-Button. Geht aber erst ab CS3. ]

Gruss, Hans


als Antwort auf: [#440027]
(Dieser Beitrag wurde von Hans Haesler am 24. Apr 2010, 11:28 geändert)

automatischer Abstand zwischen 2 aufeinanderfolgenden Absatzformaten

allora
Beiträge gesamt: 47

24. Apr 2010, 12:20
Beitrag # 13 von 28
Beitrag ID: #440093
Bewertung:
(13123 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Genial - danke!

Schönen Gruß
Anita


als Antwort auf: [#440083]

automatischer Abstand zwischen 2 aufeinanderfolgenden Absatzformaten

Kai Rübsamen
Beiträge gesamt: 4684

24. Apr 2010, 21:51
Beitrag # 14 von 28
Beitrag ID: #440113
Bewertung:
(13084 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

ich hänge noch beim Verstehen des ersten Skripts und zwar bei der Ampel.

Code
for (var p=nParas-1; p>-1; p--) {  
curParaStyle = allParas[p].appliedParagraphStyle.name;
if (curParaStyle == psn) {
if (lastOne) {
allParas[p].spaceAfter = spa;
lastOne = false;
}
}
else {
lastOne = true;
}
}


> Die For-Schleife ist mir klar und auch, dass die zweite If-Anweisung nur ausgeführt wird, wenn es sich um einen Absatz mit dem Namen "Aufzählung" handelt. Aber was passiert dann?


als Antwort auf: [#440093]

automatischer Abstand zwischen 2 aufeinanderfolgenden Absatzformaten

Kai Rübsamen
Beiträge gesamt: 4684

24. Apr 2010, 22:36
Beitrag # 15 von 28
Beitrag ID: #440115
Bewertung:
(13068 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
ein paar Überlegungen weiter ;-)

1. In der if-Anweisung wird keine Bedingung geprüft, sondern gleich das Ergebnis true hinterlegt?
2. Nur wenn eine Bedingung true ist wird die if-Anweisung ausgeführt?
3. Die Schleife zählt von hinten also bekommt der letzte Absatz den spaceAfter
4. Anschließend wird die Variable lastOne auf false gesetzt
5. Die if-Anweisung erhält beim nächsen Aufruf als Ergebnis false. Die Anweisung in der Bedingung wird dadurch nicht ausgeführt und das Skript springt wieder an den Anfang der For-Schleife?

Stimmt das so halbwegs?


als Antwort auf: [#440113]
(Dieser Beitrag wurde von Kai Rübsamen am 24. Apr 2010, 22:43 geändert)
X