[GastForen Programme Print/Bildbearbeitung Adobe InDesign Schusterjungen und Hurenkinder

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

Schusterjungen und Hurenkinder

Gerald Singelmann
  
Beiträge gesamt: 6269

30. Aug 2007, 10:22
Beitrag # 1 von 13
Bewertung:
(6039 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi all,

auf besonderen Wunsch von m.greiner hier ein einfaches AppleScript, das nach Schusterjungen und Hurenkindern sucht. Da es sehr viel einfacher ist rauszufinden, ob zwei Zeilen in verschiedenen Rahmen als in verschiedenen Spalten (des selben Rahmens) stecken, findet dieses Script derzeit nur Zeilen, die in verschiedenen Ramen stecken.
Die Zeilen, die laufend anzeigen, wo gesucht sind, sollten leicht rauszunehmen sein.

Feedback wird gern entgegengenommen.

Code
tell application "Adobe InDesign CS3" 
set aDoc to active document
set shownFrame to "none"
set allStories to stories of aDoc
repeat with aStory in allStories
set nParas to count paragraphs in aStory
repeat with n from 1 to nParas
if (count lines in paragraph n of aStory) > 1 then
set fstFrame to first item of parent text frames of first line of paragraph n of aStory
set sndFrame to first item of parent text frames of second line of paragraph n of aStory
select paragraph n of aStory
if fstFrame is not equal to shownFrame then
set shownFrame to fstFrame
my showFrame(shownFrame)
end if
if fstFrame is not equal to sndFrame then
select first line of paragraph n of aStory
my showFrame(fstFrame)
return
end if
set lstFrame to first item of parent text frames of last line of paragraph n of aStory
set sndFrame to last item of parent text frames of line -2 of paragraph n of aStory
if lstFrame is not equal to sndFrame then
my showFrame(lstFrame)
select last line of paragraph n of aStory
return
end if

end if
end repeat
end repeat
end tell
on showFrame(aFrame)
tell application "Adobe InDesign CS3"
set aSpread to my getSpread(aFrame)
if aSpread is not active spread of active window then
set active spread of active window to aSpread
zoom active window given actual size
end if
end tell
end showFrame
on getSpread(aThing)
tell application "Adobe InDesign CS3"
repeat until class of aThing is spread
set aThing to parent of aThing
end repeat
return aThing
end tell
end getSpread

X

Schusterjungen und Hurenkinder

John
Beiträge gesamt: 91

31. Aug 2007, 09:51
Beitrag # 2 von 13
Beitrag ID: #310497
Bewertung:
(5933 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Tag, Herr Singelmann,


für mich wäre dieses Script auch sehr wertvoll. Wir würden bevor wir die PDF schreiben, noch einmal überprüfen, ob sich Hurenkinder in dem Text eingeschlichen haben. Nebenbei gibt es diese Überprüfung bei Quark. Soweit, so gut. Leider funktioniert dieses Script bei mir nicht. (Indesign CS3)

Es kommt diese Fehlermeldung:

Fehlerzeichenfolge
Es wurde »Ausdruck etc«, erwartet, aber ein »Unbekanntes Token« wurde gefunden.

Mache ich etwas verkehrt.


Viele Grüße aus dem Spessart
John


als Antwort auf: [#310327]

Schusterjungen und Hurenkinder

Gerald Singelmann
  
Beiträge gesamt: 6269

31. Aug 2007, 09:59
Beitrag # 3 von 13
Beitrag ID: #310498
Bewertung:
(5929 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo John,

ich bin mir nicht sicher, was da schief läuft, daher ein paar allgemeine Bemerkungen:

- das Script ist ein AppleScript, das heißt, es läuft nicht unter Windows. Ich brauche etwa 5 mal länger, eine Idee in JavaScript umzusetzen, und habe daher derzeit keine Zeit, eine Windows-kompatible Version des Scripts umzusetzen. Ich hatte gehofft, dass einer der residenten JS Experten in die Bresche springen könnte. Aber die haben wahrscheinlich alle grad ein ähnliches Zeitproblem wie ich.
- ein AppleScript, das hier als Code veröffentlicht wird, muss in Apples AppleScript Editor kopiert werden und von dort gespeichert werden. Es reicht nicht wie bei JavaScripten, das in einen normalen Texteditor zu kopieren.
- ich habe eine erweiterte Version geschrieben, die auch einen Spaltenwechsel in einem mehrspaltigen Textrahmen finden sollte und die fragt, ob weiter gesucht werden soll, statt beim ersten Treffer abzubrechen. Die gibts diesmal als Attachment.

HTH


als Antwort auf: [#310497]
Anhang:
Schusterjungen 2.scpt.zip (12.3 KB)

Schusterjungen und Hurenkinder

Martin Fischer
  
Beiträge gesamt: 12783

31. Aug 2007, 10:40
Beitrag # 4 von 13
Beitrag ID: #310504
Bewertung:
(5903 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Gerald,

Antwort auf: Ich hatte gehofft, dass einer der residenten JS Experten in die Bresche springen könnte. Aber die haben wahrscheinlich alle grad ein ähnliches Zeitproblem wie ich.


Also gut.
Wenn Du so laut winkst:
(edit: der folgende Code ist falsch; das Skript sollte in dieser Form nicht verwendet werden; Interessierte können darin studieren, wie man es nicht machen sollte; Praktiker verwenden statt dessen die untenstehende Version von Gerald Singelmann.)

Code
var aDoc = app.activeDocument; 
var allStories = aDoc.stories;

for (aStory = 0; aStory < allStories.length; aStory++)
{
var nParas = allStories[aStory].paragraphs;
for (n = 0; n < nParas.length; n++)
{
if (nParas[n].lines.length > 1)
{
var fstFrame = nParas[n].lines[0].parentTextFrames[0];
var sndFrame = nParas[n].lines[-1].parentTextFrames[0];
if (fstFrame != sndFrame)
selectIt(fstFrame.lines[-1]);
var lstFrame = nParas[n].lines[-1].parentTextFrames[0];
var sndFrame = nParas[n].lines[-2].parentTextFrames[0];
if (lstFrame != sndFrame)
selectIt(lstFrame.lines[0]);
}
}
}
alert("Keine Schusterjungen und Hurenkinder gefunden.")


function selectIt(theObj)
{
// Selects object, turns to page and zooms in on it
app.select(theObj,SelectionOptions.replaceWith);
app.activeWindow.zoomPercentage = 300
exit();
}


Vor lauter Übersetzen und wenig selber Denken ist mir der Sinn und Zweck des Vergleichs von lstFrame und sndFrame rausgegangen.

Was ist
Code
last item of parent text frames of line -2 of paragraph n of aStory 

Gibt es zu einer bestimmten Zeile nicht ausschließlich einen übergeordneten Textrahmen, nämlich den ersten? JavaScript gibt bei "nParas[n].lines[-2].parentTextFrames[-1]" undefined zurück.

Da Du Dir bereits den Kopf zerbrochen hast, laß' ich das selber jetzt sein und stell mich ganz dumm.


als Antwort auf: [#310498]
(Dieser Beitrag wurde von Martin Fischer am 31. Aug 2007, 11:10 geändert)

Schusterjungen und Hurenkinder

Gerald Singelmann
  
Beiträge gesamt: 6269

31. Aug 2007, 10:57
Beitrag # 5 von 13
Beitrag ID: #310509
Bewertung:
(5893 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

vielen Dank für die Übersetzung. Wenn ich das richtig sehe, sind ein paar Indizes durcheinander geraten. So müsste es eigentlich gehen:
Code
var aDoc = app.activeDocument;  
var allStories = aDoc.stories;

for (aStory = 0; aStory < allStories.length; aStory++)
{
var nParas = allStories[aStory].paragraphs;
for (n = 0; n < nParas.length; n++)
{
if (nParas[n].lines.length > 1)
{
var fstFrame = nParas[n].lines[0].parentTextFrames[0];
var sndFrame = nParas[n].lines[1].parentTextFrames[0];
if (fstFrame != sndFrame)
selectIt(fstFrame.lines[-1]);
var lstFrame = nParas[n].lines[-1].parentTextFrames[0];
var penultimateFrame = nParas[n].lines[-2].parentTextFrames[0];
if (lstFrame != penultimateFrame)
selectIt(lstFrame.lines[0]);
}
}
}
alert("Keine Schusterjungen und Hurenkinder gefunden.")


function selectIt(theObj)
{
// Selects object, turns to page and zooms in on it
app.select(theObj,SelectionOptions.replaceWith);
app.activeWindow.zoomPercentage = 200;
exit();
}



Zitat ist mir der Sinn und Zweck des Vergleichs von lstFrame und sndFrame rausgegangen

Ich habe unsauber die Variablen benannt. Das zweite Vorkommnis von sndFrame müsste eigentlich vorletzterRahmen heißen, aber "penultimateFrame" war mir zu umständlich.

Zitat Gibt es zu einer bestimmten Zeile nicht ausschließlich einen übergeordneten Textrahmen, nämlich den ersten?

Ich kann mir grad auch keine Situation vorstellen, in der das nicht so ist. Aber da in AppleScript eine Liste mit einem Element ebenso gut mit "last item" abgefragt werden kann wie mit "first item" ist last item semantisch korrekter, oder? denn es geht ja um den letzten, auch wenn's nur einer ist...

Informatiker unter sich, seufz.

Danke noch mal


als Antwort auf: [#310504]

Schusterjungen und Hurenkinder

Martin Fischer
  
Beiträge gesamt: 12783

31. Aug 2007, 11:07
Beitrag # 6 von 13
Beitrag ID: #310513
Bewertung:
(5888 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Gerald,

wie Schuppen fällt es mir jetzt von den Augen.
Ja klar muß das so sein.
Immerhin habe ich mich dieses Mal vor den Kopfschmerzen bewahrt. ;-)

Ich hau oben noch einen Kommentar rein, damit keiner in Versuchung kommt, das Skript tatsächlich zu verwenden.


als Antwort auf: [#310509]

Schusterjungen und Hurenkinder

John
Beiträge gesamt: 91

31. Aug 2007, 14:56
Beitrag # 7 von 13
Beitrag ID: #310557
Bewertung:
(5823 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,


habe jetzt das Script einmal getestet. Es funktioniert sehr gut. Habe keine Fehler entdekct!

John


als Antwort auf: [#310513]

Schusterjungen und Hurenkinder

Wolfgang J. Kremer
Beiträge gesamt: 68

23. Nov 2007, 14:35
Beitrag # 8 von 13
Beitrag ID: #323975
Bewertung:
(5539 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo !

Ich muss sagen, ich komme mit dem Script überhaupt nicht zurecht. Ich würde dieses Script gerne als letzten Kontrollmechanismus beim Werksatz einsetzen. Dabei genügt es mir, die Hurenkinder aufzuzeigen.

Das sollte dann in etwa so funktionieren: Starten des Scripts "SucheNachHurenkind.scpt". Dann sollte mir die Seite mit dem ersten Hurenkind angezeigt werden - und zwar in der von mir aktuell eingestellten Darstellungsgröße. Somit weiß ich, dass auf dieser Seite ein Hurenkind vorhanden ist. Dieses Hurenkind würde ich jetzt mit den Bordmitteln von InDesign auflösen oder evtl. durch Texteingriffe bereinigen. Anschließend würde ich gerne das Script wieder starten, damit es ab der aktuellen Position im Dokument weiter nach Hurenkindern sucht und dort wieder anhält.

Ich würde auch speziell nur diese Funktion in das Script einbauen und die Suche nach Schusterjungen vernachlässigen. Sollte diese Funktion gewünscht sein, so würde ich dafür ein separates Script einsetzen. Damit wäre dann gewährleistet, dass man schnell zum gewünschten Ergebnis kommt und auch umfangreiche Werke rationell durcharbeiten kann. Das Starten des Scripts würde ich mir dann noch auf eine Funktionstaste legen, damit die Suche mit nur einem Tastenanschlag gestartet wird.

Ich habe leider keinen Durchblick beim Erstellen von Scipten. Momentan behelfe ich mir mit der Funktion "Absatzlinie unten". Diese stelle ich in meinem Absatzformat so ein, dass rechts vom Textrahmen ein ca. 3 Quadratmillimeter großes Quadrat erscheint. Das fällt dann beim Durchsehen der Seiten schneller auf, als nur ein Absatzende mit evtl. Hurenkind.

Vielleicht können Gerald oder Martin mit dieser Idee ja etwas anfangen. Mich würde das sehr freuen.

Viele Grüße
Wolfgang J. Kremer


als Antwort auf: [#310327]

Schusterjungen und Hurenkinder

Ralf Hobirk
Beiträge gesamt: 5961

23. Nov 2007, 14:42
Beitrag # 9 von 13
Beitrag ID: #323977
Bewertung:
(5528 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
(Blöde) Frage meinerseits: Warum arbeitet ihr nicht mit den "Keep Options" (deutsch: Absatzumbruchoptionen) von InDesign?

Ich lasse formatbedingt bei Bodytext immer zwei Zeilen zusammenhalten, und schon erübrigt sich die Suche nach Schusterjungen und Hurenkindern.

Oder gibt es plausible Gründe, die dagegen sprechen? Gerne höre ich eure Meinungen dazu, schließlich hat ja jeder andere Job-Anforderungen.


als Antwort auf: [#323975]

Schusterjungen und Hurenkinder

Wolfgang J. Kremer
Beiträge gesamt: 68

23. Nov 2007, 14:55
Beitrag # 10 von 13
Beitrag ID: #323985
Bewertung:
(5521 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Ralf !

Die Standard-Funktion von InDesign "Zeilen nicht trennen" gleicht eher der Arbeitsweise eines Textverarbeitungsprogramms. Dabei wird vorgegeben, dass eine Zeile auf der Seite allein oben nicht stehen darf. Gelöst wird das Problem nur dadurch, dass auf der verhergehenden Seite unten eine Zeile weggenommen wird. Diese Vorgehensweise ist für den Werksatz nicht akzeptabel. Außerdem kann man von InDesign ja nicht verlangen, dass alles automatisch funktioniert. Wofür säße ich dann noch am Computer.

Auch die Aktivierung der Umbruchverletzungen bringt nichts, da mit der Einstellung "Zeilen nicht trennen" ja erst gar keine Hurenkinder entstehen, sondern nur immer eine zusätzliche Zeile mit auf die neue Seite genommen wird.

Viele Grüße
Wolfgang J. Kremer


als Antwort auf: [#323977]

Schusterjungen und Hurenkinder

Quarz
Beiträge gesamt: 3555

23. Nov 2007, 14:56
Beitrag # 11 von 13
Beitrag ID: #323986
Bewertung:
(5520 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Ralf,

ich mache es genauso wie Du; jeweils 2 Zeilen
zusammenhalten.

Außerdem ziehe ich mir noch zur schnelleren
Wahrnehmung in der ›Haupt‹Musterseite eine
nichtdruckende Linie auf die letzte untere Schriftlinie.

Gruß
Quarz


als Antwort auf: [#323977]

Schusterjungen und Hurenkinder

Martin Fischer
  
Beiträge gesamt: 12783

23. Nov 2007, 15:19
Beitrag # 12 von 13
Beitrag ID: #323997
Bewertung:
(5490 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Wolfgang,

Antwort auf: Außerdem kann man von InDesign ja nicht verlangen, dass alles automatisch funktioniert. Wofür säße ich dann noch am Computer.


Und deswegen fragst Du nach einem Skript?

So wie ich Dich verstehe, möchtest Du, daß das Skript kurz unterbricht und Dich etwas machen läßt und danach fortfährt. Das geht nicht.

Hier eine leicht modifizierte und schmutzige Version der Funktion selectIt() (bitte austauschen), welche Dir die Stelle einblendet und die Seitenzahl nennt.
Schmutzig, weil es nur mit Schusterjungen und Hurenkindern in Textrahmen funktioniert, die nicht verankert sind. Es funktioniert auch nicht in Tabellen. Ich vermute aber, daß in diesen Fällen in InDesign technisch gar keine Schusterjungen und Hurenkinder möglich sind, oder?

Code
   
function selectIt(theObj)
{
// Selects object, turns to page and zooms in on it
app.select(theObj,SelectionOptions.replaceWith);
app.activeWindow.zoomPercentage = 200;
try
{
alert("Toll!\rEtwas Unanständiges auf S. " + theObj.parentTextFrames[0].parent.name + " gefunden.");
}
catch(e)
{
alert('Ätsch!\rEtwas gefunden, ich sag aber nicht wo.')
}
}



als Antwort auf: [#323985]

Schusterjungen und Hurenkinder

Wolfgang J. Kremer
Beiträge gesamt: 68

23. Nov 2007, 16:02
Beitrag # 13 von 13
Beitrag ID: #324010
Bewertung:
(5470 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin !

Danke für die schnelle Antwort. Aber irgendwie reden wir hier aneinander vorbei. Es werden immer noch Schusterjungen und Hurenkinder abgefragt. Dann erscheint die Meldung "Toll! Etwas Unanständiges auf S. 00 gefunden." Drückt man jetzt "OK" geht die Suche weiter bis zur nächsten Meldung. Das dauert so lange, bis der Text durch ist. Man kann das Prozedere nicht abbrechen um evtl. einzugreifen. Außerdem läuft das Ganze recht zäh.

Ist es nicht möglich, eine Abfrage zu starten, die in etwa wie folgt aussieht:

- Wähle im aktuellen Textrahmen den letzten Absatz aus
- Abfrage: Läuft dieser Absatz auf die nächste Seite um ?
- Wenn nein, gehe auf nächste Seite und starte Abfrage noch einmal
- Wenn ja, ist der Y-Umlauf kleiner/gleich der aktuelle Zeilenvorschub ?
- Wenn ja, gehe zu Seite (aktuelle Seite)
- Wenn nein, Abfrage wiederholen.

Ich weiß, das ist ziemlich grob aufgezeigt. Doch sollte man damit nicht die Möglichkeit haben, die Seite mit dem Hurenkind in der eingestellten Ansicht darzustellen und die gewünschten Änderungen vorzunehmen. Anschließend startet man das Script neu und das Ganze geht weiter.

Hoffentlich habe ich mich verständlich ausgedrückt.

Viele Grüße
Wolfgang J. Kremer


als Antwort auf: [#323997]
(Dieser Beitrag wurde von Wolfgang J. Kremer am 23. Nov 2007, 16:04 geändert)
X

Aktuell

PDF / Print
IWS-Logo_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
18.06.2024

Online
Dienstag, 18. Juni 2024, 10.00 - 10.30 Uhr

Webinar

In diesen beiden kostenlose Webinaren erfahren Sie, wie Sie mit Hilfe von Enfocus Griffin und dem Impressed Workflow Server Ihren LFP-Workflows optimieren können. 18.06.2024: So optimieren Sie Ihre Prozesse mit Enfocus Griffin 02.07.2024: So sparen Sie Zeit und Geld mit Impressed Workflow Server in der LFP-Edition Griffin: Griffin ist das leistungsstarke Kraftpaket für das automatische Nesting im Großformatdruck. Dank eines ausgeklügelten, KI-basierten Nesting-Algorithmus können Sie mit Griffin Vorlagen schnell und effizient vernutzen – und das klappt auch mit unregelmäßigen Formen perfekt. Das spart Ihnen unzählige Stunden, die Sie bisher mit dem manuellen Nesting und Ausschießen verbracht haben. Einige wichtige Funktionen ≡ Anlage von Beschnittzugaben ≡ Automatische Erzeugung der Schnittkontur ≡ Erstellung von Strichcodes, Textmarkierungen und Registrierungen IWS LFP Edition: Komplizierte, kleinteilige Aufträge; alles sehr speziell; seit Jahren bewährte Prozesse – da können wir nichts standardisieren und automatisieren! Das sagen viele Großformatdrucker – aber stimmt das wirklich, ist dem tatsächlich so? Mit dem IWS LFP Edition automatisieren Sie Ihre Produktion von der Übernahme der Daten aus dem ERP-System bis zur Erzeugung der verschachtelten Druckform und der Übergabe an den RIP. Phoenix Core ist eine hochentwickelte KI-Technologie für die Planung und das Nesting von Druckerzeugnissen. Anders als herkömmliche Ausschießlösungen arbeitet Phoenix nicht auf Basis von Vorlagen, sondern erzeugt entsprechend der Maschinen- und Produktionsanforderungen druckfertige Layouts „on-the-fly“.

kostenlos

Ja

Organisator: Impressed GmbH

https://www.impressed.de/schulung.php?c=sDetail&sid=328

So optimieren Sie Ihren LFP-Workflow
Veranstaltungen
02.07.2024

Online
Dienstag, 02. Juli 2024, 10.00 - 10.30 Uhr

Webinar

In diesen beiden kostenlose Webinaren erfahren Sie, wie Sie mit Hilfe von Enfocus Griffin und dem Impressed Workflow Server Ihren LFP-Workflows optimieren können. 18.06.2024: So optimieren Sie Ihre Prozesse mit Enfocus Griffin 02.07.2024: So sparen Sie Zeit und Geld mit Impressed Workflow Server in der LFP-Edition Griffin: Griffin ist das leistungsstarke Kraftpaket für das automatische Nesting im Großformatdruck. Dank eines ausgeklügelten, KI-basierten Nesting-Algorithmus können Sie mit Griffin Vorlagen schnell und effizient vernutzen – und das klappt auch mit unregelmäßigen Formen perfekt. Das spart Ihnen unzählige Stunden, die Sie bisher mit dem manuellen Nesting und Ausschießen verbracht haben. Einige wichtige Funktionen ≡ Anlage von Beschnittzugaben ≡ Automatische Erzeugung der Schnittkontur ≡ Erstellung von Strichcodes, Textmarkierungen und Registrierungen IWS LFP Edition: Komplizierte, kleinteilige Aufträge; alles sehr speziell; seit Jahren bewährte Prozesse – da können wir nichts standardisieren und automatisieren! Das sagen viele Großformatdrucker – aber stimmt das wirklich, ist dem tatsächlich so? Mit dem IWS LFP Edition automatisieren Sie Ihre Produktion von der Übernahme der Daten aus dem ERP-System bis zur Erzeugung der verschachtelten Druckform und der Übergabe an den RIP. Phoenix Core ist eine hochentwickelte KI-Technologie für die Planung und das Nesting von Druckerzeugnissen. Anders als herkömmliche Ausschießlösungen arbeitet Phoenix nicht auf Basis von Vorlagen, sondern erzeugt entsprechend der Maschinen- und Produktionsanforderungen druckfertige Layouts „on-the-fly“.

kostenlos

Ja

Organisator: Impressed GmbH

Kontaktinformation: E-Mailschulungen AT impressed DOT de

https://www.impressed.de/schulung.php?c=sDetail&sid=328

So optimieren Sie Ihren LFP-Workflow