Forenindex » Programme » Print/Bildbearbeitung » Adobe InDesign » Ein JavaScript zum Ausrichten tabellarischer Texte

Ein JavaScript zum Ausrichten tabellarischer Texte

Hans Haesler
Beiträge gesamt: 5826

24. Apr 2014, 20:44
Bewertung:

gelesen: 7039

Beitrag als Lesezeichen
Hallo InDesign-Fans,

kommt immer wieder vor: Ein paar Absätze mit tabellarischer Darstellung. Und man möchte die Abstände zwischen den Spalten gleichmässig aufteilen. Manuell ist das gar nicht so rasch gemacht. Aber per Script geht das sehr fix.

Das JavaScript TabStopVerteiler ist hier erhältlich: http://www.fachhefte.ch / Links "JavaScripts", "Mac OS X deutsch" (oder "Windows deutsch"), "InDesign CS2" bis "InDesign CS5". Letzteres funktioniert auch mit CS6 und CC.

Der ausgewählte Text (oder der/die Textrahmen) muss Tabulator-Zeichen enthalten. Dann werden die Abstände zwischen den Spalten vereinheitlicht.

Wenn keine Tabstops definiert sind, werden linksbündige erzeugt und zugewiesen. Per Vorgabe mit einem Abstand von 4 mm zwischen den Spalten. Dieser Wert kann im Script geändert werden.

Sind aber Tabstops vorhanden, dann wird nur deren Position geändert. Die Ausrichtung und andere Optionen werden beibehalten. Die letzte Spalte wird nicht bewegt.

Im Script kann bestimmt werden, ab welchem Tabstop die Positions-Anpassungen erfolgen sollen. Das wäre eine Lösung für das Problem, welches hier gepostet wurde: http://www.hilfdirselbst.ch/..._P496971.html#496971

Eine dritte Option: die Rundungs-"Feinheit" der neuen Positionswerte kann definiert werden.
– nicht runden; – Zehntelsmillimeter; – halbe Millimeter; – ganze Millimeter

*****
Die Vorgeschichte des Scripts:
Vor vielen Jahren hatte ich ein AppleScript für QuarkXPress entwickelt, welches das regelmässige Ausrichten besorgt. Kürzlich erhielt ich eine Anfrage eines begeisterten Benutzers, welcher nun diese Aktionen mit InDesign ausführen möchte.

Es war nicht möglich, das AppleScript nach JavaScript zu portieren. Zu gross sind die Unterschiede zwischen QuarkXPress und InDesign. Also: Von Grund auf neu schreiben, inspiriert von den Ideen des XPress-Scripts.

Doch nicht ganz von Grund auf. Denn ich erinnerte mich an eine Studie von Gerald Singelmann, welche ähnliches vollbringt. Gesucht, gefunden: Sein Script "spaltenbreite_nach_längster_spalte.jsx". Daraus übernahm ich einige Zeilen und wandelte sie ab, um schon mal Tabellarisches ohne Tabstops zu behandeln.

Für die zweite Version – welche bei bestehenden Tabstop-Definitionen nur die Position ändert –, war es schwieriger: Jetzt mussten sowohl die minimale als auch die maximale Position der Spaltenabstände ermittelt werden. Zudem noch die Ausrichtung der nächsten Spalte einbeziehen. Und die Einzüge. Und auch einen eventuellen Zeilenspalter ...

Die Tabellen des Kunden sind ziemlich speziell aufgebaut. Allen ist ein Absatzformat zugewiesen. Und bei allen dürfen die erste und die zweite Spalte nicht verschoben werden. Und es sollten alle Tabellen im ganzen Dokument behandelt werden.

Das hier angekündigte Script ist eine Variante des ursprünglichen Scripts. Die Texte oder Textrahmen müssen ausgewählt werden. Ein Absatzformat wird nicht berücksichtigt. Aber eine Option für die obenerwähnte Problemlösung ist eingebaut.
*****

