text-replacement

Begonnen von hotte, Donnerstag, 8. April 2021, 21:40

« vorheriges - nächstes »

hotte

Liebe Leute,
ich versuche gerade in einer Überschrift "Nummer 1" zu schreiben, und zwar mir "Nr" und nicht "Nr.". In der Datei "text-replacements.ly" bei "add-text-replacements" findet man, wenn ich das richtig verstehe, den Befehl  "Nr" oder wie es dort heißt "&numero" durch "Nr." zu ersetzen.
Ist das möglich durch einen \override-Befehl dieses Verhalten zu ändern? Ich habe mit meinen minimalen Kenntnissen schon etwas versucht, aber ohne Erfolg.
Wenn es nicht möglich ist wäre auch nicht so schlimm. Aber dadurch kann ich vielleicht lernen wie man generell an die ly-Dateien rankommt um eventuell Teile daraus punktuell zu verändern.

Gruß
hotte

hotte

Oh, ich sehe gerade, dass ich die Ausgabe nicht kontrolliert hatte.
Die Nr die automatisch geschrieben wird ist "No" mit einem Unterstrich unter dem "o" und das "o" selber ist hochgestellt.
Sorry für die Verwirrung.

Arnold

Hallo hotte,

ich habe allerdings schon Situationen erlebt, bei denen offenbar der gewählte Textfont selbst dafür gesorgt, daß aufeinanderfolgende Zeichen durch eine (in diesem Fall ungewünschte) Ligatur ersetzt wurden. Im konkreten Fall war das damals ein bestimmter Schreibmaschinen-Font, bei dem die Folge »st« durch die st-Ligatur ersetzt wurde - und gerade da war es ja auffällig, weil nur noch eine Zeichenbreite statt zwei Zeichenbreiten belegt wurden.

Solche Fälle kann ich in meinem Quelltext-Editor-Setup bereinigen, indem ich zwischen den betroffenen Buchstaben ein »unsichtbares Buchstaben-Trennzeichen«, ZWNJ (zero width non joiner) im UNICODE-Sprachgebrauch genannt, einfüge.

Arnold

hotte

Ok, das heißt ich kann das nicht in Lilypond selber regeln?!
Dann stellt sich für mich die Frage wie ich das mit frescobaldi regeln kann oder wie ich sonst an den Quellcode rankomme. In diesen Dingen bin ich leider völlig unbeleckt.
Viele Grüße
hotte

hotte

Hier der Auszug aus der Datei "text-replacements.ly".

#(define (add-text-replacements! alist)
   (set! text-font-defaults
         (assoc-set! (alist-copy text-font-defaults) 'replacement-alist
                     (append alist
                      (assoc-get 'replacement-alist text-font-defaults '())))))

#(define (include-special-characters)
   (add-text-replacements!
   .
   .
   .
   ;; General typography
   .
   .
   .
       ("№" . "№")


Ist das möglich diese Überschreibung punktuell zu verändern ohne grundsätzlich das Verhalten zu ändern?

hotte

harm6


hotte

Hallo Harm,

das ist definitiv wohl die richtige Seite im Handbuch. Die hatte ich leider nur noch nicht gefunden.
Jetzt bin ich aber wahrscheinlich zu blöd das anzuwenden.

Ich brauche als Ausgabe "Studie Nr. 1" und habe folgende Dinge ausprobiert:

"Version 2.22.0"

\markup {
  \override #'(replacement-alist . ()) "Studie Nr. 1"
}


Auch das Ersetzen gibt nicht den gewünschten Effekt. Weder ...

\paper {
  #(add-text-replacements!
    '(("Numm" . "Nr.")))
}

\markup { "Studie Numm 1" }


... noch wenn ich ober den Punkt weglasse und unten hinzufüge.

\paper {
  #(add-text-replacements!
    '(("Numm" . "Nr")))
}

\markup { "Studie Numm. 1" }


Immer erhalte ich als Ausgabe "No" mit dem Strich unter dem "o".
Wenn ich "‌" hinzufüge habe ich trotzdem ein Leerzeichen zwischen "Nr" und ".".

\paper {
  #(include-special-characters)
}

\markup { "Studie Nr" ‌ ". 1" }


Ich bin gerade völlig ratlos. Was mache ich falsch?

HG
hotte

harm6

#7
Das Problem ist, daß LilyPonds default Schrift in 2.22.0 für "Nr" eine Ligatur benutzt, die unerwünscht ist.

Lösungen:
(1)
Verwende eine andere Schriftart.
(2)
Verbiete Ligaturen punktuell:
\markup \override #'(font-features . ("-liga")) "Nr. 1"
(3)
Ersetze diese Ligatur punktuell:
\markup {
  \replace #`(("Nr." .  ,(format #f "Nr~a." (ly:wide-char->utf-8 #x200C))))
  "Nr. 1"
}

(4)
Ersetze diese Ligatur global:

\paper {
  #(add-text-replacements!
      `(("Nr." . ,(format #f "Nr~a." (ly:wide-char->utf-8 #x200C)))))
}

\markup "Nr. 1"


Mehr hier:
https://gitlab.com/lilypond/lilypond/-/issues/6023

HTH,
  Harm

hotte

Wow, vielen Dank.
Das funzt phänomenal.
Was muss man studieren um so etwas wissen zu können?

HG
hotte

harm6

ZitatWas muss man studieren um so etwas wissen zu können?

Gar nichts. Allerdings lasse ich mich über alles auf GitLab-lilypond benachrichtigen und kriege so ziemlich viel mit.
Alle Beispiele aus meiner vorangegangenen Antwort sind aus dem angegebenen link extrahiert. ;)

Gruß,
  Harm