Forenindex » Programme » Print/Bildbearbeitung » Adobe InDesign Skriptwerkstatt » [InDesign CS5]: Höhe der Fußnoten via Java

[InDesign CS5]: Höhe der Fußnoten via Java

Frank Münschke
Beiträge gesamt: 6

23. Mär 2011, 09:47
Bewertung:

gelesen: 4456

Beitrag als Lesezeichen
Hat jemand eine Idee, wie man via Javascript die Gesamthöhe aller Fußnoten auf einer Seite auslesen kann, um einen entsprechenden Taxtrahmen darüber platzieren zu können?
(wir wollen dadurch versuchen, dem "leere-Seiten-Bug" ein Schnippchen zu schlagen ...)
Gruß Frank
InDesign UserGroup Rhein/Ruhr

[InDesign CS5]: Höhe der Fußnoten via Java

Martin Fischer
  
Beiträge gesamt: 12783

23. Mär 2011, 10:03
Bewertung:

gelesen: 4450

Beitrag als Lesezeichen
Hallo Frank,

was ist die Gesamthöhe aller Fußnoten einer Seite?

Oberkante Großbuchstabenhöhe der ersten Fußnotenzeile bis Grundlinie der letzten Fußnotenzeile?
Oder oben ab Fußnotentrennline oder Grundlinie der letzten möglichen Zeile des Grundtextes?

Die Berechnung wird dann problematisch, wenn Fußnoten überlaufen.
Mir fällt spontan keine unkomplizierte Ermittlung der ersten Fußnotenzeile, die vom vorangehenden Textrahmen rüberläuft, ein (wenn sie nicht überläuft, ist es nicht schwierig).

Als untere Grenze könnte man unabhängig vom Überlauf die Unterkante des Textrahmens verwenden (ggf. mit Abzug des unteren Versatzes), da die Fußnoten nach unten ausgerichtet werden.

Aber das mit der Platzierung eines 'entsprechenden Textrahmens' kapiere ich nicht. Was ist Deine Strategie?


In den nächsten Tagen (11.4.2011?) wird ein neues Release von InDesign CS5 erwartet.
Vielleicht ist es deswegen besser, abzuwarten, was dieses bringt, um nicht unnötige Mühe in die Umgehung eines Bugs zu investieren, der in diesem Release möglicherweise behoben ist.

Viele Grüße
Martin



(Dieser Beitrag wurde von Martin Fischer am 23. Mär 2011, 11:01 geändert)

[InDesign CS5]: Höhe der Fußnoten via Java

Frank Münschke
Beiträge gesamt: 6

23. Mär 2011, 12:33
Bewertung:

gelesen: 4423

Beitrag als Lesezeichen
Hallo Martin

Das leere-Seiten-Problem tritt nicht an Seiten auf, bei denen ein Fußnotenüberlauf wirklich stattfindet, sondern an denen er eben nicht stattfindet ... das zu deiner ersten Anmerkung ...
--
Zum Warten auf den 11.4. ... da fehlt mir der Glauben. Ein Bug, der sich seit der CS2 durchzieht und noch nie so schlimm wie in der CS5 auftrat, soll endlich ausgemerzt werden ???
--
Aber lass uns die drei Wochen noch abwarten.
--
Wir "beheben" diesen leere-Seiten-Bug zur Zeit mit dem Platzieren von leeren Rahmen unten auf die Seiten, bei denen eine FN-Ziffer noch mit in eine Zeile passen würde, aber die FN selbst nicht mehr. Die Rahmen platzieren wir dann so hoch, dass dem Seitenumbruch ohne diese Zeile sowieso stattfinden würde, und Indesign sich erst gar nicht anstrengen muss ...
Wir bräuchten also die Gesamthöhe der durch die FNs generierten Rahmen ...
Gruß Frank

[InDesign CS5]: Höhe der Fußnoten via Java

Martin Fischer
  
Beiträge gesamt: 12783