Gruss, Hans

Ein JavaScript zum Ausrichten tabellarischer Texte

Hans Haesler
Beiträge gesamt: 5826

24. Apr 2014, 22:50
Bewertung:

gelesen: 7005

Beitrag als Lesezeichen
... angehängt sind zwei Beispiele, damit klarer ist, worum es geht.

ohne_Tabstops.png:
vorher
Der Text enthält Tabulatorzeichen, aber es sind keine Positionen und Ausrichtungen definiert.
nachher
Bei jeder Spalte wurde die grösste Breite ermittelt, der definierte Abstand dazugezählt und an dieser Position ein linksbündiger Tabstop erzeugt.

mit_Tabstops.png
vorher
Den Absätzen ist "Einzug links" und "Einzug links erste Zeile" zugewiesen. Zusätzlich sind schon Tabstops definiert. Deren Ausrichtung könnte auch mittig oder rechtsbündig sein.
nachher
Bei jedem Abstand zwischen den Spalten wurde der kleinste Wert ermittelt. Diese wurden zusammengezählt, das Ergebnis durch die Anzahl Abstände geteilt. Dieser Wert wurde benutzt, um die neuen Positionen zu errechnen, welche schliesslich den Tabstops zugewiesen wurden.

Gruss, Hans

Anhang:
ohne_Tabstops.png (55.3 KB)   mit_Tabstops.png (59.2 KB)

Ein JavaScript zum Ausrichten tabellarischer Texte

Headway
Beiträge gesamt: 28

25. Apr 2014, 09:57
Bewertung:

gelesen: 6952

Beitrag als Lesezeichen
Hallo Hans,

vielen Dank für das für mich sehr nützliche Skript.
Wäre es möglich, dieses Skript so zu erweiteren (wenn es deine Zeit erlaubt und nicht zu aufwändig ist), dass es auch auf Tabellen einen ähnlichen Einfluß ausübt, damit man das händische Angleichen/Ausgleichen der Spaltenbreite automatisieren kann?

Vielen Dank nnochmals und beste Grüße
Headway

Ein JavaScript zum Ausrichten tabellarischer Texte

Ralf Hobirk
Beiträge gesamt: 5961

25. Apr 2014, 10:13
Bewertung:

gelesen: 6942

Beitrag als Lesezeichen
Mit "Erweitern" ist es da wohl nicht getan, da Tabs mit Tabellen nichts gemeinsam haben, außer dass beide in Textrahmen stehen. Sieh dir mal das hier an:

http://www.indesign-faq.de/de/autospalte2

---
Viele Grüße,
Ralf
---
iMac i7 (18,3) 4,2 GHz, 32 GB 10.15.7 Catalina | MacBook Pro 15" (8,2) 2,0 GHz, 16 GB, 10.13.6 High Sierra | Mac Mini (6,1) als Server 2,5 GHz, 8 GB, 10.13.6 High Sierra | CC 2021 (ID 16.3.2)

Ein JavaScript zum Ausrichten tabellarischer Texte

Hans Haesler
Beiträge gesamt: 5826

25. Apr 2014, 10:19
Bewertung:

gelesen: 6936

Beitrag als Lesezeichen
Hallo Headway,

bitte sehr.

Nun ... wie Ralf richtig sagt, wäre das keine Erweiterung, sondern ein separates Script.
Doch: Dafür habe ich keinen Bedarf. Zudem wäre der Aufwand sicher gross.

Vielleicht hat jemand schon etwas ähnliches gemacht. Vielleicht gibt es ein PlugIn.

Gruss, Hans

Ein JavaScript zum Ausrichten tabellarischer Texte

Headway
Beiträge gesamt: 28

25. Apr 2014, 10:45
Bewertung:

gelesen: 6914

