[GastForen Programme Print/Bildbearbeitung Adobe InDesign Zuweisen von zeichenformaten mittels Formatierungs-Tags

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

Zuweisen von zeichenformaten mittels Formatierungs-Tags

Richard Hauck
Beiträge gesamt: 73

20. Nov 2006, 19:19
Beitrag # 1 von 3
Bewertung:
(696 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi Leute,

erstmals vielen Dank an Nimroy und Martin Fischer für das Skript!!! Wirklich ein tolles Ding - DANKE

Ihr habt mir die Arbeit schon öfter vereinfacht und effektive Wege aufgezeigt. Jetzt habe ich aber folgendes Problem mit dem Skript.

Folgendes Scenario: Ich habe ein InDesign Dokument mit Text der in verknüpften Textrahmen fließt. Weiters gibt es dazwischen Tabellen die in seperaten Textfeldern liegen und nicht verknüpft sind.

1) Wenn ich jetz im normalen Fließtext meine Tags zur Formatänderung einbaue funktioniert das Skript perfekt.

2) Wenn ich die Tags in der Tabelle einbaue bekomme ich den Fehler: 'Object is invalid' in der Zeile st.characters.itemByRange(start[myCounter].index, stop[myCounter].index).appliedCharacterStyle=app.activeDocument.characterStyles.item(myCharacterStyle.name);

Wenn ich den Typ des Objektes vor .appliedCharacterStyle=..... abfrage, ist es vom Typ Character

Und jetzt der dubiose Fall 3:
3) Wenn ich die Tags im Fließtext und in der Tabelle einbaue, bekomme ich keine Fehlermeldung mehr, im Fließtext wird das Zeichnformat korrekt zugewiesen, aber in der Tabelle werden nur die Start- und Endtags gelöscht, das Zeichenformat aber nicht zugewiesen.

Da ich erst anfange mich mit dem Skripten in InDesign zu beschäftigen stehe ich mit meiner Weisheit da etwas auf dem Schlauch. Vorallem verstehe ich das unterschiedliche Verhalten nicht, da das Skript ja die Objekte vom Typ Charakter immer erkennt.

Hier noch das Skript, so wie ich es übernommen habe:

// Zuweisen von zeichenformaten mittels Formatierungs-Tags
//
// Marker
var myStart="<h>";
var myEnd="</h>";

var myDocument = app.activeDocument;
var myCharacterStyleName ="Hochgestellt"; // Name des Zeichenformates

app.findPreferences = null; app.changePreferences = null;

// Abfrage, ob Zeichenformat vorhanden - andernfalls Meldung und Abbruch
var myCharacterStyle = myDocument.characterStyles.item(myCharacterStyleName);
try{
myCharacterStyle.name;
}
catch (myError){
myAlert="Es ist kein Zeichenformat mit dem Namen vorhanden. Ein leeres Zeichenformat wurde daher automatisch erzeugt." +"\n" +"Bitte kontrollieren Sie dessen Einstellungen";
alert(myAlert);
myCharacterStyle = myDocument.characterStyles.add({name:myCharacterStyleName,baselineShift:"4", pointSize:"6"});
}

// Auszählen der Start- und End-Tags
start=myDocument.search(myStart,false,false, undefined);
stop=myDocument.search(myEnd,false,false, undefined);

// Wenn eine paarige Anzahl Start- und End-tags gesetzt wurde, wird das Fomat zugewiesen,
// andernfalls wird geprüft, ob überhaupt Tags gesetzt wurden und eine entsprechende Meldung ausgegeben
if(start.length>0 && start.length == stop.length)
{
st=start[0].parentStory;
for ( myCounter=0 ; myCounter < start.length ; myCounter++) {
alert(st.characters.itemByRange(start[myCounter].index, stop[myCounter].index));
st.characters.itemByRange(start[myCounter].index, stop[myCounter].index).appliedCharacterStyle=app.activeDocument.characterStyles.item(myCharacterStyle.name);
}
myDocument.search(myStart,false,false,"");
myDocument.search(myEnd,false,false,"");
}
else
{
if(start.length!=stop.lenght &&start.length!=0){
myText="Ungleiche Anzahl Start- und End-Tags. Bitte überprüfen Sie Ihre Formatierungen" + "\n" + "Start-Tags: " + start.length + "\n" + "Stop-Tags: " + stop.length;
}
else
{
myText="Keine Formatierungsmarker gesetzt" + "\n" + "Start-Tags: " + start.length + "\n" + "Stop-Tags: " + stop.length;
}
alert (myText);
}