23. Mär 2011, 12:48
Bewertung:

gelesen: 4417

Beitrag als Lesezeichen
Antwort auf: Wir "beheben" diesen leere-Seiten-Bug zur Zeit mit dem Platzieren von leeren Rahmen unten auf die Seiten, bei denen eine FN-Ziffer noch mit in eine Zeile passen würde, aber die FN selbst nicht mehr. Die Rahmen platzieren wir dann so hoch, dass dem Seitenumbruch ohne diese Zeile sowieso stattfinden würde, und Indesign sich erst gar nicht anstrengen muss ...


Also mit einem verdrängenden Textrahmen, dessen Höhe bei einer Umbruchänderung erneut angepasst werden müsste?

Die Idee ist im Grunde genommen nicht schlecht.
Aber es hört sich für mich doch nach einer sehr wackeligen bzw. risikobehafteten Bastelei an.
Da bleibe ich lieber bei CS4. ;-)

Im Ernst.
Schick mir mal ein Muster vorher-nachher, damit ich sicher gehen kann, Dich richtig verstanden zu haben. Denn auch meine Hoffnung bzgl. der Behebung dieses Bugs hält sich in Grenzen. Aber im April kann man nie wissen. ;-)

Viele Grüße
Martin



(Dieser Beitrag wurde von Martin Fischer am 23. Mär 2011, 12:57 geändert)

[InDesign CS5]: Höhe der Fußnoten via Java

Martin Fischer
  
Beiträge gesamt: 12783

23. Mär 2011, 13:02
Bewertung:

gelesen: 4403

Beitrag als Lesezeichen
Hallo Frank,

Antwort auf: Das leere-Seiten-Problem tritt nicht an Seiten auf, bei denen ein Fußnotenüberlauf wirklich stattfindet, sondern an denen er eben nicht stattfindet ... das zu deiner ersten Anmerkung ...


Wirklich?
Ich glaube, wir haben uns missverstanden.
Ich meinte den Fußnotenüberlauf, der oben vom vorherigen Rahmen reinkommt; nicht den, der von dem Rahmen, dem der Fokus gilt, in den nächsten Rahmen reinläuft.

Der Fehler ist m.W. unabhängig davon, was oben reinkommt.
Er ist viel mehr davon abhängig, was unten wg. der Schusterjungen-Option (x Zeilen am Anfang zusammenhalten) nicht rein kann.

Viele Grüße
Martin


[InDesign CS5]: Höhe der Fußnoten via Java

Frank Münschke
Beiträge gesamt: 6

23. Mär 2011, 13:39
Bewertung:

gelesen: 4393

Beitrag als Lesezeichen
Hallo Martin
zu 1:
genau das meinte ich auch: wenn eine FN bereits einen Überlauf erzeugt, hat sie ja bereits mit ihrer "Mutter" unten auf der Seite Platz gefunden, dann tritt der Bug nicht auf ...
zu 2:
Das mit der Musterdatei ist schwierig, weil es ja nicht auftreten muss, aber auftreten kann und immer nur dann auftreten wird, wenn man meint, dass es nicht mehr auftritt sollte ... (ich habe heute meinen epischen Tag!)
2. zu 2:
Dass das ein wackeliges Konzept ist, ist uns klar. Wir haben aber eine ganze Reihe von Publikationen in den verschiedenen Stufen der Korrektur, die wir in CS5 gemacht haben und - wegen der etwas geänderten Silbentrennung - nicht mehr in CS4 weiter machen können, weil solche Änderungen versteht der Kunde nie, und du kannst sicher sein, dass er so eine Stelle findet, auch wenn es nur eine auf 700 Seiten gibt ...
Alle aktuellen (wissenschaftlichen) Sachen machen wir bereits wieder mit der CS4 ...
Gruß Frank

BTW: Mein Sohn hat nen Beispiel gemacht, die Mail ist aufm weg zu dir ...

(Dieser Beitrag wurde von Frank Münschke am 23. Mär 2011, 13:51 geändert)