Beitrag als Lesezeichen
Hallo Hans, habe ich mir ja eh auch gedacht.
In FrameMaker 8 ging das so schön einfach und in Indesign vermisse ich es halt noch.
Aber vielleicht denkt ja irgendwann das Christkind auch an mich ;-)

Danke Ralf, werde mir Autospalte mal genauer ansehen.

Gruß
Headway

Ein JavaScript zum Ausrichten tabellarischer Texte

Uwe Laubender
Beiträge gesamt: 5319

25. Apr 2014, 11:01
Bewertung:

gelesen: 6886

Beitrag als Lesezeichen
Hallo, Hans!

Ja. Der Aufwand wäre immens.

Ich hatte mal in Richtung Tabelle geforscht.
Dazu aber bisher nichts veröffentlicht.

Ziel war es eine Tabelle automatisiert auf eine optimale, kleinstmögliche Höhe zu bekommen. Also: optimale Weißraumausnutzung bei guter Lesbarkeit der Inhalte.

Das "Hauptproblem" sehe ich bei der Ästhetik der entstehenden Weißräume. Das gilt für jeden numerisch arbeitenden Scriptansatz, der den Umbruch nicht verändern soll. Die Abstände mögen numerisch ok sein, die Weißräume sind es meistens nicht, sodass der Anwender den "guten Satz" meist durch individuelle Anpassung der Spaltenbreiten erreicht. Und dann doch eine Umbruchänderung in Kauf nimmt.

Das in den Griff zu bekommen ist schwierig, besonders, wenn man bedenkt, dass Tabellen "gemergte" Zellen enthalten können.

Was ich noch von meinen Experimenten sagen kann: einigermaßen erfolgreich, jedoch war die Laufzeit bedenklich hoch, sodass ein menschliches Auge die Weißraumproblematik da und dort vielleicht etwas schneller in Griff bekommt.

Vorausgesetzt, der Anwender weiss wie er die Spaltendimensionen ändern kann ohne die Gesamtbreite der Tabelle zu ändern (Hochstelltaste beim Verschieben der Spaltenränder halten).

Ich hab' mal ein Beispiel für Tabellensatz hier angehängt. Hat erstmal nichts mit Scripting zu tun. Nur um die Problematik der Weißräume zu verdeutlichen.

Also nichts für schwache Skripternerven ;-)

WhiteSpaceAndTables.idml
WhitespaceAndTables.png
*****
Mit herzlichem Gruß,
Uwe Laubender

Anhang:
WhiteSpaceAndTables.idml (45.9 KB)   WhitespaceAndTables.png (48.4 KB)

Ein JavaScript zum Ausrichten tabellarischer Texte

Quarz
Beiträge gesamt: 3555

25. Apr 2014, 14:38
Bewertung:

gelesen: 6811

Beitrag als Lesezeichen
Hallo,

ich wundere mich, dass keiner auf den
Post vom Ralf reagiert hat.

Das Script vom Gerald von 2009 tut auch
heute noch seine Dienste.
Ich habe es gerade unter CS6 ausprobiert.

Das wäre doch das, was Headway sich
wünscht.

@Ralf,
wenn Du den Link markiert hättest, wäre er
sicherlich aufgerufen worden ;-)
http://www.indesign-faq.de/de/autospalte2


Gruß
Quarz

-------------------------------------
Win7 | InDesign CS6 ver 8.02

Ein JavaScript zum Ausrichten tabellarischer Texte

Ralf Hobirk
Beiträge gesamt: 5961

25. Apr 2014, 14:50
Bewertung:

gelesen: 6806

Beitrag als Lesezeichen
Hallo Quarz,

danke für den Hinweis. Ich markiere Links normalerweise immer, und ich ärgere mich auch immer, wenn andere dies nicht tun…

Ging wohl heute Morgen etwas zu schnell, weil ich weg musste ;-)