Würde mich sehr freuen wenn mir da jemand weiterhelfen könnte.

lg, Richard
X

Zuweisen von zeichenformaten mittels Formatierungs-Tags

Martin Fischer
  
Beiträge gesamt: 12413

20. Nov 2006, 21:36
Beitrag # 2 von 3
Beitrag ID: #262865
Bewertung:
(675 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Richard,

wenn ich mich recht entsinne, dann ist das Skript ursprünglich für einen ausgewählten Textfluß geschrieben wirden und nicht für das ganze Dokument. Ich schick das mal voraus, weil es über das Dokument hinweg, also global betrachtet, problematischer werden könnte, immer die richtigen Zeichenpaare zu finden, als wenn man diese nur in einem Textfluß sucht.

Dein Problem ist vielleicht einfacher zu lösen, als Du denkst. ;-)
Du mußt lediglich zwei Zeilen vertauschen und einen festen Wert durch eine Variable ersetzen.

Doch zunächst grille ich Dich mit etwas Theorie. ;-)
Das Skript sucht Zeichenpaare und weist dem Bereich ab dem ersten Teil eines Paares bis zum zweiten Teil eines Paares ein Zeichenformat zu. Dieser Bereich wird definiert über die Position (Index) der jeweils ersten Zeichen der Treffer im Dokument bei der Suche nach "<h>" und "</h>" - und zwar relativ zum Textfluß (story), in dem sie stehen.

Ist das Zeichenpaar nun in einer Tabelle, wird die Position nicht mehr über den übergeordneten Textfluß bestimmt, sondern über die übergeordnete Zelle. Eltern (parent) eines Zeichens in einer Tabelle ist die Zelle (Eltern (parent) eines Zeichens innerhalb eines Textrahmens ist der Textfluß). Der Bezugspunkt ist also in beiden Fällen "character.parent".
Jetzt müssen wir den Bereich jeweils relativ zum jeweiligen parent definieren:
Die Variable "st" soll für den Bezugsbereich stehen (der Einfachheit halber, dann müssen wir im Skript nichts mehr so viel ändern).

Ursprünglich stand da:
Code
st=start[0].parentStory; 


Da der Suchbereich von ursprünglich einem ausgewählten Textfluß auf das ganze Dokument ausgedehnt wurde, stimmt [b]start[0].parentStory nicht mehr. Bezugspunkt wird der jeweilige übergeordnete Textfluß oder die übergeordnete Zelle. Also bauen wir diese Eltern in die Schleife durch die gefundenen Elemente ein, indem wir die Zeilen

