[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Leerzeilen löschen (JS, WIN, CS5)

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

Leerzeilen löschen (JS, WIN, CS5)

cwenet
Beiträge gesamt: 1076

28. Sep 2011, 10:31
Beitrag # 1 von 13
Bewertung:
(7066 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

wie kann ich vor und nach einer bestimmten Überschrift alle Leerzeilen löschen?
Oder geht das eher mit GREP? Wenn ja, wie genau?

Danke für die Hilfe
Grüße
Christoph
X

Leerzeilen löschen (JS, WIN, CS5)

Martin Fischer
  
Beiträge gesamt: 12668

28. Sep 2011, 10:46
Beitrag # 2 von 13
Beitrag ID: #481177
Bewertung:
(7059 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Christoph,

mit GREP geht das bei best. Überschriften nur, wenn die Sequenz einheitlich mit einem Absatzformat ausgezeichnet ist.

Ist dies der Fall?

Grundsätzlich sollten aus Gründen der Organisation und des Umbruchs (was, wenn eine Leerzeile am Anfang eines Textrahmens zu stehen kommt) Leerzeilen möglichst vermieden und statt dessen mit Absatzabständen gearbeitet werden.

Ohne Formatierung könnte man Leerzeilen etwa so löschen:
Code
\r+(?=\r) 


Allgemeiner das Löschen aller Weißräume vor einer Absatzschaltung
Code
\s+(?=\r) 



Das, was Du vorhast, sollte sich aber auch über ein Skript lösen lassen:
Überschriftenformat suchen und per Skript die Zeichen nach der Überschrift prüfen und so lange löschen, wie Absatzschaltungen gefunden werden.


als Antwort auf: [#481176]
(Dieser Beitrag wurde von Martin Fischer am 28. Sep 2011, 10:47 geändert)

Leerzeilen löschen (JS, WIN, CS5)

cwenet
Beiträge gesamt: 1076

28. Sep 2011, 11:18
Beitrag # 3 von 13
Beitrag ID: #481184
Bewertung:
(7042 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

danke für Deine Antwort.
Wir arbeiten generell ohne Leerzeilen. Aber die Autoren sind da sehr fleissig, was Leerzeilen angeht.

Dennoch möchte ich nicht generell alle Leerzeilen löschen, sondern nur vor und nach einem bestimmten Absatz.
Das Problem ist, dass ich nicht weiss, wieviele Leerzeilen (und mit welcher Formatierung) vor und nach dem Absatz gemacht wurden.
Nur das Absatzformat der Überschrift ist bekannt.

Dann komme ich in diesem Fall um ein Script nicht herum.
Dann schaue ich mal, wie weit ich dies umsetzen kann.
Sonst melde ich mich nochmals.

Danke und Gruß
Christoph


als Antwort auf: [#481177]

Leerzeilen löschen (JS, WIN, CS5)

Marco Morgenthaler
Beiträge gesamt: 2474

28. Sep 2011, 13:09
Beitrag # 4 von 13
Beitrag ID: #481208
Bewertung: ||
(7015 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Christoph

Mit Grep könntest du am Anfang und Ende der Titel-Absätze Sonderzeichen einfügen, z. B.:

••Überschrift mit Blindtext••

In einem zweiten Schritt kannst du nun zwei oder mehrere Absatzschaltungen suchen, denen deine Sonderzeichen (••) folgen (pos. Lookahead) bzw. suchst du nach einer oder mehreren Absatzschaltungen, wenn vorher ••\r steht (pos. Lookbehind). Mit diesen zwei Greps findest du alle Leerzeilen vor und nach dem Titel-Absatz.

Nach dem Löschen der überflüssigen Leerzeilen auch alle Sonderzeichen löschen.

Habe es nicht getestet, sollte aber funktionieren.

Gruss, Marco


als Antwort auf: [#481184]

Leerzeilen löschen (JS, WIN, CS5)

cwenet
Beiträge gesamt: 1076

30. Sep 2011, 08:27
Beitrag # 5 von 13
Beitrag ID: #481358
Bewertung:
(6941 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Lieben Dank Marco,

tolle Idee. Ich muss von dem Gedanken wegkommen, alles auf einmal zu machen.
Es geht ja auch in Etappen.

Schönen Tag.

Christoph


als Antwort auf: [#481208]

Leerzeilen löschen (JS, WIN, CS5)

Marco Morgenthaler
Beiträge gesamt: 2474

30. Sep 2011, 11:01
Beitrag # 6 von 13
Beitrag ID: #481366
Bewertung:
(6917 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Christoph

Noch einfacher geht es vielleicht so: Allen Leerzeilen eine Farbe (z. B. Magenta) zuweisen. Im Absatzformat für Titel den Überschriften ebenfalls diese Farbe zuweisen.

Dann alle Leerzeilen vor und nach den Überschriften (alles Magenta) löschen. Am Schluss Farbzuweisung wieder rückgängig machen.

Grep-Suche nach Leerzeilen:
(?<=\r)\s+
Ändern in: Magenta

Leerzeilen vor und nach Überschriften löschen:
\s+(.+\r)\s+
Format suchen: Magenta
Ändern in: $1

Dieser Weg ist etwas eleganter, weil keine Sonderzeichen (••) eingefügt werden müssen. Die Lösung besteht prinzipiell darin, ein gemeinsames Merkmal zu definieren (hier die Farbe), wodurch es möglich ist, gezielt nur diejenigen Leerzeilen zu löschen, die vor und nach den Überschriften stehen.

Gruss, Marco


als Antwort auf: [#481358]

Leerzeilen löschen (JS, WIN, CS5)

-hans-
Beiträge gesamt: 748

30. Sep 2011, 22:53
Beitrag # 7 von 13
Beitrag ID: #481445
Bewertung:
(6872 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
N'abend,

Schlussdienstödnis ;-)

Das Script ist bestimmt fürchterlich umständlich, aber ich hoffe mal, das es trotzdem funktioniert :)

Tschöle

Hans-Gerd

Code
#target InDesign 
var pStyleName = "test"; //HdlPstyle to search for ...
var theStories = app.activeDocument.stories;
var toRemove = new Array ();



for (i=0; i < theStories.length; i++){
var theStory = theStories[i];
var thePstyles = theStory.paragraphs;

searchforpStyle(thePstyles);
toRemove.sort().reverse();
var finalArray = unique(toRemove);
pRemove(finalArray);

}

function searchforpStyle(thePstyles){

for (j = thePstyles.length-1; j >0; j--){
var thePara = thePstyles[j];
if (thePara.appliedParagraphStyle.name == pStyleName){
getBlanks(j);
}
}
}



function getBlanks(p) {
for (k = p; k >= 0; k--){

var cCount = theStory.paragraphs[k].lines[0].characters.count();
if (cCount == 1){
toRemove.push(k);

} else {

for (m = p; m < thePstyles.length; m++){
var cCount = theStory.paragraphs[m].lines[0].characters.count();

if (cCount == 1){
toRemove.push(m);

}
}
}
}
}


//geklaut ...
function unique(ain) {
var seen = {}
var aout = []

for (var i = 0; i < ain.length; i++) {
var elt = ain[i]
if (!seen[elt]) {
aout.push(elt)
seen[elt] = true
}
}

return aout
}


function pRemove(theArray) {
for (l = 0; l < theArray.length; l++){
try{
var theIndex = theArray[l]
thePstyles[theIndex].remove();
}catch (e){
}
}
}



als Antwort auf: [#481358]

Leerzeilen löschen (JS, WIN, CS5)

-hans-
Beiträge gesamt: 748

1. Okt 2011, 11:29
Beitrag # 8 von 13
Beitrag ID: #481454
Bewertung:
(6827 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Morgen,

in der Listenbereinigung des obigen Scripts ist leider ein mismatch ... (var finalArray)

das sollte funktionieren:

Code
#target InDesign  
var pStyleName = "test"; //HdlPstyle to search for ...
var theStories = app.activeDocument.stories;
var toRemove = new Array ();



for (i=0; i < theStories.length; i++){
var theStory = theStories[i];
var thePstyles = theStory.paragraphs;

searchforpStyle(thePstyles);
var finalArray = unique(toRemove).sort(NumsortReverse) //Doppeleinträge entfernen +nummerische, umgekehrte Sortierung,
pRemove(finalArray);

}

function searchforpStyle(thePstyles){

for (j = thePstyles.length-1; j >0; j--){
var thePara = thePstyles[j];
if (thePara.appliedParagraphStyle.name == pStyleName){
getBlanks(j);
}
}
}



function getBlanks(p) {
for (k = p; k >= 0; k--){

var cCount = theStory.paragraphs[k].lines[0].characters.count();
if (cCount == 1){
toRemove.push(k);

} else {

for (m = p; m < thePstyles.length; m++){
var cCount = theStory.paragraphs[m].lines[0].characters.count();

if (cCount == 1){
toRemove.push(m);

}
}
}
}
}


//geklaut bei forum www.selfhtml.org... doppelte Listeneinträge entfernen
function unique(ain) {
var seen = {}
var aout = []

for (var i = 0; i < ain.length; i++) {
var elt = ain[i]
if (!seen[elt]) {
aout.push(elt)
seen[elt] = true
}
}

return aout
}


function pRemove(theArray) {
for (l = 0; l < theArray.length; l++){
try{
var theIndex = theArray[l]
thePstyles[theIndex].remove();
}catch (e){
}
}
}

function NumsortReverse (a, b) {
return b - a;
}


Lieben Gruß

Hans-Gerd Claßen


als Antwort auf: [#481445]

Leerzeilen löschen (JS, WIN, CS5)

Marco Morgenthaler
Beiträge gesamt: 2474

1. Okt 2011, 13:16
Beitrag # 9 von 13
Beitrag ID: #481458
Bewertung:
(6810 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo

In meinem letzten Beitrag hat sich ein Fehler eingeschlichen, da ich davon ausgegangen bin, dass Leerzeilen immer paarweise (vor und nach einer Überschrift) auftreten. Das ist natürlich nicht der Fall. Es kann ja sein, dass vor der Überschrift eine oder mehrere Leerzeilen stehen, nach der Überschrift aber keine (und umgekehrt). Ich habe deshalb im Grep das +-Zeichen durch ein Sternchen (* = null oder mehrere Male) ersetzt.

Leerzeilen vor und nach Überschriften löschen:
\s*(.+\r)\s*
Format suchen: Magenta
Ändern in: $1

Ich hoffe, es passt jetzt.
Gruss, Marco


als Antwort auf: [#481366]

Leerzeilen löschen (JS, WIN, CS5)

cwenet
Beiträge gesamt: 1076

5. Okt 2011, 16:03
Beitrag # 10 von 13
Beitrag ID: #481679
Bewertung:
(6681 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Vielen Dank Hans-Gerd,
das Script funktioniert prima,

Schöne Grüße
Christoph


als Antwort auf: [#481454]

Leerzeilen löschen (JS, WIN, CS5)

cwenet
Beiträge gesamt: 1076

5. Okt 2011, 16:07
Beitrag # 11 von 13
Beitrag ID: #481681
Bewertung:
(6676 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Lieben Dank Marco,

ich habe es ausprobiert.
Folgendes passiert. Die Leerzeilen werden wie gewünscht gelöscht.
Der Absatz nach der letzten Leerzeile wird jetzt aber wie die Überschrift formatiert.
Dieser hatte aber zuvor ein anderes Format. Er wird auch gar nicht beim Suchen markiert. Nur beim Ersetzen wird er einfach umformatiert.
Hast Du eine Idee, was da passiert?

Gruß
Christoph


als Antwort auf: [#481458]

Leerzeilen löschen (JS, WIN, CS5)

Marco Morgenthaler
Beiträge gesamt: 2474

8. Okt 2011, 18:32
Beitrag # 12 von 13
Beitrag ID: #481919
Bewertung:
(6585 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Christoph

Ich war ein paar Tage in Madrid, deshalb komme ich erst jetzt zu einer Antwort.
Vielen Dank für deinen Test (ich hatte es damals nur ohne Formatierungen durchgespielt). Ja, die Tücken des Greps. Es werden offenbar temporär die Absatzschaltungen gelöscht, sodass das Titelformat an den bzw. die nächsten Absätze weitergegeben wird.

Ich habe nun einen Test mit Formatierungen gemacht. Folgende zwei Greps löschen alle Weissräume (\s) vor und nach einer Überschrift, ohne dass die Formatierungen (Überschrift, Fliesstext) geändert werden.

Grep 1: Setzt vor und nach der Überschrift ein Sonderzeichen (•)
Suchen: ^.+\r
Format suchen: Überschrift
Ändern in: •$0•

Grep 2: Löscht alle Weissräume vor und nach dem Sonderzeichen (•)
Suchen: ^\s*•\s*
(Kein bestimmtes Format suchen; Ändern-Feld leer lassen)

\s löscht alle Weissräume, auch Tabulatoren. Wenn also im ersten Absatz nach einer Überschrift der Fliesstext mit einem Tabulator eingezogen wird, würde dieser Tabulator mit Grep 2 gelöscht. Wenn der Tabulator stehen bleiben soll, müsste die Definition der Weissräume eingeschränkt werden. Grep 2 könnte dann so aussehen:
Suchen: ^[ \r]*•[ \r]*

Statt \s gibt es hier eine Zeichenklasse [ \r]. Gelöscht werden also nur Leerschläge und/oder Absatzschaltungen.

Sorry für den Fehler mit den Formatierungen im alten Grep.
Gruss, Marco


als Antwort auf: [#481681]

Leerzeilen löschen (JS, WIN, CS5)

cwenet
Beiträge gesamt: 1076

10. Okt 2011, 19:00
Beitrag # 13 von 13
Beitrag ID: #482052
Bewertung:
(6494 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Lieber Marco,

merci viel mal. So klappt es wunderbar.
Kein Problem mit der späteren Antwort.

Schönen Abend
Christoph


als Antwort auf: [#481919]
X

Aktuell

InDesign / Illustrator

| 23.05.2022

IDUG_300

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
02.02.2023

Prozesse optimieren und effizient gestalten

Zürich
Donnerstag, 02. Feb. 2023, 08.00 - 10.00 Uhr

Digitalisierung, Webauftritt

Digitalisierung mitgestalten - Worauf kommt es an? Wie wichtig ist die Webseite? Webseite mit Word Press? Interne Prozesse optimieren

Ja

Organisator: B. Isik - SNF Academy

Kontaktinformation: Birol Isik, E-Mailinfo AT bkcc DOT ch

https://digitalisierung-heute.ch/digitalisierung-informationstag-schweiz/

Veranstaltungen
01.03.2023 - 09.03.2023

Online
Mittwoch, 01. März 2023, 00.00 Uhr - Donnerstag, 09. März 2023, 00.00 Uhr

Online Webinar

Wie gehen wir mit diesen Veränderungen um? Was ist notwendig, damit wir die Digitalisierung im Unternehmen klappt? Veränderungsprozesse verstehen und entsprechend handeln Mitarbeiter als Botschafter Webseite mit WordPress erstellen SEA /SEO (Ads aufschalten)

Ja

Organisator: B. Isik - SNF Academy

Kontaktinformation: B. Isik, E-Mailinfo AT snfa DOT ch

https://www.fernstudiumfitness.ch/digitalisierung-schweiz/