[InDesign CS5]: Höhe des Fußnotenbereichs via JavaScript

Martin Fischer
  
Beiträge gesamt: 12783

24. Mär 2011, 10:13
Bewertung:

gelesen: 4332

Beitrag als Lesezeichen
Hallo Frank,

Antwort auf: zu 1:
genau das meinte ich auch: wenn eine FN bereits einen Überlauf erzeugt, hat sie ja bereits mit ihrer "Mutter" unten auf der Seite Platz gefunden, dann tritt der Bug nicht auf ...


Nochmal:
mein Problem ist nicht die Fußnote, die im Textrahmen unten in den nächsten Textrahmen überläuft.
Mein Problem ist der Fußnotentext, der oben ggf. von dem vorangehenden Textrahmen reinläuft. Dessen ersten Zeile ist für mich nicht auf einfachem Wege zu ermitteln.

Eine mögliche Lösung bestünde darin, über einen temporären verankerten Textrahmen zu ermitteln, auf welcher Seite die Fußnotenzeile steht und das Ergebnis mit den Ergebnissen aus anderen Fußnotenzeilen zu vergleichen.
Aber wenn ich es richtig sehe, dann müsste auf diese Weise zunächst für alle Zeilen aller Fußnoten die dazugehörige Seite ermittelt werden. Das stelle ich mir recht zeitaufwendig vor.

Vielleicht hat jemand eine bessere Idee für dieses Problem:
1. Wie lässt sich zügig die erste Zeile des Fußnotenbereich eines Textrahmens ermitteln, auch wenn im Text des Textrahmen selbst keine Fußnote vorhanden ist.
2. Wie lässt sich zügig ermitteln, auf welcher Seite eine Fußnotenzeile steht.


Antwort auf: Das mit der Musterdatei ist schwierig, weil es ja nicht auftreten muss,

Wie das Problem aussieht, darüber weiß ich ausreichend Bescheid. ;-)
Mir ging es darum, zu verstehen, wie Eure Strategie ist.
In Deiner Beispieldatei konnte ich bestätigt sehen, dass ein textverdrängender Textrahmen über den Fußnotenbereich gelegt werden soll. Noch nicht so richtig klar ist mir, wie die Position der Oberkante dieses Verdrängers ermittelt werden soll.

Inzwischen habe ich Dir ein Skript zum Test zukommen lassen.


Antwort auf: Wir haben aber eine ganze Reihe von Publikationen in den verschiedenen Stufen der Korrektur, die wir in CS5 gemacht haben und - wegen der etwas geänderten Silbentrennung - nicht mehr in CS4 weiter machen können, weil solche Änderungen versteht der Kunde nie, und du kannst sicher sein, dass er so eine Stelle findet, auch wenn es nur eine auf 700 Seiten gibt ...


'Wegen der etwas geänderten Silbentrennung …' – hier war ich ein bißchen im Vorteil: InDihyph trennt in CS5 genauso (gut) wie in CS4. In meinen nach CS4 rückkonvertierten Daten konnte ich keine Zeilenumbruchverschiebungen infolge geänderter Silbentrennung feststellen.


Antwort auf: Alle aktuellen (wissenschaftlichen) Sachen machen wir bereits wieder mit der CS4 ...


Ich habe ein einziges Buchprojekt in CS5 bis zum bitteren Ende durchgezogen.
Hatte mir davon versprochen, doch noch eine praktikable und zufriedenstellende Lösung für dieses leidige Malheur zu finden. Leider war alle Mühe bislang erfolglos.

Aber vielleicht ist Deine Strategie tatsächlich ein erfolgversprechender Ansatz.

Viele Grüße
Martin


[InDesign CS5]: Höhe des Fußnotenbereichs via JavaScript

Marco Morgenthaler
Beiträge gesamt: 2474

24. Mär 2011, 10:32
Bewertung:

gelesen: 4327