---
Viele Grüße,
Ralf
---
iMac i7 (18,3) 4,2 GHz, 32 GB 10.15.7 Catalina | MacBook Pro 15" (8,2) 2,0 GHz, 16 GB, 10.13.6 High Sierra | Mac Mini (6,1) als Server 2,5 GHz, 8 GB, 10.13.6 High Sierra | CC 2021 (ID 16.3.2)

Ein JavaScript zum Ausrichten tabellarischer Texte

Gerald Singelmann
  
Beiträge gesamt: 6269

25. Apr 2014, 17:07
Bewertung:

gelesen: 6762

Beitrag als Lesezeichen
@Quarz,

Headway sucht, soweit ich das verstehe, eine Lösung, die die Breite der Spalten selbst ermittelt. Mein autospalte_v2 gibt aber dem Anwender nur die Möglichkeit, selbst Breiten nummerisch einzutippen.

Ein JavaScript zum Ausrichten tabellarischer Texte

Headway
Beiträge gesamt: 28

25. Apr 2014, 17:42
Bewertung:

gelesen: 6746

Beitrag als Lesezeichen
Die Breite der Spalte sollte sich immer nach der längsten Textzeile einer Zelle richten. Der Abstand des Weißraumes zur nächsten Spalte sollte dann in jeder Spalte gleich sein und automatisch ermittelt werden (wobei er in der letzten Spalte eigentlich nicht benötigt wird). Tabellenbreite = Satzspiegelbreite.
Autospalte_v2 ist in diesem Falle, soweit ich es bisher getestet habe, leider nicht die idelale Lösung.

Vielen Dank und schönes Wochenende
Headway

Ein JavaScript zum Ausrichten tabellarischer Texte

Hans Haesler
Beiträge gesamt: 5826

26. Apr 2014, 18:12
Bewertung:

gelesen: 6627

Beitrag als Lesezeichen
Liebe Leute,

zurück zum Thema! :-)

Das Script wurde bisher insgesamt 34 Mal heruntergeladen:
– bedankt hat sich einer;
– beschwert hat sich (noch) keiner ...

Nochmals der Link: Das JavaScript TabStopVerteiler ist hier erhältlich: http://www.fachhefte.ch / Links "JavaScripts", "Mac OS X deutsch" (oder "Windows deutsch"), "InDesign CS2" bis "InDesign CS5".

Anwenderfreundlich
Ich habe versucht, die Benutzung anwenderfreundlich zu gestalten. Auf einen Dialog wird verzichtet, weil nicht wenige Anwender dies als Störung empfinden.

Das bedingt, dass Änderungen der Vorgabenwerte im Code gemacht werden müssen.

Am einfachsten geht man so vor (siehe angehängten Screenshot):
– Im Bedienfeld "Skripte" den Namen des Scripts markieren;
– Im Fly-out-Menü den Artikel "Skript bearbeiten" wählen.

Die Script-Datei wird geöffnet. Unter Mac OS X mit "TextEdit" oder mit dem "ExtendScript Toolkit". Unter Windows wird das "Notepad" benutzt oder eventuell ebenfalls das "ExtendScript Toolkit".

Letzteres wird auch gestartet, wenn man die Umschalt-Taste niederhält und einen Doppelklick auf den Namen des Scripts im Bedienfeld macht. Aber dann befindet sich das Script im Debog-Modus und dieser muss zuerst beendet werden. Entweder im Menü "Debuggen" oder mit Klick auf die kleine quadratische Schaltfläche "Skriptausführung stoppen". Oder: Man versuche eine Änderung vorzunehmen ... Dann kommt ein Dialog, in welchem man mit Klick auf den Button "Ja" den Debug-Modus stoppen kann.

Variante mit Dialog
Dennoch: Mit einem Dialog wäre es doch einfacher. Deshalb werde ich eine Variante des Scripts herstellen, mit welcher der Dialog nur beim ersten Mal gezeigt wird. Sollte später der Dialog erneut erscheinen, dann genügt es, einen Eintrag in der Preferences-Datei zu ändern.