Code
st=start[0].parentStory; 
for ( myCounter=0 ; myCounter < start.length ; myCounter++) {

gegeneinander vertauschen und den festen Wert 0 (für den ersten Treffer) gegen die Variable "myCounter" austauschen:

Code
for ( myCounter=0 ; myCounter < start.length ; myCounter++) {  
st=start[myCounter].parentStory;

Jetzt ist "st" nicht mehr der Textfluß, in dem sich der erste Treffer befindet, sondern der zum jeweiligen Treffer übergeordnete Textfluß.
Bei einem Objekt "character" innerhalb eines normalen Textflusses sind parent und parentStory dasselbe, nämlich der übergeordnete Textfluß. parentStory kann also durch parent ersetzt werden. Bei einem Objekt "character" innerhalb einer Tabelle ist der Bezugspunkt die Zelle (= parent des characters).
Mit "st=start[myCounter].parent" erhalten wir also in beiden Fällen den notwendigen Bezugsrahmen zur Bestimmung der Position.

Das simple Ergebnis lautet also:
Code
for ( myCounter=0 ; myCounter < start.length ; myCounter++) {  
st=start[myCounter].parent; Bezugsrahmen: Textfluß oder Tabellenzelle

Jetzt schlag mich nicht für die vielen Worte, die ich bis dahin verwendet habe. ;-)

Bitte beachte: das Skript funktioniert nicht mit Tags in Fußnoten.

Viele Grüße
Martin




als Antwort auf: [#262837]

Zuweisen von zeichenformaten mittels Formatierungs-Tags

Richard Hauck
Beiträge gesamt: 73

20. Nov 2006, 22:01
Beitrag # 3 von 3
Beitrag ID: #262869
Bewertung:
(666 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi Martin,

Du hast wiedereinmal einen dunklen Bereich etwas aufgehellt ;-) Solltest du einmal in Wien auftauchen ist auf jeden Fall ein Bier drinn!!!;-) (mindestens)

Also vielen Dank für die Lösung und vorallem für die Theorie dahinter!!

lg, Richard


als Antwort auf: [#262865]

Aktuell

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
05.02.2021 - 05.11.2021

Digicomp Academy AG, Limmatstrasse 50, 8005 Zürich
Freitag, 05. Feb. 2021, 13.00 Uhr - Freitag, 05. Nov. 2021, 17.00 Uhr

Lehrgang

Bilden Sie sich zum zertifizierten Publishing-Multimedia-Profi aus. Neben Fotografie und Video befassen Sie sich mit der Medienproduktion, digitalen Publikationen und dem Webdesign für Desktop- und mobile Endgeräte.

Preis: CHF 10'500.-
Dauer: 30 Tage (ca. 210 Lektionen) – Unterricht findet jeweils am Freitag von 13 - 19 Uhr und Samstag von 09 - 17 Uhr statt

Ja

Organisator: Digicomp Academy AG

Kontaktinformation: Kundenberater-Team, E-Mailkundenberatung AT digicomp DOT ch

digicomp.ch/d/9PM

Veranstaltungen
01.03.2021 - 05.03.2021

Persönlichkeitsentwicklung

Online
Montag, 01. März 2021, 00.17 Uhr - Freitag, 05. März 2021, 00.18 Uhr

Webinar

Personal Power Coaching - Um was geht es? ​ Potenzialentfaltung: Potenzial entdecken und entfalten Talente entdecken: Deine Talente und Fähigkeiten erkennen und loslegen Gewohnheiten: schlechte Gewohnheiten durch Positive ersetzen Selbstbewusstsein stärken: Dein Bewusstsein stärken Eigendynamik entwickeln: Mehr Erfolg durch Eigenverantwortung & Disziplin Ängste kontrollieren: Ängste als Antrieb nutzen Entscheidungen treffen: Mit mehr Mut an die Sache ran! Lebensenergie steigern: Deine Lebensenergie steigern und aufrechterhalten Ziele erreichen: Ziele setzen und übertreffen! Motivationssteigerung: Mehr Erfolg durch Selbstmotivation Selbstvertrauen: Selbstvertrauen auf- und ausbauen

Details:
https://www.snfa.ch/swiss-personal-power-birolisik

Ja

Organisator: Birol Isik

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

https://www.snfa.ch/swiss-personal-power-birolisik

Neuste Foreneinträge


Bilder verschieben sich nach dem Speichern und Kopiern der Datei

Verknüpfung mit Format aufheben

Optionsfelder abhängig machen von Kontrollkästchen

Kursivierung geht bei é und É verloren

Abbildungen auf 100 % bringen

Scriptphänomen alle 16 Steps

Alternative Acrobat Pro

Affinity Designer

Objekte in Texten lassen sich nicht mehr mit Maus auswählen, nurnoch als Text mit Cursor

Welches Grafiktablett wofür?
medienjobs