Beitrag als Lesezeichen
Hallo Martin

Wäre es skripttechnisch möglich, den Stand der letzten Zeile des Fliesstextes auf einer Seite zu ermitteln?

Gruss, Marco

[InDesign CS5]: Höhe des Fußnotenbereichs via JavaScript

Martin Fischer
  
Beiträge gesamt: 12783

24. Mär 2011, 10:55
Bewertung:

gelesen: 4315

Beitrag als Lesezeichen
Hallo Marco,

ja, das wäre einfach.

Aber hilft das bei diesem Problem tatsächlich?
Ja, ich glaube, Du hast mich auf einen guten Weg geführt.

Man muss eben manchmal negativ denken:
– nicht 'wo beginnt mein Fußnotenbereich',
– sondern 'wo endet mein Textbereich'.

Und bei der Lösung dieses leerer-Textrahmen-Problems spielt der variable Raum zwischen dem Text- und dem Fußnotenbereich wahrscheinlich gar keine Rolle. Bzw. es ist möglicherweise sogar entscheidend besser, die letzte Textzeile als Referenz zu nehmen, statt der ersten Fußnotenzeile.

Hab vielen Dank.

Viele Grüße
Martin


[InDesign CS5]: Höhe des Fußnotenbereichs via JavaScript

Marco Morgenthaler
Beiträge gesamt: 2474

24. Mär 2011, 11:06
Bewertung:

gelesen: 4312

Beitrag als Lesezeichen
Wenn ich es richtig verstanden habe, sollen Rahmen mit Konturenführung platziert werden, die (falls notwendig) die letzte Zeile des Lauftextes verdrängen, also ist doch die letzte Textzeile Referenz (die Rahmen mit Konturenführung sind ja für Fussnotentext ohne Auswirkung).

Aber wie soll das Skript wissen, auf welcher Seite die letzte Textzeile verdrängt werden muss? Dies muss ja nur auf problematischen Seiten geschehen. Oder ist die Idee, dass die Rahmen platziert werden und bei Bedarf manuell aufgezogen/verschoben werden, damit sie Text verdrängen?

Gruss, Marco

[InDesign CS5]: Höhe des Fußnotenbereichs via JavaScript

Martin Fischer
  
Beiträge gesamt: 12783

24. Mär 2011, 11:25
Bewertung:

gelesen: 4299

Beitrag als Lesezeichen
Hallo Marco,

Antwort auf: Oder ist die Idee, dass die Rahmen platziert werden und bei Bedarf manuell aufgezogen/verschoben werden, damit sie Text verdrängen?


So weit ich verstanden habe, soll der verdrängende Textrahmen verhindern, dass InDesign sich bei einer nachträglichen Neuberechnung des Fußnotenbereichs wg. Berücksichtigung der Schusterjungen-Regel verhaspelt und auf Grund dieses gescheiterten Neuberechnungsprozesses den folgenden Textrahmen leert.

Deswegen soll das Anlegen der verdrängenden Textrahmen selbst nichts am status quo ändern, sondern helfen, diesen zu bewahren.
Das setzt voraus, dass der Fehlerteufel vor dem Anlegen der verdrängenden Textrahmen noch nicht zugeschlagen hat.
Das setzt aber auch voraus, dass der Umbruch vor dem Anlegen der verdrängenden Textrahmen im Wesentlichen abgeschlossen ist.

Der verdrängende Textrahmen ist als eine Art Stützstrumpf, wie man ihn zur Symptombehandlung von Krampfadern kennt, zu betrachten.


Hier der Entwurf eines solchen Stützstrumpfs für InDesign CS5 (vor Ausführung Cursor in Textabschnitt platzieren oder Textrahmen auswählen).
Code
//verdrängenderTextrahmenUeberFussnotenbereich.jsx 
//DESCRIPTION:Erstellt verdrängende Textrahmen über Fußnotenbereich

