Autor Thema: Inhaltsverzeichnis mit Punkten formatieren, aber wie?  (Gelesen 4451 mal)

juppes

  • Member
Inhaltsverzeichnis mit Punkten formatieren, aber wie?
« am: Sonntag, 7. Oktober 2012, 15:30 »
liebe Forumsteilnehmer,

ich habe ein Inhaltsverzeichnis erstellt, und da eine punktierte Linie zwischen dem Text und der Seitenzahl eine ausgezeichnete Lesehilfe ist, habe ich das auch so gemacht. Es gibt ja den schönen Eintrag in den \paper-Block namens   tocItemMarkup = \tocItemWithDotsMarkup. Der funktioniert auch, aber eines blockiert er: meine festgelegten Formatierungen. Irgendwie kommt sich dieser Befehl mit \markup in die Quere. Habe ich sie beide hinter tocItemMarkup stehen, kriege ich Fehlermeldungen. Allerdings läuft die Kompilation ansonsten glatt durch, aber die definierten Formatierungen werden übergangen. Kommentiere ich die Formatierungen ab \markup aus, so daß nur noch   tocItemMarkup = \tocItemWithDotsMarkup da steht, läuft alles glatt durch, aber das Ergebnis ist das gleiche.

Ein Ausweg ist, nicht sehr elegant, aber immerhin, diese Formatierungen bei den tocItems einzeln einzutragen. Gäbe es eine bessere Lösung?
Und kann man die Zeilenabstände im Inhaltsverzeichnis etwas vergrößern? Ich finde sie eher zu eng.

Danke für Eure Hinweise

harm6

  • Member
Re: Inhaltsverzeichnis mit Punkten formatieren, aber wie?
« Antwort #1 am: Sonntag, 7. Oktober 2012, 17:07 »
juppes,

bitte!

Poste deinen Code!

Ansonsten antworte ich nur noch wörtlich, je nachdem was Du fragst:
Zitat
Ein Ausweg ist, nicht sehr elegant, aber immerhin, diese Formatierungen bei den tocItems einzeln einzutragen. Gäbe es eine bessere Lösung?
Ja!
Zitat
Und kann man die Zeilenabstände im Inhaltsverzeichnis etwas vergrößern?
Ja!

Hier ein Template, trage bitte ein, was Du gemacht hast, sodaß man erkennen kann, was Du erreichen möchtest.

\version "2.14.2"

\paper {
  tocItemMarkup = \tocItemWithDotsMarkup
}

\book {
  \bookpart {
          \markup \column {
          \vspace #8
          \fill-line { \fontsize #12 "Musik" }
          \vspace #30
          \fill-line { \postscript #"-20 0 moveto 40 0 rlineto stroke" }
          \vspace #4
          \fill-line { \fontsize #1 \center-column {
          "herausgegeben"
          "von"
      "juppes" }
      }
          }
  }
  \bookpart {
          \markuplines \table-of-contents
  }
  \bookpart {
          \tocItem \markup "First score"
          \new Staff { c''1 }
  }
  \bookpart {
          \tocItem \markup "Second score"
          \new Staff { cis''1 }
  }
}


Gruß,
  Harm

juppes

  • Member
Re: Inhaltsverzeichnis mit Punkten formatieren, aber wie?
« Antwort #2 am: Sonntag, 7. Oktober 2012, 22:20 »
lieber Harm,

leider kann ich Dir nur unkompilierbare Auszüge aus meiner Datei schicken, denn sie ist ziemlich groß und etwas komplex, weil sie auch ein paar externe .ly-Dateien einbindet. Mir ist keine wirklich intelligente Methode eingefallen, wie ich das hätte lösen können. Das einmal vorweg.

Ich schicke Dir Dein Template mit ein paar Anmerkungen versehen zurück und eine Art Auszug aus meiner Partitur-Datei. Ich hoffe, daß man daraus wenigstens einen Eindruck gewinnen kann, wie ich die Sache "gestrickt" habe. Leider ist sie eben nicht kompilierbar - ich wüßte nicht, wie man das bei dieser Konstruktion anstellen könnte.
Das optische Ergebnis ist genauso wie bei Deinem Template - Screenshot anbei - ich wollte nur das Inhaltsverzeichnis ein wenig schmaler haben und die Zeilen ein wenig weiter auseinander.

Hoffe, Du kannst etwas damit anfangen...

harm6

  • Member
Re: Inhaltsverzeichnis mit Punkten formatieren, aber wie?
« Antwort #3 am: Montag, 8. Oktober 2012, 19:54 »
Hallo juppes,

es geht Dir hier um das Inhaltverzeichnis.

Ich sehe überhaupt kein Problem ein kompilierbares Code-Beispiel zu erstellen.
Wenn Du ein Code-Beispiel benötigst, so streiche alles was nicht nötig ist oder ersetze es durch Triviales.

1. Ich brauche die Musik nicht, denn es geht nicht um die Musik. Ersetzt durch \new Staff { c1'' } o.ä.!
2. Ich brauche den Header nicht, den es geht nicht um den Header. Ersetzt durch \header { title = "Title" } etc!
3. Ich brauche die \paper-Angaben zu Abständen nicht. Gestrichen!
4. Ich brauche das \layout nicht. Weder \midi noch spacing-Angaben für Staffs. Gestrichen.
5. Ich brauche den Text des Vorworts nicht. Keine Notwendigkeit für irgendein \include.
6. Genausowenig wie für das top-level-include.



Zum Thema schmaleres Inhaltsverzeichnis mit größerem Zeilenabstand.

Geht mit:

\markup
    \fill-line {
    \center-column
            \override-lines #'(line-width . 80)
            \override-lines #'(baseline-skip . 5)
            \table-of-contents
}

Zum Thema sonstige Formatierungen
Es gibt verschiedene Möglichkeiten. Ich habe die gewählt, die ich als benutzerfreundlichste erachtet habe. Insofern:

a)  punktierte Linie.
Habe ich so belassen.

