Es gibt viele Möglichkeiten, per Script eine Farbe zu erzeugen. Aber ein Problem bleibt immer gleich: "Wie rechne ich die Prozentwerte um?"
Hier ein Beispiel. Ein Dialog verlangt den Namen der neuen Farbe. Darauf wird sofort getestet, ob die Farbe nicht schon existiert. Sollte dies der Fall sein, erscheint ein Dialog. Nach dem Klick auf "OK" wird der Ablauf abgebrochen.
Im Textfeld des zweiten Dialogs kann der Anwender die Prozentwerte eingeben (mit Zwischenräumen trennen, z.B.: "100 50 0 0"). Diese Werte werden mit einer Repeat-Schleife zur Konvertierungs-Routine geschickt. Dort werden sie mit 655.35 multipliziert (100% hat einen CMYK-Wert von 65535). Der 'div'-Operator sorgt dafür, dass die Werte als "normale" Ganzzahlen in die Liste der Vierfarben-Werte gesetzt werden. Mit exponentieller Notierung (= 6.5535E+4) könnte XPress die eingetippten Prozente nicht richtig umsetzen:
---
tell document 1 of application "QuarkXPress 4.11"
activate
set colorList to name of color specs
repeat
set colorName to text returned of ¬
(display dialog "Name der neuen Farbe" default answer "")
try
if colorName is in colorList then error
exit repeat
on error
display dialog ¬
"Die Farbe \"" & colorName & "\" existiert bereits." with icon 2
end try
end repeat
set percentList to text returned of ¬
(display dialog "Prozentwerte der neuen Farbe" default answer "")
set valList to {}
repeat with i from 1 to 4
try
set x to (word i of percentList) as real
on error
set x to 0
end try
set end of valList to my convToVal(x)
end repeat
make color spec at end with properties ¬
{name:colorName, separation:true, CMYK color value:valList}
end tell
on convToVal(x)
set x to (x * 655.35) div 1
end convToVal
---
Wenn viele Farben erzeugt werden müssen, dann ist es natürlich besser, einen anderen Weg zu gehen. Man kann die Namen und die Werte in einer Textdatei speichern, welche das Script liest und umsetzt.
Die gleiche Technik kann auch verwendet werden, wenn in verschiedenen Dokumenten schon bestehende Farben geändert werden sollen. Wer Interesse hat, melde sich bitte bei mir.
---
Hans Haesler <hsa@ringier.ch>