Object.prototype.isText = function()
{
switch(this.constructor.name)
{
case "InsertionPoint":
case "Character":
case "Word":
case "TextStyleRange":
case "Line":
case "Paragraph":
case "TextColumn":
case "Text":
case "TextFrame":
return true;
default :
return false;
}
}

if (app.selection.length > 0 && app.selection[0].isText())
{
var space_tolerance = 1;
var d = app.documents.firstItem();
var s = app.selection[0].parentStory;
check_frames(s.textContainers);
var layer_name = 'Textverdränger';
if (d.layers.itemByName(layer_name).isValid)
d.layers.itemByName(layer_name).remove();
var v_layer = d.layers.add({name:layer_name});
v_layer.move(LocationOptions.AT_BEGINNING);
for (var i = 0; i < s.textContainers.length; i++)
{
var tc = s.textContainers[i];
if (tc.lines.length > 0)
{
var gb = tc.geometricBounds;
var tc_bottom = tc.lines.lastItem().baseline;
var tgb = [tc_bottom + space_tolerance, gb[1], gb[2], gb[3]];
if (tgb[2] > tgb[0])
{
var t = tc.parentPage.textFrames.add(
{
geometricBounds: tgb,
itemLayer: v_layer,
textWrapPreferences:
{
textWrapMode : TextWrapModes.NEXT_COLUMN_TEXT_WRAP,
}
}
);
t.textWrapPreferences.textWrapOffset = 0; //Konturenführung Versatz oben
}
}
}
v_layer.locked = true;
}
else
alert('Bitte Textabschnitt auswählen.');


function check_frames( all_frames )
{
for (var i = 0; i < all_frames.length; i++)
{
if (all_frames[i].characters.length == 0)
selectIt(all_frames[i], 'Dieser Textrahmen scheint leer zu sein');
}
}

function selectIt( theObj, theMessage )
{
// wählt das übergebene Objekt aus und zoomt es heran (wechselt dabei ggf. die Seite)
var myZoom = app.activeWindow.zoomPercentage; // Zoomfaktor bei Bedarf auch fester Wert: 400;
app.select(theObj,SelectionOptions.replaceWith);
app.activeWindow.zoomPercentage = myZoom;

// Option zum Abbruch, falls innerhalb einer Schleife aufgerufen
var myChoice = confirm (theMessage + '\rWeiter?' );
if (myChoice == false)
exit();
return app.selection[0];
}


In der Zeile var space_tolerance = 1; wird eine kleine Toleranz für den Bereich zwischen Grundlinie der letzten Textzeile und Oberkante des verdrängenden Textrahmens definiert. Hier 1 Einheit der aktiven Maßeinheit.
Damit soll verhindert werden, dass der verdrängende Textrahmen direkt an die Unterkante anstößt.

Das Skript legt eine neue Ebene 'Textverdränger' an, auf der später die verdrängenden Textrahmen angelegt werden.
Diese Ebene ist nach Beendigung des Skripts gesperrt, damit man beim Versuch, Fußnotentext zu bearbeiten, nicht in dem verdrängenden Rahmen hängen bleibt.

Bei der nächsten Ausführung des Skripts wird diese Ebene mit allen sich auf ihr befindlichen Objekten gelöscht!
Man sollte also darauf achten, dass auf dieser Ebene nichts anderes als diese verdrängenden Textrahmen erzeugt werden. Da die Ebene nach Beendigung des Skripts gesperrt ist, besteht die Gefahr erst dann, wenn ein Dussel die Sperrung aufhebt. ;-)

Im Skript enthalten ist eine Prüfung auf leere Textrahmen in den verketteten Textrahmen. Diese Prüfung ist der Anlage der Ebene und der verdrängenden Textrahmen vorgeschaltet. Wird das Skript fündig, bietet es an, die weitere Ausführung abzubrechen. Das Dokument bleibt in diesem Fall unverändert.

Viele Grüße
Martin



(Dieser Beitrag wurde von Martin Fischer am 24. Mär 2011, 11:53 geändert)