b) Formatierung der Einträge in das Inhaltsverzeichnis
Ich habe neu definiert:
  - `my-format'
  - `myTocItem'

Zunächst zu `myTocItem':
  Es ersetzt das alte `tocItem'. Du mußt `tocItem' also überall im book durch `myTocItem' ersetzen.
  Anwendungs-syntax: \myTocItem \markup { " I." "Pavana" "a 3" }

Zu `my-format'
  Dies ist eine Definition, in der Du Deine Formatierungen eintragen kannst. Sie werden dann von `myTocItem' ausgelesen und in das Inhaltsverzeichnis übernommen.
In 2.14.2 mußt Du allerdings scheme-Syntax verwenden.
In 2.16.0 geht es auch mit LilyPond-Syntax, erneut Dank an David Kastrup.
Anmerkung: Ich habe ein bißchen rumgetrickst, damit es keinen crash gibt, falls Du irrtümlich mehr Objekte formatierst als da sind.
 
Das `tocTitleMarkup' habe ich eingedeutscht.

Hier der gesamte Code:

\version "2.14.2"

% With 2.16.0 use:

% #(define (my-format- args)
%   "Works since 2.16.0"
%   (let* ((lngth (length args))
%          (fake-args (append args (make-list 10 "x")))
%          (mrkp
%               #{
%                \markup {
%                         \override #'(font-name . "Comic Sans MS") #(list-ref fake-args 0)
%                         \fontsize #4 \with-color #red             #(list-ref fake-args 1)
%                         \scale #'(2 . 1)                          #(list-ref fake-args 2)
%                         \rotate #45                    #(list-ref fake-args 3)
%                         \rotate #45                               #(list-ref fake-args 4)
%                         \rotate #45                               #(list-ref fake-args 5)
%                         \rotate #45                               #(list-ref fake-args 6)
%                         \rotate #45                               #(list-ref fake-args 8)
%                }
%               #})
%          (new-mrkp #{ \markup #(list-head (cadr mrkp) lngth) #}))
%   new-mrkp))
 
% With 2.14.2 use:

#(define (my-format args)
"Works with 2.14.2"
  (let* ((lngth (length args))
         (fake-args (append args (make-list 10 "x")))
         (mrkp (markup
                       #:override '(font-name . "Comic Sans MS")  (list-ref fake-args 0)
                       #:fontsize 4 #:with-color red              (list-ref fake-args 1)
                       #:scale '(2 . 1)                           (list-ref fake-args 2)
                       #:rotate 45                     (list-ref fake-args 3)
                       #:rotate 45                                (list-ref fake-args 4)
                       #:rotate 45                                (list-ref fake-args 5)
                       #:rotate 45                                (list-ref fake-args 6)
                       #:rotate 45                                (list-ref fake-args 8)))
         (new-mrkp (make-line-markup (list-head (cadr mrkp) lngth))))
  new-mrkp))

myTocItem =
#(define-music-function (parser location text) (markup?)
   "Add a line to the table of content, using the @code{tocItemMarkup} paper
variable markup"
   (let* ((text-args (cadr text))
          (new-text (my-format text-args)))
   (add-toc-item! 'tocItemMarkup new-text)))

\paper {
        tocItemMarkup = \tocItemWithDotsMarkup
        tocTitleMarkup = \markup {
        \fontsize #6
        \bold
        \column {
                \fill-line { \null "INHALTSVERZEICHNIS" \null }
                \vspace #2
        }
        }
}

\book {
  \bookpart {
          \markup \fill-line { \fontsize #6 "TITEL" }
  % Titelseite
  }
 
  \bookpart {
          \markup
              \fill-line {
              \center-column
                      \override-lines #'(line-width . 80)
                      \override-lines #'(baseline-skip . 5)
                      \table-of-contents
          }
  % Inhaltsverzeichnis
  }
 
  \bookpart {
         
    \header {
      title = "Titel"
      subtitle = "Subtitle"
      composer = "Composer"
    }
    % book-header
   
    \myTocItem \markup { " I." "Pavana" "a 3" }
    \score { \new Staff { c''1 } }
    %Pavane 1
   
    \myTocItem \markup { "II." "Pavana" "a 4"}
    \score { \new Staff { cis''1 } }
    %Pavane 2

  }
}

HTH,
  Harm

P.S.
Zitat
- Screenshot anbei -
Nö. Der fehlt.

juppes

  • Member
Re: Inhaltsverzeichnis mit Punkten formatieren, aber wie?
« Antwort #4 am: Donnerstag, 11. Oktober 2012, 16:37 »
hallo Harm,

nach ein paar Tagen Funkstille wegen anderweitiger Aktivitäten kommt mein Dank für Deine Mühe mit der Rückmeldung, daß mein Inhaltsverzeichnis so ist, wie ich es haben wollte.
Es tut mir leid, daß ich Dir zusätzliche Arbeit gemacht habe. Umso mehr weiß ich zu schätzen, daß Du mir trotzdem beigesprungen bist. Danke auch für die Anregungen, wie ich es besser machen kann. Werde mir's hinter die Ohren schreiben.

Ich habe nur noch eine kleine Nachfrage hier: Ich habe noch ein klein wenig am Scheme-Code herumgebastelt, ohne Ahnung von Scheme zu haben. Aber es gibt ja auch darin ein paar Dinge, die mehr oder weniger selbsterklärend sind, so daß man sich auf halbwegs sicherem Terrain bewegt. Es geht um Formatierungen, wenn man statt der Lilypond-Fonts irgendeinen Systemfont an die Stelle setzt. Tut man das, wie Du es vorgemacht hast, dann lassen sich die tocItems nicht mehr formatieren. Da kann dann stehen, was will, \bold, \italic oder was sonst. Das scheint nur mit den Lilypond-Fonts zu gehen. Kann man das ohne großen Aufwand ändern oder nicht? Wäre er groß, so wäre es nicht der Mühe wert...

Be-3

  • Member
Re: Inhaltsverzeichnis mit Punkten formatieren, aber wie?
« Antwort #5 am: Donnerstag, 11. Oktober 2012, 20:06 »
wenn man statt der Lilypond-Fonts irgendeinen Systemfont an die Stelle setzt. Tut man das, wie Du es vorgemacht hast, dann lassen sich die tocItems nicht mehr formatieren. Da kann dann stehen, was will, \bold, \italic oder was sonst. Das scheint nur mit den Lilypond-Fonts zu gehen.

Hallo Juppes,

genaugenommen geht es mit den Fonts bzw. den Schriftfamilien, die über make-pango-font-tree definiert wurden. Dies gilt dann allerdings für das gesamte Dokument. Dann "weiß" das für's komplette Schrift-Handling zuständige Pango auch, welche Schriftschnitte mit \italic oder \bold jeweils gemeint sind.

Typographisch (und auch technisch) gesehen sind die "Eigenschaften" fett, halbfett, kursiv, Kapitälchen usw. eingentlich völlig eigene Schriftschnitte (die übrigens normalerweise auch einzeln gekauft werden), die einen eigenen Namen haben.

Kurzum: Wenn Du im Scheme-Coding oder auch in ganz normalem Markup per font-name eine Schriftart benutzen
möchtest, hat die jeweilige Bold- oder Italics-Version auch einen komplett eigenen Namen und kann über diesen angesprochen werden:

Beispiel:  In Harms Beispiel soll die Schrift "Comic Sans MS" fett statt "normal" benutzt werden. Dies kannst Du erreichen, indem Du
#:override '(font-name . "Comic Sans MS") (list-ref fake-args 0)
durch
#:override '(font-name . "Comic Sans MS Bold") (list-ref fake-args 0)
ersetzt.

Viele Grüße
Torsten


harm6

  • Member
Re: Inhaltsverzeichnis mit Punkten formatieren, aber wie?
« Antwort #6 am: Freitag, 12. Oktober 2012, 12:47 »
Hallo juppes,

ich hoffe Torstens Erklärungen sind hinreichend für Dich.
Ich zumindest habe Dein Erklärungen/Fragen schlichtweg nicht verstanden, war ja kein Code dabei. ;)

Um mehr über make-pango-font-tree zu erfahren studiere die NR.
Sehr hilfreich sind auch Robert's Beiträge in diesem Thread.

HTH,
  Harm

juppes

  • Member
Re: Inhaltsverzeichnis mit Punkten formatieren, aber wie?
« Antwort #7 am: Freitag, 12. Oktober 2012, 16:54 »
hallo Harm,

danke, fürs erste bin ich bestens bedient. Das, was ich erreichen wollte und noch ein bißchen mehr, steht jetzt im Inhaltsverzeichnis.