Autor Thema: Textausrichtung  (Gelesen 1685 mal)

pdqbach

  • Member
Textausrichtung
« am: Donnerstag, 24. Januar 2013, 18:08 »
Ihr lieben Helfer,

darf ich noch einmal um Eure Hilfe bitten, da ich das Arbeitsblatt bis morgen brauche, und - einmal süchtig nach Lilypond geworden - nicht wieder zurück zu den hässlichen Finale-Ausschneid-Word-Seiten will....

Ich finde in der Doku nicht wirklich viele Möglichkeiten, wie man Texte und Bilder formatieren kann.
Jetzt probiere ich hin und her, aber weiter als so:

\header { tagline = ##f }

#(define-markup-command (sec layout props secname) (markup?)
   (interpret-markup layout props
     (markup #:huge #:column (#:fill-line (secname " ") " "))))
   
 \markup {
  \fill-line {
    \line {
      \column {
        \fontsize #4 "Musik, Klasse 5 (pdq)"
        \fontsize #2 "Hänsel und Gretel: "
         \fontsize #2 "Eine Operngeschichte"
        \fontsize #2 "fortschreiben und vertonen"
      }
    }
   \line { \fontsize #2 "25. 1. 2013" }
    \line {       \epsfile #Y #40 #"Hexe.eps" }
  }
}

bin ich noch nicht gekommen. Wie kann ich erreichen, dass der Text über die ganze Höhe des Bildes fließt??

Freue mich über jeden Tipp und grüße herzlich,

Pepe

harm6

  • Member
Re: Textausrichtung
« Antwort #1 am: Donnerstag, 24. Januar 2013, 21:32 »
Hallo,

Zitat
Ich finde in der Doku nicht wirklich viele Möglichkeiten, wie man Texte und Bilder formatieren kann.

LilyPond ist natürlich kein Textverarbeitungsprogramm ...

Aber vielleicht hilft der Code unten (falls ich Dein Anliegen richtig verstanden habe).
Ist allerdings ein Schnellschuss d.h. nicht groß getestet.

\version "2.16.1"

#(define-markup-command (add-Y-centered layout props  arg1 arg2)
  (markup? markup?)

  (let ((m1 (interpret-markup layout props arg1))
        (m2 (interpret-markup layout props arg2)))
    (ly:stencil-add
      (ly:stencil-aligned-to m1 Y 0)
      (ly:stencil-aligned-to m2 Y 0))))
   
txt =
\markup \fill-line {
        \column {
                \fontsize #4 "Musik, Klasse 5 (pdq)"
                \fontsize #2 {
                        "Hänsel und Gretel: "
                        "Eine Operngeschichte"
                        "fortschreiben und vertonen"
                }
        }
        \fontsize #2 "25. 1. 2013"
        ""
}
     
image =
\markup \fill-line {
        ""
        ""
        \epsfile #Y #35 #"Hexe.eps"
}

\markup {
        \add-Y-centered
        \txt
        \image
}

HTH,
  Harm

P.S. Im Anhang ein Bild (natürlich mit einem anderen eps-file erstellt)

Be-3

  • Member
Re: Textausrichtung
« Antwort #2 am: Donnerstag, 24. Januar 2013, 22:00 »
Hallo Pepe,

nach dem Herumspielen mit einer Hexen-Grafik hatte Harm mittlerweile schon lange geantwortet. Trotzdem:
Auch ich habe nicht ganz verstanden, wie genau was angeordnet werden soll... Ich glaube aber, daß Du das Bild "hinter" dem Text haben möchtest.
Neben Harms automatischem Zentriermakro noch eine ganz gewöhnliche Befehle aus dem Lilypond-Markup-Baukasten, mit denen man eine solche Überlagerung erreichen kann:
Mit \combine (rot) legt man die beiden nachfolgenden Markup-Objekte übereinander (gleiche Ursprungskoordinaten) und mit \translate läßt sich eines der beiden beliebig in x- und y-Richtung verschieben (blau):

\version "2.16.1"

  \markup {
    \combine \epsfile #Y #60 #"hexe.eps"
    \translate #'(0 . 50)
    \override #'(baseline-skip . 3) \fontsize #2
    \column {
        \raise #2 \fill-line { \fontsize #2 "Musik, Klasse 5 (pdq)" "25. 1. 2013" }
        "Hänsel und Gretel: "
        "Eine Operngeschichte"
        "fortschreiben und vertonen"
      }
  }


Viele Grüße
Torsten

pdqbach

  • Member
Re: Textausrichtung
« Antwort #3 am: Donnerstag, 24. Januar 2013, 22:46 »
Lieber Harm, lieber Torsten,

erst mal danke fürs Helfen.

Ich hatte eigentlich Harms Lösung im Sinn; allerdings ist dort der Text dann vertikal mittig ausgerichtet. Das habe ich jetzt etwas handgestrickt mit größeren Abständen behoben, daher erscheint mir langfristig Torstens Lösung ganz ausbaubar:
Man kann die beiden Objekte ja übereinanderlegen, muss aber nicht, wenn ich es richtig verstehe.
Schiebe ich in dieser Lösung die Hexe auf der X-Achse sollte in etwa das gleiche rauskommen.

Ich muss allerdings gestehen, dass ich diesen ganzen Markup-Bereich noch überhaupt nicht kapiere, sondern solange code hin- und herschiebe, bis es irgendwie funkt´...

Kennt Ihr eine Anleitung dafür? Das Handbuch ist da ja eher etwas knapp...

HG

Pepe

harm6

  • Member
Re: Textausrichtung
« Antwort #4 am: Sonntag, 27. Januar 2013, 17:54 »
Zitat von: pdqbach
Ich hatte eigentlich Harms Lösung im Sinn; allerdings ist dort der Text dann vertikal mittig ausgerichtet.

Ich hab' noch etwas weiter gearbeitet und `combine-align´ geschrieben mit der Möglichkeit zahlreiche markups zu kombinieren sowie deren Ausrichtung zu kontrollieren.

\combine-align #'()
Zentriert alle gegebenen markups in x- und y-Richtung

\combine-align #'((-1 . -1))
Kombiniert alle markups auf die selbe Art und Weise (hier: links-unten)

\combine-align #'((-3 . -2) (-1 . -1) (1 . 0) (3 . 1))
Kombiniert vier markups auf die individuell angegebene Art.

Im Beispiel unten sind alle Möglichkeiten aufgeführt.

Außerdem habe ich die Gelegenheit ergriffen ein paar neue markup-commands zu demonstrieren:
\rest \draw-dashed-line \draw-dotted-line
Hierfür ist aber 2.17.10 erforderlich.

Das entsprechende Beispiel ist auskommentiert. Im angehängten Bild jedoch einsehbar (für alle, die keine neuere devel-Version haben)

\version "2.16.1"

% Note: All markup-work below is possible without defining a new markup-command
%
% Just for fun. :)

#(define-markup-command (combine-align layout props align-values args)
  (list? markup-list?)
  #:category align
"
Combines and aligns a list of markups.

Per default all elements of @var{args} are centered in X- and Y-direction.
Example:
\\markup
  \\combine-align #'()
    { "\"X"\" \\draw-line #'(2 . 0) }

Other values can be used to align all elements of @var{args}.
Example:
\\markup
  \\combine-align #'((-1 . 0))
    { "\"X"\" \\draw-line #'(2 . 0) }

Also possible is to adress each element of @var{args} separately.
Example:
\\markup
  \\combine-align #'((0 . 0) (1 . 1))
    { "\"X"\" \\draw-line #'(2 . 0) }
"
  (if (<= (length args) 1)
      (begin
        (ly:warning "Nothing to combine - ignoring")
        empty-stencil)
      (let* ((args-length (length args))
             (new-align-values
               (cond ((null? align-values)
                      (make-list
                        args-length
                        '(0 . 0)))
                     ((and (= (length align-values) 1)
                           (pair? (car align-values)))
                      (make-list
                        args-length
                        (cons (caar align-values)  (cdar align-values))))
                     (else align-values)))
             (x-align (map
                        (lambda (x) (car x))
                        new-align-values))
             (y-align (map
                        (lambda (y) (cdr y))
                        new-align-values))
             (stil-list (map
                          (lambda (arg) (interpret-markup layout props arg))
                          args)))
     
        (apply ly:stencil-add
               (map
                 (lambda (stil x y)
                      (ly:stencil-aligned-to
                        (ly:stencil-aligned-to stil X x)
                        Y
                        y))
                  stil-list
                  x-align
                  y-align)))))

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%                      TEST
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Some test-markups
stilI =
  \markup  {
          \box
          \stencil
          #(ly:make-stencil "" '(0 . 6.5) '(0 . 6.5))
  }
 
stilII =
  \markup  {
          \with-color #red
          \rotate #45
          \box
          \stencil
          #(ly:make-stencil "" '(0 . 10) '(0 . 10))
  }
 
% The final
 
\markup
  \override #'(box-padding . 1)
  \box
    \fill-line { \fontsize #6 "The markup-command \\combine-align" }

\markup \vspace #2
 
\markup
  \fill-line {
      \column {
         \rounded-box
           \center-column {
             "Per default, all markups to combine are centered in X- and Y-direction."
             \fontsize #-2 \typewriter "\\combine-align #'()"
           }
         \vspace #1
      }
}
         
\markup \fill-line  { \combine-align #'() { \stilI \stilII } }

\markup
  \fill-line {
      \column {
         \vspace #1
         \rounded-box
           \center-column {
             "Other values are possible. To align all left-down use:"
             \fontsize #-2 \typewriter "\\combine-align #'((-1 . -1))"
           }
         \vspace #1
      }
  }
 
\markup
  \fill-line {
    \combine-align #'((-1 . -1))
      { \stilI \stilII }
  }
 
\markup
  \fill-line {
      \column {
         \vspace #1
         \rounded-box
           \center-column {
             "Each markup to combine may be adressed separately."
             \fontsize #-2
               \typewriter
                 "\\combine-align #'((-3 . -2) (-1 . -1) (1 . 0) (3 . 1))"
           }
         \vspace #1
      }
  }

\markup
  \fill-line {
    \combine-align #'((-3 . -2) (-1 . -1) (1 . 0) (3 . 1))
      { \stilI \stilI \stilI \stilI }
  }

 
%% "2.17.10" requested:

%{

\markup
  \fill-line {
      \column {
         \vspace #1
         \rounded-box
           \center-column {
             "Using some other, new markup-commands."
             "\\rest available with \"2.17.9\""
             "\\draw-dashed-line and \\draw-dotted-line with \"2.17.10\""
           }
         \vspace #1
      }
  }

\markup
  \fill-line {
    \override #'(box-padding . 2)
    \box {
       \combine-align #'((-1 . -2)
                         (-1 . -4)
                         (-1 . 0)
                         (-1 . 4)
                         (-1 . 2)
                         (-1 . 120)
                         (-1 . 124)
                         (-1 . 128)
                         (-1 . 4.5))
         {
           \line {
                   "Notes: "
                   \hspace #14.8 \note #"1" #1
                   \hspace #0.6 \note #"2" #1
                   \hspace #0.6 \note #"4" #1
                   \hspace #0.6 \note #"8" #1
                   \hspace #0.6 \note #"16" #1
           }
           
           \override #'(off . 0.2) \draw-dotted-line #'(38 . 0)
           \draw-dashed-line #'(38 . 0)
           \override #'(off . 0.2) \draw-dotted-line #'(38 . 0)
           
           \line {
                   "Rests:"
                   \hspace #16 \rest #"1"
                   \hspace #1 \rest #"2"
                   \hspace #1 \rest #"4"
                   \hspace #1 \rest #"8"
                   \hspace #1 \rest #"16"
           }
           
           \override #'(off . 0.2) \draw-dotted-line #'(38 . 0)
           \draw-dashed-line #'(38 . 0)
           \override #'(off . 0.2) \draw-dotted-line #'(38 . 0)
           
           \line {
                   "MultiMeasureRests: "
                   \override #'(multi-measure-rest . #t){
                           \hspace #1 \rest #"1"
                           \hspace #1 \rest #"2"
                           \hspace #1 \rest #"3"
                           \hspace #1 \rest #"4"
                           \hspace #1 \rest #"5"
                   }
           }
       }
    }
  }
%}

Gruß,
  Harm

P.S. Alle demonstrierten Effekte sind tatsächlich auch ohne `combine-align´ möglich, aber da ich gerade dabei war ... :))
« Letzte Änderung: Donnerstag, 31. Januar 2013, 13:23 von harm6 »