Gruss, Hans

Anhang:
Skript_bearbeiten.png (39.7 KB)

Ein JavaScript zum Ausrichten tabellarischer Texte

Uwe Laubender
Beiträge gesamt: 5319

27. Apr 2014, 11:41
Bewertung:

gelesen: 6550

Beitrag als Lesezeichen
Hallo, Hans!

Erstmal natürlich Herzlichen Dank für das Erstellen des Skriptes!!
Das jetzt mal nachgeholt.

Runtergeladen hab ich's.
Zum Testen bin ich leider noch nicht gekommen.

Ein Dialog zum Einstellen von Werten wäre natürlich die Krönung.
*****
Mit herzlichem Gruß,
Uwe Laubender

Ein JavaScript zum Ausrichten tabellarischer Texte

Hans Haesler
Beiträge gesamt: 5826

27. Apr 2014, 11:50
Bewertung:

gelesen: 6544

Beitrag als Lesezeichen
Hallo, Uwe!

danke für Deine Anerkennung.

Die Variante mit einem Dialog steht. Aber ich muss noch etwas verfeinern, damit der Dialog der Auswahl angepasst wird.

Weil der Minimal-Abstand der Spalten nur benötigt wird, wenn keine Tabstops definiert sind. Und, umgekehrt, die erste zu verändernde Spalte nur berücksichtigt wird, wenn Tabstops vorhanden sind.

Gruss, Hans

Ein JavaScript zum Ausrichten tabellarischer Texte

Hans Haesler
Beiträge gesamt: 5826

28. Apr 2014, 07:55
Bewertung:

gelesen: 6479

Beitrag als Lesezeichen
Sorry, folks,

eine Version 02 des Scripts wurde notwendig, um einen kleinen Bug zu entfernen.
http://www.fachhefte.ch / Links "JavaScripts", "Mac OS X deutsch" (oder "Windows deutsch"), "InDesign CS2" bis "InDesign CS5", TabStopVerteiler_202d bis _502d

Die Fehlermeldung kommt nur, wenn als Rundungsfaktor 0 (also nicht runden) definiert wird und nur wenn die Absätze keine Tabstops enthalten.

Dieses Problem wird im Script mit Dialog behoben sein. Diese Variante ist bereit, wird aber nicht vor heute Nacht zur Verfügung stehen.

Gruss, Hans

Ein JavaScript zum Ausrichten tabellarischer Texte

Hans Haesler
Beiträge gesamt: 5826

1. Mai 2014, 10:15
Bewertung:

gelesen: 489

Beitrag als Lesezeichen
Hallo InDesign-Fans,

nun ist die angekündigte Variante bereit: TabStopVerteiler_D, ("_D", wie "Dialog").

http://www.fachhefte.ch / Links "JavaScripts", "Mac OS X deutsch" (oder "Windows deutsch"), "InDesign CS2" bis "InDesign CS5".

Je nach Auswahl (Tabstops sind definiert oder nicht) wird ein entsprechender Dialog gezeigt.
Die Einstellung wird gespeichert und bei der nächsten Ausführung wieder angeboten.

In beiden Dialogen kann per Radio-Button gewählt werden, dass der Dialog nicht mehr gezeigt wird.
Das wird befolgt und die Positionen der Tabstops werden so verteilt, wie sie zuletzt im Dialog definiert waren.

Wünscht man eines Tages, die Dialoge wieder zu sehen, dann gibt es zwei Möglichkeiten:
1. Die Vorgabe-Dateien entfernen.
2. Die Vorgabe-Dateien öffnen und in der ersten Zeile die Null durch eine Eins ersetzen und speichern.
(Näheres in der Datei "LiesMich_Dialoge.txt").

Abgesehen davon, funktioniert das Script genau gleich wie die Version ohne Dialog.

Gruss, Hans