[GastForen Programme Print/Bildbearbeitung Adobe InDesign Der vertikale Keil, das unbekannte Wesen

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

Der vertikale Keil, das unbekannte Wesen

Wolfgang Giersberg
Beiträge gesamt: 26

16. Jan 2007, 22:01
Beitrag # 1 von 11
Bewertung:
(3792 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen,

kann man in ID CS2 folgendes umsetzen?

Ein Dokument muss mit vertikalem Keil gesetzt werden. Zusätzlicher Raum darf nur über Zwischenüberschriften eingefügt werden. Ist das Dokument 2spaltig muss auf der letzten Seite ein Spaltenausgleich durchgeführt werden.

Der „vertikale Blocksatz“ ist hier leider unbrauchbar, da man nicht steuern kann, wo die Abstände eingefügt werden.

Ich frage nur sicherheitshalber nach, um sicherzugehen, dass ich nichts übersehen habe. Muss ich mich wirklich weiter mit dem Dinosaurier Ventura abplagen, der das seit 1990 beherrscht - aber leider ständig abschmiert und insgesamt sehr unzuverlässig ist?

Ach ja, und hat vielleicht jemand etwas zu CS3 gehört? Den Schriftsatz betreffend? Ausser dem Projekt PhotoIndustrator bzw. IlluDesignShop? ;)
X

Der vertikale Keil, das unbekannte Wesen

Martin Fischer
  
Beiträge gesamt: 12714

16. Jan 2007, 22:10
Beitrag # 2 von 11
Beitrag ID: #271022
Bewertung:
(3786 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
> Ein Dokument muss mit vertikalem Keil gesetzt werden.
> Zusätzlicher Raum darf nur über Zwischenüberschriften eingefügt werden.

Möglicherweise könnte für Sie das Script vertikalerKeil_xl.jsx interessant sein.

Allerdings ist diese Version lediglich auf einen einspaltigen Textrahmen hin eingerichtet.


als Antwort auf: [#271019]

Der vertikale Keil, das unbekannte Wesen

Gerald Singelmann
  
Beiträge gesamt: 6268

16. Jan 2007, 22:56
Beitrag # 3 von 11
Beitrag ID: #271031
Bewertung:
(3773 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Zitat Ach ja, und hat vielleicht jemand etwas zu CS3 gehört


Wir werden auch in diesem Jahr nicht müde, dies zu wiederholen, bis Adobe die CS3 offiziell ankündigt:

Wer etwas weiß, sagt nichts. Wer etwas sagt, weiß nichts.

Dass Photoshop CS3 wegen der IntelMacs zur Public Beta wurde, lässt keinerlei Rückschlüsse auf InDesign zu.


als Antwort auf: [#271019]

Der vertikale Keil, das unbekannte Wesen

zaphodbeeblebroxx
Beiträge gesamt: 408

17. Jan 2007, 11:34
Beitrag # 4 von 11
Beitrag ID: #271070
Bewertung:
(3700 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
 
Hallo zusammen,

habe mir vor längerer Zeit mal ein Skript geschrieben, dass bei mehreren markierten Textrahmen, die letzte Zeile sucht, dort eine Hilfslinie setzt (Grundlinie der Zeile) und dann bei den anderen Textrahmen den Raum vor bestimmten Absatzformaten vergrößert, so dass die letzten Zeilen der Rahmen bündig sind.

Das Skript müßte (theoretisch) auch bei Textrahmen mit mehr als einer Spalte funktionieren. Bitte zunächst an einem Testdokument ausprobieren!!!

Die erlaubten Absatz-Formate (vor denen der "Abstand vor" vergrößert werden darf) müssen in Zeile 32 eingetragen werden. Genaue Schreibweise der Formate beachten, sonst "meckert" das Skript!
Dann die Textrahmen markieren, bei denen der "vertikale Keil" eingefügt werden soll.

Code
//VertikalerKeilVorAbsatzformaten.jsx   
//
// Dokument geöffnet?
if (app.documents.length != 0){
}
else{
alert("Kein Dokument geöffnet. Bitte ein Dokument öffnen und den/die Textrahmen auswählen.");
exit();
}

// Irgendetwas markiert?
if (app.selection.length != 0){
}
else{
alert("Nichts markiert! Bitte den/die Textrahmen auswählen.");
exit();
}

var myDoc = app.documents[0];
var mySel = app.selection;
var myLastLine = new Array();
var myDiff = new Array();
var myMaxParas = new Array();
var mySatzspiegelstart = myDoc.marginPreferences.top;
var myBottomMargin = myDoc.marginPreferences.bottom;
var myDocHeight = myDoc.documentPreferences.pageHeight;
var mySatzspiegelend = myDocHeight - myBottomMargin;
var mySpaceBefore = new Array();
var myAllowedParas = ["Ü1", "Ü2", "Ü3"]; // Hier Namen der erlaubten Absatzformate eintragen

for (oneAllowedPara = 0; oneAllowedPara < myAllowedParas.length; oneAllowedPara++){
try {
myDoc.paragraphStyles.item(myAllowedParas[oneAllowedPara]).name;
}
catch (e){
alert("Absatzformat: " + myAllowedParas[oneAllowedPara] + " ist nicht vorhanden! Bitte Skript-Zeile 32 prüfen/ändern");
exit();
}
}


for (oneFrame = 0; oneFrame < mySel.length; oneFrame++){
if (mySel[oneFrame].constructor.name == "TextFrame"){

myMaxParas[oneFrame] = mySel[oneFrame].paragraphs.length;
var myMaxCounter = 0;
for (oneMaxPara = 1; oneMaxPara < myMaxParas[oneFrame]; oneMaxPara++){
for (oneAllowedPara = 0; oneAllowedPara < myAllowedParas.length; oneAllowedPara++){
if (mySel[oneFrame].paragraphs[oneMaxPara].appliedParagraphStyle.name == myAllowedParas[oneAllowedPara]){
var myMaxCounter = myMaxCounter + 1;
}
}
}
myMaxParas[oneFrame] = myMaxCounter;

var myBaseline = mySel[oneFrame].lines.item(-1).baseline - mySatzspiegelstart;

if (myBaseline > mySatzspiegelend){
var myBaseline = mySatzspiegelend;
alert("Mindestens eine Zeile steht unter Satzspiegelende!");
}

myLastLine[oneFrame] = myBaseline;

}
else {
alert ("Nichts markiert / Nur Textrahmen markieren!");
}
}

var myMaxBaseline = myLastLine[0];
var myMaxFrame = 0;

// Letzte Zeile ermitteln
if (mySel.length != 1){
for (oneLine = 0; oneLine < myLastLine.length-1; oneLine++){
if (myLastLine[oneLine+1] > myLastLine[oneLine]){
var myMaxBaseline = myLastLine[oneLine+1];
var myMaxFrame = oneLine;
}
}
}

for (oneLine = 0; oneLine < myLastLine.length; oneLine++){
myDiff[oneLine] = myMaxBaseline - myLastLine[oneLine];
mySpaceBefore[oneLine] = myDiff[oneLine]/(myMaxParas[oneLine]);

}

mySpread = app.activeWindow.activeSpread;
mySpread.guides.add(undefined, {orientation:HorizontalOrVertical.horizontal, location:(myMaxBaseline + mySatzspiegelstart)});

for (oneFrame = 0; oneFrame < mySel.length; oneFrame++){
for (onePara = 1; onePara < mySel[oneFrame].paragraphs.length; onePara++){
for (oneAllowedPara = 0; oneAllowedPara < myAllowedParas.length; oneAllowedPara++){
if (mySel[oneFrame].paragraphs[onePara].appliedParagraphStyle.name == myAllowedParas[oneAllowedPara]){
var myParaSpaceBefore = mySel[oneFrame].paragraphs[onePara].spaceBefore;
var myParaSpaceBefore = myParaSpaceBefore + mySpaceBefore[oneFrame];
try{
mySel[oneFrame].paragraphs[onePara].spaceBefore = myParaSpaceBefore;
}
catch (e) {}
}
}
}
}



zaphodbeeblebroxx


als Antwort auf: [#271031]

Der vertikale Keil, das unbekannte Wesen

Wolfgang Giersberg
Beiträge gesamt: 26

17. Jan 2007, 15:44
Beitrag # 5 von 11
Beitrag ID: #271163
Bewertung:
(3664 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Vielen Dank für Eure Script-Tips. Werde aber wohl erst mal weiter den VP hassen. ;) Jedesmal das Script zu starten und dann Abstände korrigieren, Script wieder starten, ... dauert einfach zu lange. Das muss - wie man so sagt - on the fly passieren. Naja, ich hoffe dann mal auf CS 3 oder 4 oder ...


als Antwort auf: [#271070]

Der vertikale Keil, das unbekannte Wesen

zaphodbeeblebroxx
Beiträge gesamt: 408

17. Jan 2007, 16:06
Beitrag # 6 von 11
Beitrag ID: #271169
Bewertung:
(3651 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

funktioniert mein Skript in Deinem Fall nicht? So aufwändig finde ich die Bearbeitung per Skript eigentlich nicht:
1. Tastaturbefehl für Skript definieren
2. Absatzformate, bei denen "Abstand vor" angewendet werden darf in Skript eintragen.
3. Betroffene Textrahmen je Doppelseite markieren
4. Skript per Tastaturbefehl starten.

Da ich in meinem Fall nicht im kompletten Dokument einen "vertikalen Keil" benötigt habe, ist das Skript so aufgebaut, dass man die betroffenen Rahmen (je Einzel-/Doppelseite) manuell auswählen kann.
Man könnte das Skript auch ändern, damit es alle Seiten/Textrahmen je Dokument bearbeitet.

Leider habe ich aber momentan keine Zeit für eine Änderung an meinem Skript ...

zaphodbeeblebroxx


als Antwort auf: [#271163]

Der vertikale Keil, das unbekannte Wesen

Wolfgang Giersberg
Beiträge gesamt: 26

17. Jan 2007, 16:49
Beitrag # 7 von 11
Beitrag ID: #271177
Bewertung:
(3628 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Zaphod,

das Script funktioniert teilweise. Da es sich an der letzten Zeile orientiert, wird nicht immer der ganze Rahmen gefüllt und bei mehrspaltigen Rahmen wird nur die rechte Spalte ausgerichtet.

Wäre es möglich, die Bezugshilfslinie immer direkt auf das untere Ende des Rahmens zu setzen und dann vertikal auszutreiben? Also unabhängig davon, wo die letzte Zeile vor Aktivierung des Scripts steht.


als Antwort auf: [#271169]

Der vertikale Keil, das unbekannte Wesen

zaphodbeeblebroxx
Beiträge gesamt: 408

17. Jan 2007, 17:34
Beitrag # 8 von 11
Beitrag ID: #271182
Bewertung:
(3608 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
 
Hallo Wolfgang,

das geht schon, aber leider fehlt mir momentan die Zeit das Skript zu ändern ...

... falls Du selbst an dem Skript arbeiten möchtest:

Anstatt nach der letzten Zeile mit dem größten Y-Wert (der Grundlinie) innerhalb der markierten Rahmen zu suchen müssten nur die Höhen der markierten Textrahmen geprüft werden (geometricBounds[2]-geometricBounds[0]), um den Rahmen mit der max. Höhe zu ermitteln.

Wenn der Y-Wert der Grundlinie (+oberer Satzspiegelrand) der letzten Zeile eines Rahmens kleiner ist als die max. Textrahmenhöhe wird der vert. Keil vor den "erlaubten" Formaten eingefügt.

Allerdings muss die Grundlinie der letzten Zeile eines Textrahmens exakt auf dem unteren Rand des Textrahmens liegen, sonst stimmt die Berechnung nicht (Textrahmen markieren + Apfel+Alt+C).

Die Berücksichtigung von mehrern Spalten je Textrahmen ist in meinem Skript auch nicht enthalten, da ich es nur für ein Dokument mit einspaltigen Textrahmen benötigt habe. Dies müsste auch noch ergänzt werden ...

Viel Spass beim Skripten ...

zaphodbeeblebroxx


als Antwort auf: [#271177]

Der vertikale Keil, das unbekannte Wesen

zaphodbeeblebroxx
Beiträge gesamt: 408

17. Jan 2007, 19:08
Beitrag # 9 von 11
Beitrag ID: #271191
Bewertung:
(3593 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Wolfgang,

hier noch ein Versuch:

Code
//VertikalerKeilInFrames.jsx   
//
//
// Dokument geöffnet?
if (app.documents.length != 0){
}
else{
alert("Kein Dokument geöffnet. Bitte ein Dokument öffnen und den/die Textrahmen auswählen.");
exit();
}

// Irgendetwas markiert?
if (app.selection.length != 0){
}
else{
alert("Nichts markiert! Bitte den/die Textrahmen auswählen.");
exit();
}

var myDoc = app.documents[0];
var mySel = app.selection;
var myLastLine = new Array();
var myDiff = new Array();
var myMaxParas = new Array();
var myHeight = new Array();
var mySatzspiegelstart = myDoc.marginPreferences.top;
var myBottomMargin = myDoc.marginPreferences.bottom;
var myDocHeight = myDoc.documentPreferences.pageHeight;
var mySatzspiegelend = myDocHeight - myBottomMargin;
var mySpaceBefore = new Array();
var myAllowedParas = ["Ü1", "Ü2", "Ü3"]; // Hier Namen der erlaubten Absatzformate eintragen
// Formate prüfen
for (oneAllowedPara = 0; oneAllowedPara < myAllowedParas.length; oneAllowedPara++){
try {
myDoc.paragraphStyles.item(myAllowedParas[oneAllowedPara]).name;
}
catch (e){
alert("Absatzformat: " + myAllowedParas[oneAllowedPara] + " ist nicht vorhanden! Bitte Skript-Zeile 32 prüfen/ändern");
exit();
}
}
// Max Textrahmen/Textrahmenhöhe bestimmen
var myMaxFrameHeight = 0;
var myMaxFrameNr = 0;
for (oneFrame = 0; oneFrame < mySel.length; oneFrame++){
if (mySel[oneFrame].constructor.name == "TextFrame"){
var myHeight = mySel[oneFrame].geometricBounds[2] - mySel[oneFrame].geometricBounds[0];
if(myHeight > myMaxFrameHeight){
var myMaxFrameHeight = myHeight;
}
}
}
// Anzahl der erlaubten Formate je Rahmen/Spalte finden
for (oneFrame = 0; oneFrame < mySel.length; oneFrame++){
if (mySel[oneFrame].constructor.name == "TextFrame"){
var myColumns = mySel[oneFrame].textFramePreferences.textColumnCount;
for (oneCol = 0; oneCol < myColumns; oneCol++){
var myBaseline = mySel[oneFrame].textColumns.item(oneCol).lines.item(-1).baseline - mySatzspiegelstart;
// Erlaubte Formate in Spalte zählen
var myColParas = mySel[oneFrame].textColumns.item(oneCol).paragraphs;
var myMaxCounter = 0;
for (oneMaxPara = 1; oneMaxPara < myColParas.length; oneMaxPara++){
for (oneAllowedPara = 0; oneAllowedPara < myAllowedParas.length; oneAllowedPara++){
if (mySel[oneFrame].textColumns.item(oneCol).paragraphs[oneMaxPara].appliedParagraphStyle.name == myAllowedParas[oneAllowedPara]){
var myMaxCounter = myMaxCounter + 1;
}
}
}
if (myMaxCounter != 0){
var myDiff = myMaxFrameHeight - myBaseline;
var mySpaceBefore = myDiff/myMaxCounter;
//
for (oneMaxPara = 1; oneMaxPara < myColParas.length; oneMaxPara++){
for (oneAllowedPara = 0; oneAllowedPara < myAllowedParas.length; oneAllowedPara++){
if (mySel[oneFrame].textColumns.item(oneCol).paragraphs[oneMaxPara].appliedParagraphStyle.name == myAllowedParas[oneAllowedPara]){
var myParaSpaceBefore = mySel[oneFrame].textColumns.item(oneCol).paragraphs[oneMaxPara].spaceBefore;
var myParaSpaceBefore = myParaSpaceBefore + mySpaceBefore;
try{
mySel[oneFrame].textColumns.item(oneCol).paragraphs[oneMaxPara].spaceBefore = myParaSpaceBefore;
}
catch (e) {}
}
}
}
}
}
}
}


Habe das Skript "auf die Schnelle" geändert und ein paar Test durchgeführt. Ist zwar nicht perfekt programmiert, aber meine Tests hat das Skript bestanden.
Spalten werden nun berücksichtigt. Allerdings muss wie bereits erwähnt die Grundlinie der letzten Textzeile des Referenz-Textrahmen (der mit der max. Höhe) mit der Unterkante des Rahmens bündig sein! Sonst stimmt die Berechnung des vertikalen Keils nicht.
(D.h. eigentlich müssen alle Rahmen gleich hoch sein, sonst macht der vertikale Keil keinen Sinn!)

Bitte zunächst nur in einem Testdokument verwenden, da mir die Zeit für ausgiebige Tests momentan fehlt ...


zaphodbeeblebroxx


als Antwort auf: [#271182]

Der vertikale Keil, das unbekannte Wesen

Wolfgang Giersberg
Beiträge gesamt: 26

17. Jan 2007, 22:37
Beitrag # 10 von 11
Beitrag ID: #271214
Bewertung:
(3574 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Zaphod,

danke für die neue Version. Es funktioniert grundsätzlich, macht aber leider nicht das was ich brauche. Der Spaltenausgleich auf der letzten Seite müsste so aussehen, dass wenn z.B. nur die linke Spalte gefüllt, die rechte jedoch leer ist, beide Spalten auf gleicher Höhe enden - also ungefähr in der vertikalen Mitte der Seite.

Und dann bräuchte es noch die Möglichkeit, den maximalen Raum zu definieren, der oberhalb von z.B. Ü1 eingefügt wird. Dto. für alle anderen betroffenen Formate.

Das ist halt die Krux, Ventura bietet all das - also die Möglichkeit, den "typografischen Holzhammer" "Vertikaler Keil" sehr fein einzustellen, so dass es hinterher gar nicht mal soooo übel aussieht . Wenn das Programm bloß nicht so schlecht programmiert wäre. Diese Funktionen in InDesign per Script nachzurüsten halte ich für mehr oder weniger unmöglich bzw. schlicht zu aufwendig.


als Antwort auf: [#271191]

Der vertikale Keil, das unbekannte Wesen

zaphodbeeblebroxx
Beiträge gesamt: 408

18. Jan 2007, 09:33
Beitrag # 11 von 11
Beitrag ID: #271245
Bewertung:
(3543 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Wolfgang,

InDesign bietet zwar viele Möglichkeiten, aber halt nicht alle ...
dennoch kann man dem Programm per Skript auf die Sprünge helfen.

Den max. Raum vor den Formaten, bei denen Raum vor eingebracht werden darf kann man relativ leicht nachrüsten:
Ein Array mit den max. Werten für Abstand vor zu jedem erlaubten Absatzformat erzeugen.

In der Schleife, in der der Abstand vor zu den gefundenen Formaten hinzugefügt wird prüfen, ob der errechnete Abstand vor größer ist als der max. erlaubte. Falls ja, den max. erlaubten Raum einfügen, falls nein den errechneten Raum einfügen.

Der von Dir gewünschten Spaltenausgleich auf der letzen Seite wäre als Skript ebenfalls umsetzbar, falls ich mal wieder etwas Zeit übrig habe werde ich mir das mal ansehen.



Code
//VertikalerKeilInFrames.jsx   
//
//
// Dokument geöffnet?
if (app.documents.length != 0){
}
else{
alert("Kein Dokument geöffnet. Bitte ein Dokument öffnen und den/die Textrahmen auswählen.");
exit();
}

// Irgendetwas markiert?
if (app.selection.length != 0){
}
else{
alert("Nichts markiert! Bitte den/die Textrahmen auswählen.");
exit();
}

var myDoc = app.documents[0];
var mySel = app.selection;
var mySatzspiegelstart = myDoc.marginPreferences.top;
var myBottomMargin = myDoc.marginPreferences.bottom;
var myDocHeight = myDoc.documentPreferences.pageHeight;
var mySatzspiegelend = myDocHeight - myBottomMargin;
var myAllowedParas = ["Ü1", "Ü2", "Ü3"]; // Hier Namen der erlaubten Absatzformate eintragen
var myMaxSpaceBefore = [10, 10, 10]; // Hier den max. Abstand vor einfügen
// Formate prüfen
for (oneAllowedPara = 0; oneAllowedPara < myAllowedParas.length; oneAllowedPara++){
try {
myDoc.paragraphStyles.item(myAllowedParas[oneAllowedPara]).name;
}
catch (e){
alert("Absatzformat: " + myAllowedParas[oneAllowedPara] + " ist nicht vorhanden! Bitte Skript-Zeile 32 prüfen/ändern");
exit();
}
}
// Max Textrahmen/Textrahmenhöhe bestimmen
var myMaxFrameHeight = 0;
var myMaxFrameNr = 0;
for (oneFrame = 0; oneFrame < mySel.length; oneFrame++){
if (mySel[oneFrame].constructor.name == "TextFrame"){
var myHeight = mySel[oneFrame].geometricBounds[2] - mySel[oneFrame].geometricBounds[0];
if(myHeight > myMaxFrameHeight){
var myMaxFrameHeight = myHeight;
}
}
}
// Anzahl der erlaubten Formate je Rahmen/Spalte finden
for (oneFrame = 0; oneFrame < mySel.length; oneFrame++){
if (mySel[oneFrame].constructor.name == "TextFrame"){
var myColumns = mySel[oneFrame].textFramePreferences.textColumnCount;
for (oneCol = 0; oneCol < myColumns; oneCol++){
var myBaseline = mySel[oneFrame].textColumns.item(oneCol).lines.item(-1).baseline - mySatzspiegelstart;
// Erlaubte Formate in Spalte zählen
var myColParas = mySel[oneFrame].textColumns.item(oneCol).paragraphs;
var myMaxCounter = 0;
for (oneMaxPara = 1; oneMaxPara < myColParas.length; oneMaxPara++){
for (oneAllowedPara = 0; oneAllowedPara < myAllowedParas.length; oneAllowedPara++){
if (mySel[oneFrame].textColumns.item(oneCol).paragraphs[oneMaxPara].appliedParagraphStyle.name == myAllowedParas[oneAllowedPara]){
var myMaxCounter = myMaxCounter + 1;
}
}
}
if (myMaxCounter != 0){
var myDiff = myMaxFrameHeight - myBaseline;
var mySpaceBefore = myDiff/myMaxCounter;
//
for (oneMaxPara = 1; oneMaxPara < myColParas.length; oneMaxPara++){
for (oneAllowedPara = 0; oneAllowedPara < myAllowedParas.length; oneAllowedPara++){
if (mySel[oneFrame].textColumns.item(oneCol).paragraphs[oneMaxPara].appliedParagraphStyle.name == myAllowedParas[oneAllowedPara]){
var myParaSpaceBefore = mySel[oneFrame].textColumns.item(oneCol).paragraphs[oneMaxPara].spaceBefore;
var myParaSpaceBefore = myParaSpaceBefore + mySpaceBefore;
if (myParaSpaceBefore <= myMaxSpaceBefore[oneAllowedPara]){
try{
mySel[oneFrame].textColumns.item(oneCol).paragraphs[oneMaxPara].spaceBefore = myParaSpaceBefore;
}
catch (e) {}
}
else {
try{
mySel[oneFrame].textColumns.item(oneCol).paragraphs[oneMaxPara].spaceBefore = myMaxSpaceBefore[oneAllowedPara];
}
catch (e) {}
}
}
}
}
}
}
}
}



zaphodbeeblebroxx


als Antwort auf: [#271214]
X