Gast Geschrieben Juni 21, 2007 Geschrieben Juni 21, 2007 Hallo zusammen. ich habe ein Problem beim Erstellen des Codes für eine kontextbezogene Ligatur. Und zwar möchte ich dass immer am Wortende der Buchstabe einen ausladenden Schwung hat. Ich wollte das ganze dadurch lösen, dass ich immer wenn ein Buchstabe und ein Leerzeichen aufeinandertreffen der Buchstabe durch die Buchstabenvariante und das Leerzeichen ersetzt werden. So und jetzt das Problem ich weiss nicht wie ich das Leerzeichen benennen soll. Sowol die Bezeichnung Space (Glyphenname) oder auch der Unicode oder einfach nur (tja selbst hier ist es schwer ein Leer sichtbar zu machen) werden nicht erkannt. würde mich sehr freuen wenn mir dabei jemand weiterhelfen könnte.
Ralf Herrmann Geschrieben Juni 21, 2007 Geschrieben Juni 21, 2007 Der Weg ist vom Grundsatz her schon falsch. Denn der Endbuchstabe würde dann zum Beispiel nicht am Zeilenende erscheinen (wo er aber gerade hingehört), weil da kein Leerzeichen, sondern ein Umbruchzeichen kommt. Man macht das anders und zwar mit einer dieser Möglichkeiten: FINA Feature: Ein Feature, was genau für diesen Zweck angelegt ist, aber leider erst seit InDesign CS3 unterstützt wird. Klassen-basiert/kontextbasiert: Du tauscht nicht aus, wenn der Buchstabe einem Leerzeichen voran steht, sondern immer, wenn kein Buchstabe nachfolgt. Dafür brauchst du entsprechende Klassen. Hier ein Beispielcode von der Adobe-Seite: feature cswh { # --- Glyph classes used in this feature: @BEGINNINGS = [A-N P-Z Th m]; @BEGINNINGS_SWASH = [A.swash-N.swash P.swash-Z.swash T_h.swash m.begin]; @ENDINGS = [a e z]; @ENDINGS_SWASH = [a.end e.end z.end]; # --- Beginning-of-word swashes: ignore substitute @LETTER @BEGINNINGS'; substitute @BEGINNINGS' by @BEGINNINGS_SWASH; # --- End-of-word swashes: ignore substitute @ENDINGS' @LETTER; substitute @ENDINGS' by @ENDINGS_SWASH; } cswh; http://www.adobe.com/devnet/opentype/af ... yntax.html
Gast Geschrieben Juni 22, 2007 Geschrieben Juni 22, 2007 super vielen dank. ich wusste nicht dass es jetzt auch swashs gibt. naja hab auch immer nur mit cs gearbeitet.
Gast Geschrieben Juni 22, 2007 Geschrieben Juni 22, 2007 hallo. nachdem das mit den swashes ja ganz gut funktioniert hab ich allerdings nochmals eine frage wie löse ich das problem wen am wortende swashligaturen bsp ff.alt auftauchen sollen. wie lege ich erstens fest dass beide buchstaben substituiert werden, und wie verhindere ich zweitens, dass nicht die ff.lig glyphe greift.
Ralf Herrmann Geschrieben Juni 22, 2007 Geschrieben Juni 22, 2007 Du lässt die ff-Ligatur erstmal ran und ersetzt die dann nach bekanntem Muster. Zum Beispiel: sub f_f by f_f.fina Welches Feature zuerst loglegt entscheidet die Reihenfolge der Features von oben nach unten. Ralf
Gast Geschrieben Juni 25, 2007 Geschrieben Juni 25, 2007 hallo. jetzt muss ich nochmals nachfragen. denn ich muss ehrlich zugeben dass ich fast noch nie mit classes gearbeitet hab. und nicht ganz versteh wie ich ein classe für paare anlegen muss dass sie nur greift wen ar er mr ur ... aufeinander folgen.
Ralf Herrmann Geschrieben Juni 25, 2007 Geschrieben Juni 25, 2007 Du solltest dir im FontLab-Handbuch die Kapitel zu Klassen und OpenType-Features mal in Ruhe zu Gemüte führen. Das ist zuviel um es hier alles zu erklären. Klassen sind natürlich keine Bedingung. Sie sind nur ein einfacher Zugriff auf eine Menge von Zeichen. Wenn du immer wieder Kleinbuchstaben referenzieren möchtest, kannst du jedesmal a b c d e f ... x y z schreiben, oder einmal eine Klasse anlegen und dann immer den Namen dieser Klasse (z.B. @lowercase) benutzen. Der OpenType-Kode, den du brauchst, steht schon oben. Ich ekläre es nochmal kurz. Im Klassen-Panel ist folgendes angelegt: @ENDINGS = [a e z]; Die Glyphen, für die es einen Ersatz gibt. @ENDINGS_SWASH = [a.end e.end z.end]; Die Namen deiner Schwungbuchstaben. @letter = [hier alle Buchstaben, aber nicht Leerräume einfügen]; (Das geht übrigens per Drag&Drop. Muss man nicht alles eintippen …) Im OpenType-Feature cswh im OpenType-Panel steht: substitute @ENDINGS' by @ENDINGS_SWASH; Ersetze alle Vorkommen von a, e oder z durch a.end, e.end und z.end. Da das aber nur passieren soll, wenn dies am Wortende ist, fügen wir vorher noch eine Ignorieren-Regel ein: ignore substitute @ENDINGS' @LETTER; Führe die Ersetzung nicht durch, wenn einer unserer Buchstaben (markiert durch ') auf einen beliebigen Buchstaben aus der Klasse "letter" trifft. Das Wort »Schnee« wird also mit einem Schwung-e am Ende ersetzt, in »Schneemann« allerdings nicht, weil auf beide e ein weiterer Buchstabe aus der Klasse "letter" folgt. Wenn du das Prinzip verstanden hast, kannst du das auch problemlos auf mehrere Buchstaben ausbauen. Ralf
Ralf Herrmann Geschrieben Juni 25, 2007 Geschrieben Juni 25, 2007 Dein Kode (wo isser hin? Wieder gelöscht?) kann so nicht klappen. Nur dort, wo der Apostroph dranhängt wird überhaupt ersetzt (->Key Glyph). Beide Zeichen werden so nicht ersetzt, sondern nur eins. Aber KlasseA' KlasseB' by KlasseC geht natürlich auch nicht. Da weiß der Compiler ja gar nicht, was mit wem verglichen und ersetzt werden soll. Ich würde es, wie weiter oben schon beschrieben, in zwei Schritten machen. Ersetze a r durch ar.liga Ersetze ar.liga durch ar.cswh (Ignoriere dabei ar.liga' @letters) Ralf
Gast Geschrieben Juni 28, 2007 Geschrieben Juni 28, 2007 sorry. hab ihn gelöscht weil ich was geändert habe und war jetzt leider zwei tage von der multimeldialen welt abgeschieden. hier ist er nochmals. allerdings wird immer noch ein fehler angezeigt und kann nicht exportiert werden. feature cswh { # Glyph classes used in this feature: @CLASS1 = [a h i m n u]; @ENDINGS = [r]; @ENDINGS_SWASH = [er.end hr.end ir.end mr.end nr.end ur.end ar.end]; # End-of-word swashes: ignore substitute @CLASS1 @ENDINGS' @LETTER; substitute @CLASS1 @ENDINGS' by @ENDINGS_SWASH; } cswh; aber ich werde es jetzt wirklich so wie du beschrieben hast auf zwei schritte machen. wäre auch zu schön gewesen wenns auf einmal gegangen wäre. viele dank aber für die viele hilfe
Ralf Herrmann Geschrieben Juni 28, 2007 Geschrieben Juni 28, 2007 hier ist er nochmals. allerdings wird immer noch ein fehler angezeigt und kann nicht exportiert werden. Siehe meine letzte Anwort. So wird's leider nix. Ralf
Gast Geschrieben Juni 28, 2007 Geschrieben Juni 28, 2007 das problem warum ich das ganze gestartet hatte war ja das, dass es kein arliga gibt sonder ar eben nur am wortende in ar.swash ersetzt werden sollte.
Ralf Herrmann Geschrieben Juni 28, 2007 Geschrieben Juni 28, 2007 Schon klar, aber das heißt ja nicht, dass du sie nicht trotzdem anlegen kannst. Als Work-around.
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenEinloggen
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden