Jump to content
Die Schriftmuster der Welt in einer Datenbank …

Contextual Ligatures im Opentypefeature

Empfohlene Beiträge

Gast

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.

Link zu diesem Kommentar

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

Link zu diesem Kommentar
Gast

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.

Link zu diesem Kommentar

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

Link zu diesem Kommentar
Gast

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.

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar
Gast

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

Link zu diesem Kommentar
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

Link zu diesem Kommentar

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 erstellen

Einloggen

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden

Unsere Partner

Mit über 130.000 Fonts der größte Schriften-Shop im Internet.
FDI Type Foundry besuchen
Hier beginnt deine kreative Reise.
Entdecke hunderte Font-Sonderangebote.
Überschrift: Ein Versalalphabet mit 200 ausdrucksstarken Ligaturen
×
×
  • Neu erstellen...

🍪 Hinweis:

Wir benutzen funktionale Cookies.