Deutschsprachiges LilyPond-Forum

Allgemeine Fragen und Probleme => Fragen und Probleme aller Art => Thema gestartet von: hotte am Donnerstag, 8. April 2021, 21:40

Titel: text-replacement
Beitrag von: hotte am Donnerstag, 8. April 2021, 21:40
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
Titel: Antw:text-replacement
Beitrag von: hotte am Freitag, 9. April 2021, 01:16
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.
Titel: Antw:text-replacement
Beitrag von: Arnold am Freitag, 9. April 2021, 08:14
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
Titel: Antw:text-replacement
Beitrag von: hotte am Freitag, 9. April 2021, 11:39
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
Titel: Antw:text-replacement
Beitrag von: hotte am Freitag, 9. April 2021, 11:49
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
Titel: Antw:text-replacement
Beitrag von: harm6 am Samstag, 10. April 2021, 09:25
Ist hier nicht alles erklärt?
http://lilypond.org/doc/v2.22/Documentation/notation/special-characters.en.html#ascii-aliases (http://lilypond.org/doc/v2.22/Documentation/notation/special-characters.en.html#ascii-aliases)

Falls nicht, poste bitte ein minimal.

-Harm

Titel: Antw:text-replacement
Beitrag von: hotte am Samstag, 10. April 2021, 11:41
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
Titel: Antw:text-replacement
Beitrag von: harm6 am Samstag, 10. April 2021, 13:56
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 (https://gitlab.com/lilypond/lilypond/-/issues/6023)

HTH,
  Harm
Titel: Antw:text-replacement
Beitrag von: hotte am Samstag, 10. April 2021, 18:16
Wow, vielen Dank.
Das funzt phänomenal.
Was muss man studieren um so etwas wissen zu können?

HG
hotte
Titel: Antw:text-replacement
Beitrag von: harm6 am Samstag, 10. April 2021, 19:33
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