[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Absatzstilvorlage mit Tabulator definieren

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

Absatzstilvorlage mit Tabulator definieren

sleepless
Beiträge gesamt: 152

17. Nov 2010, 10:09
Beitrag # 1 von 21
Bewertung:
(5127 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

ich bin gerade dabei, ein Skript zu schreiben, das nur ein Dokument öffnen, einen Preiswischer platzieren und skalieren und - jetzt kommt das Problem - eine Absatzstilvorlage mit zwei (unterschiedlichen) Tabulatoren anlegen soll.
Bis jetzt war das alles nicht wirklich schwierig, aber bei der Absatzstilvorlage komme ich nicht weiter. Ich kann die Schrift definieren, Farbe, Größe, etc., aber wie definiere ich einen rechtsbündigen Tabulator auf 10 mm und einen linksbündigen auf 10,5 mm?
Oder geht das vielleicht garnicht?

Vielen Dank für Eure Hilfe.

Stephan
X

Absatzstilvorlage mit Tabulator definieren

Hans Haesler
  
Beiträge gesamt: 5826

17. Nov 2010, 10:28
Beitrag # 2 von 21
Beitrag ID: #457203
Bewertung:
(5118 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Stephan,

doch, das geht. :-) Aber welche Version von InDesign verwendest Du?

Hier eine Demo, welche auch mit CS2 funktioniert.

Code
var curDoc = app.documents[0]; 
var newStyle = curDoc.paragraphStyles.add();
newStyle.name = "TabDemo";
newStyle.tabList = [{alignment:TabStopAlignment.rightAlign, position:10}, {alignment:TabStopAlignment.leftAlign, position:10.5}];

Gruss, Hans


als Antwort auf: [#457195]

Absatzstilvorlage mit Tabulator definieren

sleepless
Beiträge gesamt: 152

17. Nov 2010, 10:33
Beitrag # 3 von 21
Beitrag ID: #457204
Bewertung:
(5115 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

oh, sorry; ich wusste, ich hab was vergessen...
Ich benutze im Moment CS4, aber ich denke, mein Arbeitgeber wird bald auf CS5 umsteigen.
Danke für das Skript, ich probier das gleich mal aus.

Schönen Arbeitstag noch
Stephan


als Antwort auf: [#457203]

Absatzstilvorlage mit Tabulator definieren

Hans Haesler
  
Beiträge gesamt: 5826

17. Nov 2010, 11:35
Beitrag # 4 von 21
Beitrag ID: #457208
Bewertung:
(5081 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Stephan,

bitteschön.

Eine Ergänzung: Laut Object Model von CS4 ist "leftAlign" mit Grossbuchstaben und Underscore zu schreiben: "LEFT_ALIGN".

Weshalb weiss ich nicht. Dadurch wird einzig die Zeile länger.

Im Gegensatz zu CS2 muss beim Erzeugen des Formates nicht zuerst ein leeres Format angelegt werden, welches man anschliessend benennt und weitere Attribute ändert.

Mit CS4 kann der Name des Formates gleich in die add-Klammern gesetzt werden.

Die Tablist kann im voraus definiert und dann als Variable zugewiesen werden.

Code
var curDoc   = app.documents[0]; 
var tabStops = new Array ({alignment:TabStopAlignment.RIGHT_ALIGN, position:10},
{alignment:TabStopAlignment.LEFT_ALIGN, position:10.5});
var newStyle = curDoc.paragraphStyles.add({name:"TabDemo", tabList:tabStops});

Gruss, Hans


als Antwort auf: [#457204]

Absatzstilvorlage mit Tabulator definieren

sleepless
Beiträge gesamt: 152

17. Nov 2010, 12:43
Beitrag # 5 von 21
Beitrag ID: #457216
Bewertung:
(5062 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

danke Dir erstmal für die Hilfe. Dein CS2-Code hat auch in CS4 funktioniert.
Ich habe das ganze so gemacht:
Code
var myParagraphStyle           = myDocument.paragraphStyles.add(); 
myParagraphStyle.name = "ps_eupr";
myParagraphStyle.tabList = [{alignment:TabStopAlignment.rightAlign, position:12.7}, {alignment:TabStopAlignment.leftAlign, position:13}]
myParagraphStyle.appliedFont = "Helvetica";
myParagraphStyle.pointSize = 24;
myParagraphStyle.verticalScale = 95;
myParagraphStyle.fillTint = 100;
myParagraphStyle.hyphenation = false;
myParagraphStyle.overprintFill = true;


Was meinst Du? Ach, weil ich eh gerade schreibe:
Ich brauch noch eine Zeichenstilvorlage und such mir grad nen Wolf, weil ich den Syntax vergessen hab. Wie heißt das nochmal?

Danke + Grüße
Stephan


als Antwort auf: [#457208]

Absatzstilvorlage mit Tabulator definieren

sleepless
Beiträge gesamt: 152

17. Nov 2010, 13:27
Beitrag # 6 von 21
Beitrag ID: #457223
Bewertung:
(5034 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo nochmal,

ich habe inzwischen den Befehl "CharakterStyle" gefunden.

Gruß
Stephan


als Antwort auf: [#457216]

Absatzstilvorlage mit Tabulator definieren

Hans Haesler
  
Beiträge gesamt: 5826

17. Nov 2010, 13:30
Beitrag # 7 von 21
Beitrag ID: #457224
Bewertung:
(5034 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Stephan,

also ... ich würde all die my weglassen.

Code
var curDoc              = app.documents[0]; 
var paraStyle = curDoc.paragraphStyles.add();
paraStyle.name = "ps_eupr";
paraStyle.tabList = [{alignment:TabStopAlignment.rightAlign, position:12.7}, {alignment:TabStopAlignment.leftAlign, position:13}];
paraStyle.appliedFont = "Helvetica";
paraStyle.pointSize = 24;
paraStyle.verticalScale = 95;
paraStyle.fillTint = 100;
paraStyle.hyphenation = false;
paraStyle.overprintFill = true;

Statt die Attribute eines nach dem anderen zuzuweisen, kann properties verwendet werden:

Code
var curDoc           = app.documents[0]; 
var paraStyle = curDoc.paragraphStyles.add();
paraStyle.name = "ps_eupr";
paraStyle.tabList = [{alignment:TabStopAlignment.rightAlign, position:12.7}, {alignment:TabStopAlignment.leftAlign, position:13}];
paraStyle.properties = {appliedFont:"Helvetica", pointSize:24, verticalScale:95,
fillTint:100, hyphenation:false, overprintFill:true};

Das ist zwar etwas weniger übersichtlich, spart aber Zeilen.

Dann gibt es noch die Form mit with():

Code
var curDoc      = app.documents[0]; 
var paraStyle = curDoc.paragraphStyles.add();
with (paraStyle) {
name = "ps_eupr";
tabList = [{alignment:TabStopAlignment.rightAlign, position:12.7},
{alignment:TabStopAlignment.leftAlign, position:13}];
appliedFont = "Helvetica";
pointSize = 24;
verticalScale = 95;
fillTint = 100;
hyphenation = false;
overprintFill = true;
}

Für ein Zeichenformat musst Du characterStyles benutzen.

Gruss, Hans


als Antwort auf: [#457216]

Absatzstilvorlage mit Tabulator definieren

sleepless
Beiträge gesamt: 152

17. Nov 2010, 14:31
Beitrag # 8 von 21
Beitrag ID: #457238
Bewertung:
(5011 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

dankeschön; ich glaube, ich werde der Übersichtlichkeit halber das Ganze mit with aufbauen.

Sag mal, wenn ich später einem Textrahmen einen Absatzstil zuweisen will, brauche ich dann die Variable "paraStyle" oder schreibe ich einfach "ps_eupr". Es sind nämlich ein paar Absatz- und Zeichenstile, die ich definiere, und wenn ich immer die gleiche Variable benutze, geht das ja dann nicht.

Warum würdest Du die my weglassen? Mir hilft das eigentlich zu erkennen, dass es sich um eine von mir geschaffene Variable handelt und nicht um InDesign-Code.
Oh je, jetzt hab ich mich aber als Neuling geoutet ;-)

Danke nochmal.
Stephan


als Antwort auf: [#457224]

Absatzstilvorlage mit Tabulator definieren

Martin Fischer
  
Beiträge gesamt: 12783

17. Nov 2010, 14:35
Beitrag # 9 von 21
Beitrag ID: #457241
Bewertung:
(5006 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

Antwort auf: ich würde all die my weglassen


Wenn wir schon dabei sind ...

Ich habe einst mit my angefangen (meinen Vorbildern wie Dave Saunders nachgemacht).
Weil man dann Variablennamen schnell von Objektnamen und Eigenschaften unterscheiden kann.

Peter Kahrel hat mir – wie auch Du oben – vor einiger Zeit empfohlen, mit den mys aufzuhören. Allerdings plädiert er auch dafür, bei Variablennamen nicht die BinnenMajuskel (camelCase), wie wir sie von JavaScript, den Objektnamen und den Bezeichnungen der Eigenschaften kennen, zu übernehmen, sondern, um diese für's Auge besser davon abzugrenzen, nur klein zu schreiben.

Eine zusätzliche Hilfe für die Identifizierung von Variablennamen bieten Zeichen wie '_', die sonst in JavaScript keine Verwendung haben.


Bei Konstrukten wie paraStyle.name muss ein WenigerGeübter oder ein Fremder oft überlegen und prüfen, ob paraStyle nun tatsächlich ein eingeführter Variablennamen ist oder ein Objekt bzw. eine Eigenschaft, die ggf. oben irgendwo durch eine with-Klammer abgekürzt wird.

Oft schlagen bei mir alte Gewohnheiten (mit dem 'my') noch durch – zumal ich öfters alten Code als Basis bzw. Textbaustein verwende. Aber mir leuchten die Vorschläge von Peter ein und ich versuche, mich daran zu orientieren.


Zu den with-Anweisungen weist Douglas Crockford in seinem Buch "Das Beste an JavaScript" (ein Buch für Fortgeschrittene) im Kapitel "Schlechte Seiten" auf Folgendes hin:

Zitat von S. 118 JavaScript besitzt eine with-Anweisung, die als Kurzform für den Zugriff auf die Eigenschaften eines Objekts gedacht war. Leider sind die Ergebnisse manchmal nicht vorhersehbar, weshalb man sie meiden sollte.


Ich hatte zwar bislang in meinem Code keine Probleme mit with-Anweisungen.
Aber wenn mit ihrer Verwendung Risiken verbunden sind, dann verzichte ich lieber auf diese schöne Abkürzung.


als Antwort auf: [#457224]
(Dieser Beitrag wurde von Martin Fischer am 17. Nov 2010, 14:38 geändert)

Absatzstilvorlage mit Tabulator definieren

Martin Fischer
  
Beiträge gesamt: 12783

17. Nov 2010, 14:56
Beitrag # 10 von 21
Beitrag ID: #457247
Bewertung:
(4992 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: Zu den with-Anweisungen weist Douglas Crockford ...


Das verwendete Beispiel:


»Die Anweisung

Code
with (obj) { 
a = b;
}


macht das Gleiche wie:

Code
if (obj.a === undefinded) { 
a = obj.b === undefined ? b : obj.b;
} else {
obj.a = obj.b. === undefined ? b : obj.b;
}


Sie entspricht daher einer der folgenden Anweisungen:

Code
a = b; 
a = obj.b;
obj.a = b;
obj.a = obj.b;


Wenn Sie das Programm lesen, können Sie nicht vorhersagen, welche dieser Anweisungen ausgeführt wird. Das kann sich von einer Programmausführung zur nächsten ändern. Das kann auch variieren, während das Programm läuft. Wenn Sie ein Programm nicht lesen können, ohne zu verstehen, was vorgeht, können Sie sich auch nicht sicher sein, dass es genau das tut, was Sie wollen.

Allein durch die Tatsache, dass sie in der Sprache vorhanden ist, verlangsamt die with-Anweisung JavaScript-Pozessoren deutlich, weil sie die lexikalische Bindung der Variablennamen frustriert. Sie war gut gedacht, aber die Sprache wäre ohne sie besser dran.«


als Antwort auf: [#457241]

Absatzstilvorlage mit Tabulator definieren

Hans Haesler
  
Beiträge gesamt: 5826

17. Nov 2010, 15:07
Beitrag # 11 von 21
Beitrag ID: #457250
Bewertung:
(4980 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin, hallo Stephan,

wer sich an den my nicht stört, soll sie ruhig verwenden.
Aber für mich ist das eine Baby-Sprache, welche mühsam zu lesen ist.

Warum so ...
Code
var myBounds = myTextFrame.geometricBounds; 
var myY1 = myBounds[0];
var myX1 = myBounds[1];
var myY2 = myBounds[2];
var myX2 = myBounds[3];

... wo man vor lauter my den Wald nicht mehr sieht?

So ist es für mich klarer:
Code
var gB = curFrame.geometricBounds; 
var y1 = gB[0];
var x1 = gB[1];
var y2 = gB[2];
var x2 = gB[3];

Zudem komme ich vom AppleScript her, wo my ein reservierter Ausdruck ist. Er wird z.B. benutzt, um aus einem tell-Block heraus einen Handler aufzurufen. Und da sieht ein ...

Code
my myGetBounds(myTextFrame); 

... doppelt schlimm aus.

Die Warnung vor der with()-Form habe ich auch schon gehört (danke Martin für das Beispiel). Dennoch verwende ich sie nur für Dialoge.

@ Stephan: Für das Zuweisen der Formate ist es besser, den Namen zu benutzen ...

Code
... appliedParagraphStyle = curDoc.paragraphStyles.itemByName("ps_eupr"); 

... oder eine Referenz:

Code
// oben vorbereiten ... 
var pStyle_01 = curDoc.paragraphStyles.itemByName("ps_eupr");
//
//
// ... und viele Zeilen weiter unten verwenden
... appliedParagraphStyle = pStyle_01;

Gruss, Hans


als Antwort auf: [#457247]

Absatzstilvorlage mit Tabulator definieren

Hans Haesler
  
Beiträge gesamt: 5826

17. Nov 2010, 15:09
Beitrag # 12 von 21
Beitrag ID: #457251
Bewertung:
(4976 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Stephan,

noch etwas: Bei der Schrift sollte nebst der Schriftfamilie auch der Schriftstil definiert werden.

Das kann man entweder mit einer eigenen Zeile ...

Code
var curDoc              = app.documents[0]; 
var charStyle = curDoc.characterStyles.add();
charStyle.name = "demo";
charStyle.appliedFont = "Times New Roman";
charStyle.fontStyle = "Bold";

... oder beim appliedFont unterbringen:

Code
var curDoc              = app.documents[0]; 
var charStyle = curDoc.characterStyles.add();
charStyle.name = "demo";
charStyle.appliedFont = "Times New Roman Bold";

Als Trenner (zwischen Familie und Stil) muss dabei ein Tab getippt werden.

Gruss, Hans


als Antwort auf: [#457250]

Absatzstilvorlage mit Tabulator definieren

sleepless
Beiträge gesamt: 152

17. Nov 2010, 15:27
Beitrag # 13 von 21
Beitrag ID: #457255
Bewertung:
(4963 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

Antwort auf: [..]Für das Zuweisen der Formate ist es besser, den Namen zu benutzen ...[..]


Ok, dachte ich mir fast. Sonst müsste man ja den Namen nicht definieren, wenn man ihn nicht irgendwo bräuchte.

Antwort auf: noch etwas: Bei der Schrift sollte nebst der Schriftfamilie auch der Schriftstil definiert werden.


Stimmt. Daran habe ich noch überhaupt nicht gedacht, weil es eh der Regular-Schnitt werden wird. Aber ist wahrscheinlich sicherer, den Schnitt mitzudefinieren.

Das mit dem my leuchtet mir ein. Ich habe es zwar nicht für die Koordinaten-Variablen verwendet, aber die Idee von Martin mit den Unterstrichen gefällt mir. Wahrscheinlich dürfen sie nur nicht am Anfang stehen, oder?

Viele Grüße
Stephan


als Antwort auf: [#457250]

Absatzstilvorlage mit Tabulator definieren

SamiSalami
Beiträge gesamt: 66

17. Nov 2010, 15:53
Beitrag # 14 von 21
Beitrag ID: #457264
Bewertung:
(4949 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Also ich bin ja auch liebender "my"-Verwender und da dachte ich, ich sag auch mal was ;-)

Nachdem ich mir eure Beiträge fleißig durchgelesen habe, bin ich zu dem Schluss gekommen, dass es beim inDesignskripting tatsächlich eher "blödsinnig" ist - was aber ganz klar daran liegt, dass man mit einem bestehen Klassenmodell arbeitet und zum Großteil nur Variablen oder Objektreferenzen verwendet (selten wirklich Objekte).
Allerdings ist es Gang und Gebe in OOP-basierten Sprachen erzeugte Objekte mit "my" anzuführen. Macht auch nicht jeder, ist aber - meiner Meinung nach - durchaus sinnvoll.
Normalerweise benenne ich Variablen nie mit "my", Objekte allerdings schon. Es ist einfach sprachlich schön zu lesen und sinnig. myCar von der Klasse Car hat folgende Eigenschaften...
Ich kenne durchaus auch viele die ihre Objekte mit einem "new" im Namen kennzeichnen, ist auch okay - führt allerdings zu vielen "news" ;-)

Also für meinen Fall habe ich das "my" beim inDesign-Skripting tatsächlich mit in die Variablen-Ebene genommen - kommt vom fiesen "runterskripten" - und werde das somit wieder ändern.
Aber es sollte nich unerwähnt bleiben, dass "my" ganz und gar nichts mit "baby-Programmierung" zu tun hat, sondern bei eigens aufgebauter schöner OOP durchaus seinen Zweck erfüllt!

Liebe Grüße,
Sami


als Antwort auf: [#457250]

Absatzstilvorlage mit Tabulator definieren

sleepless
Beiträge gesamt: 152

17. Nov 2010, 16:21
Beitrag # 15 von 21
Beitrag ID: #457270
Bewertung:
(4927 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans, hallo Martin, hallo Sami,

gibt es eigentlich einen Unterschied zwischen paragraphStyles und charakterStyles im Syntax?

Ich schrieb:
Code
var cur_doc   = app.documents[0]; 
var par_st = cur_doc.paragraphStyles.add();
var cha_st = cur_doc.charakterStyles.add();

bekomme aber die Fehlermeldung "Objekt unterstützt Eigenschaft oder Methode CharakterStyles nicht. Kommentiere ich die CharakterStyles-Variablen und lasse nur die ParagraphStyles übrig, funktioniert alles tadellos.
Ich sehe leider den Unterschied zu dem von Dir geposteten Code nicht.

Die Hilfe im ExtendedToolKit hat mich auch nicht wirklich weitergebracht.

Danke für Eure Hilfe
Stephan


als Antwort auf: [#457251]
X