Permettre à une portée d'occuper l'entièreté de l'espace horizontal (pas d'espace sur les côtés)

Voici la première page d'un document LaTeX sur lequel je suis en train de travailler :

\documentclass{article}
\usepackage[most]{tcolorbox}
\usepackage{pgffor, ifthen}
\usepackage{xcolor}
\usepackage{fontspec}
\newfontfamily\notoSans{Noto Sans}
\newfontfamily\cosq{C059}

\usepackage{rotating} % for turn
\usepackage[pass-fonts]{lyluatex}
\usepackage{geometry}
\geometry{
    a4paper,
    left=0.5in,
    right=0.5in,
    top=0.5in,
    bottom=1in
}

\newcommand{\notes}[3][\empty]{%
    \noindent
    \foreach \n in {1,...,#2}{%
        \ifthenelse{\equal{#1}{\empty}}
        {\textcolor{black!20}{\rule{#3}{0.5pt}\\}}
        {\textcolor{black!20}{\rule{#3}{0.5pt}\vspace{#1}\\}}
    }
}

\newtcolorbox{mybox}[1]{
    enhanced,
    title={#1},
    fonttitle=\cosq\bfseries\fontsize{12pt}{14pt}\selectfont,
    attach boxed title to top left=
      {xshift=4mm, yshift=-3mm},
    boxed title style={size=small, colback=black},
    colback=white
}

\newcommand{\taskBlock}[2]{%
    \begin{mybox}{#1}
        \vspace{6ex}
        {\notes[3ex]{#2}{\textwidth}}
    \end{mybox}
}

\begin{document}

\begin{center}
    \huge Piano Practice Sheet\\[0.5em]
    \large ------ Student Name ------
    \vspace{3em}
\end{center}

\noindent
\begin{minipage}[t]{0.8\textwidth}
  \taskBlock{Technique}{10}
  \vfill
  \taskBlock{Exercises}{10}
\end{minipage}
\hfill
\begin{minipage}[]{0.2\textwidth}
  \vspace*{\fill}
    \begin{turn}{90}
    \begin{minipage}{0.8\textheight}
      \begin{lilypond}
        \version "2.24.2"

        \paper {
            indent = 0
            line-width = 300\mm
            system-count = 1
            page-count = 1
            top-margin = 0\mm
            bottom-margin = 0\mm
            vsize = 250\mm % TO ALLOW TALLER SYSTEM

            system-system-spacing =
              #'((basic-distance . 0)
                 (minimum-distance . 0)
                 (padding . 0)
                 (stretchability . 0))
            markup-system-spacing =
              #'((basic-distance . 0)
                 (minimum-distance . 0)
                 (padding . 0)
                 (stretchability . 0))
            ragger-bottom = ##f
            ragged-last-bottom = ##f
        }

        \layout {
            \context {
                \Score
                \remove "Bar_number_engraver"
                \remove "Time_signature_engraver"
                \remove "Bar_engraver"
                \remove "Key_engraver"
                % \override NonMusicalPaperColumn.line-break-permission = ##f
            }
            \context {
                \Staff
                \remove "Time_Signature_engraver"
                \remove "Bar_engraver"
                \remove "Key_engraver"
                \omit Staff.TimeSignature
            }
            \override VerticalAxisGroup.minimum-Y-extent = #'(-20 . 70)
        }

        \score {
          \new PianoStaff <<
            \new Staff {
              \clef treble
              \repeat unfold 100 { s1 } % adjust number for height
            }
            \new Staff {
            \clef bass
            \repeat unfold 100 { s1 }
            }
          >>
        }
      \end{lilypond}
    \end{minipage}
  \end{turn}
\end{minipage}
\end{document}

J'aimerais que la portée de musique occupe toute la hauteur de l’environnement minibox, c'est à dire toute la largeur de environnement turn qui produit l'effet de rotation de 90 degrés. L'espace qui vient avant et après la portée n'est pas désiré.

Il serait aussi pratique que la portée et les clefs soient plus grandes en général, puisque l'intention est de pouvoir écrire à la main dessus, mais je m'occuperai de cela plus tard.

J'ai essayé de poser ma question sur des sites dédiés à LaTeX, mais on m'a dit que c'était une question plus reliée à LilyPond. Je suis un débutant en tout ce qui concerne LilyPond, et je n'ai jamais non plus utilisé Scheme, donc voilà où j'en suis.

Bonjour
Juste pour ne pas laissez entendre qu'on bouderai votre message.
Il y trop longtemps que je n'ai plus latex, trop compliqué à réinstaller et se réapproprier.
Il m'est impossible d'aider sans.
Cordialement.

1 « J'aime »

Pour savoir si le problème vient de lilypond, il faudrait que vous ne donniez que le code lilypond et que vous demandiez quel est le résultat que vous ne parvenez pas à produire. Mais si vous ne voulez au final que des portées vides, ne serait-il pas plus simple d'exporter en png depuis lilypond et ensuite de manipuler le png avec latex? Vous aurez aussi un code bien plus facile à maintenir que si vous devez garder un appel direct à lilypond.

1 « J'aime »

la proposition de l'IA (Grok)

Points Clés

  • Il semble probable qu’en modifiant votre code LaTeX, vous pouvez faire en sorte que la portée musicale remplisse toute la hauteur de l’environnement rotatif.

  • La solution principale consiste à ajuster la largeur du minipage interne pour qu’elle corresponde à \textheight, puis à utiliser les paramètres actuels de LilyPond pour garantir une hauteur appropriée après rotation.

  • Assurez-vous de supprimer les espaces supplémentaires en ajustant les commandes \vspace*{\fill} si nécessaire.

Solution Directe

Modifier le Code LaTeX

Pour que la portée de musique occupe toute la hauteur de l’environnement rotatif, changez la ligne suivante dans votre code :

latex

\begin{minipage}{0.8\textheight}

par :

latex

\begin{minipage}{\textheight}

Cela ajuste la largeur du minipage interne à la hauteur totale de la page (par exemple, 247 mm pour du papier A4), ce qui, après rotation de 90 degrés, fera que la hauteur du contenu rotatif correspondra à la hauteur totale de l’environnement externe.

Supprimer les Espaces Inutiles

Supprimez le \vspace*{\fill} avant l’environnement rotatif pour éviter des espaces supplémentaires. Si vous souhaitez centrer verticalement, ajoutez un \vspace*{\fill} après le contenu rotatif :

latex

\begin{minipage}[]{0.2\textwidth}
    \begin{turn}{90}
        \begin{minipage}{\textheight}
            \begin{lilypond}
                ...
            \end{lilypond}
        \end{minipage}
    \end{turn}
    \vspace*{\fill}
\end{minipage}

Conserver les Paramètres LilyPond

Votre configuration actuelle de LilyPond, avec system-count = 1, est adéquate. Elle maintient une hauteur faible pour un seul système, ce qui, après rotation, donne une largeur étroite (environ 20 mm) qui s’intègre bien dans le minipage de droite (largeur d’environ 34 mm).

Résultat Attendu

Après ces modifications, la portée musicale devrait remplir toute la hauteur de l’environnement rotatif, sans espaces supplémentaires avant ou après, et s’adapter correctement à la mise en page.


Note Détaillée

Cette section explore en profondeur la question de l’utilisateur concernant l’ajustement de la portée musicale générée par LilyPond dans un document LaTeX, afin qu’elle occupe toute la hauteur de l’environnement rotatif. L’objectif est de fournir une analyse complète et professionnelle, incluant toutes les informations pertinentes pour garantir une réponse exhaustive, en s’appuyant sur les recherches effectuées et le contexte fourni.

Contexte et Objectif

L’utilisateur travaille sur un document LaTeX qui inclut une feuille de pratique pour piano, avec une partie principale contenant des blocs de tâches et une partie latérale contenant une portée musicale générée par LilyPond, rotée de 90 degrés pour être verticale. Le code actuel utilise un environnement minipage interne de largeur 0.8\textheight, et après rotation, il reste des espaces avant et après la portée, ce que l’utilisateur souhaite éliminer. L’objectif est de faire en sorte que la portée musicale remplisse toute la hauteur de l’environnement rotatif, tout en restant adaptée à l’espace disponible.

L’utilisateur mentionne également être débutant en LilyPond et n’avoir jamais utilisé Scheme, ce qui indique un besoin de solution simple et explicite, sans nécessiter de connaissances avancées en programmation.

Analyse du Code Actuel

Le document LaTeX fourni inclut plusieurs packages, notamment tcolorbox, pgffor, xcolor, fontspec, rotating et lyluatex, pour gérer les boîtes colorées, les boucles, les couleurs, les polices, les rotations et l’intégration de LilyPond. Les dimensions de la page sont définies avec geometry, avec des marges spécifiques (gauche et droite à 0,5 pouce, haut à 0,5 pouce, bas à 1 pouce).

La structure principale comprend :

  • Un titre centré avec le nom de l’élève.

  • Deux minipage côte à côte :

    • Le premier, de largeur 0.8\textwidth, contient deux blocs de tâches (taskBlock) avec un remplissage vertical (\vfill).

    • Le second, de largeur 0.2\textwidth, contient un environnement rotatif (turn) de 90 degrés, avec un minipage interne de largeur 0.8\textheight, où est inclus le code LilyPond.

Le code LilyPond est configuré avec un bloc \paper qui définit :

  • indent = 0

  • line-width = 300\mm

  • system-count = 1

  • page-count = 1

  • top-margin = 0\mm

  • bottom-margin = 0\mm

  • vsize = 250\mm

  • Divers paramètres d’espacement entre systèmes à 0.

Le bloc \layout supprime les numéros de mesure, les signatures de temps, les barres et les clés, et ajuste l’étendue verticale (VerticalAxisGroup.minimum-Y-extent = #'(-20 . 70)).

Le score lui-même est un PianoStaff avec deux portées (treble et bass), chacune contenant 100 mesures de silences (\repeat unfold 100 { s1 }), ce qui est probablement destiné à rendre la sortie haute, mais avec system-count = 1, tout est forcé dans un seul système, rendant la sortie large et basse.

Problématique et Analyse des Dimensions

L’utilisateur souhaite que la portée musicale occupe toute la hauteur de l’environnement rotatif, c’est-à-dire le minipage de droite, qui a une largeur de 0.2\textwidth (environ 34 mm pour du papier A4, avec \textwidth ≈ 170 mm) et une hauteur naturelle égale à \textheight (environ 247 mm pour A4). Cependant, le contenu rotatif est défini dans un minipage interne de largeur 0.8\textheight (environ 197,6 mm), et après rotation, sa hauteur devient cette largeur, soit 197,6 mm, laissant un espace au-dessus et en dessous (puisque 197,6 mm < 247 mm).

Pour remplir toute la hauteur, il faut que la hauteur du contenu rotatif soit égale à \textheight, soit 247 mm. Cela implique de modifier la largeur du minipage interne pour qu’elle soit \textheight, afin que, après rotation, sa hauteur corresponde à 247 mm.

Solution Proposée : Ajustement du minipage Interne

La solution consiste à changer \begin{minipage}{0.8\textheight} en \begin{minipage}{\textheight}, ce qui ajuste la largeur du minipage interne à 247 mm. Ensuite, avec les paramètres actuels de LilyPond (system-count = 1), la sortie aura :

  • Une largeur (LW) très grande (100 mesures dans un seul système, disons 1000 mm ou plus).

  • Une hauteur (LH) faible (hauteur d’un seul système, environ 20 mm).

Lorsque cette sortie est placée dans le minipage de largeur 247 mm, elle débordera horizontalement, mais cela n’est pas un problème, car :

  • La hauteur du minipage interne sera déterminée par le contenu, soit LH ≈ 20 mm.

  • Après rotation avec \begin{turn}{90}, le contenu rotatif aura :

    • Une largeur de LH ≈ 20 mm.

    • Une hauteur de la largeur originale du minipage, soit 247 mm.

Ce contenu rotatif est alors placé dans le minipage de droite, qui a une largeur de 34 mm. Puisque 20 mm < 34 mm, il s’intègre bien horizontalement, et sa hauteur de 247 mm correspond à \textheight, remplissant ainsi toute la hauteur de l’environnement.

Gestion des Espaces Supplémentaires

Dans le code actuel, il y a un \vspace*{\fill} avant l’environnement rotatif, qui ajoute de l’espace vertical au-dessus, potentiellement créant un espace supplémentaire. Pour éliminer cet espace, supprimez \vspace*{\fill} si vous ne souhaitez pas de centrage vertical. Si vous préférez centrer verticalement, ajoutez un \vspace*{\fill} après le contenu rotatif pour équilibrer l’espace.

Ajustement de la Taille des Portées (Optionnel)

L’utilisateur mentionne vouloir agrandir les portées et les clés pour faciliter l’écriture manuelle, mais souhaite s’en occuper plus tard. Pour information, cela peut être fait en utilisant l’option staffsize dans l’environnement lilypond, par exemple :

latex

\begin{lilypond}[staffsize=26]
    ...
\end{lilypond}

Cela agrandit les portées et les symboles musicaux, avec une valeur ajustable (par exemple, 26 pour une taille plus grande).

Tableaux pour Résumer les Dimensions

Voici un tableau récapitulatif des dimensions avant et après les modifications, en supposant du papier A4 (\textheight ≈ 247 mm, \textwidth ≈ 170 mm) :

Élément Avant (0.8\textheight) Après (\textheight)
Largeur du

minipage

interne|197,6 mm|247 mm|
|Hauteur après rotation|197,6 mm|247 mm|
|Largeur après rotation|Hauteur LilyPond (≈20 mm)|Hauteur LilyPond (≈20 mm)|
|Ajustement dans

minipage

de droite|S’intègre (34 mm > 20 mm)|S’intègre (34 mm > 20 mm)|
|Espace supplémentaire|Oui (197,6 < 247 mm)|Non (247 = 247 mm)|

Considérations Techniques

  • Compatibilité avec LilyPond : Assurez-vous d’utiliser une version récente de LilyPond (par exemple, 2.24.2, comme indiqué dans votre code) pour bénéficier des fonctionnalités d’intégration avec LaTeX via lyluatex.

  • Performance : Les modifications proposées n’affectent pas significativement les performances, car elles reposent sur des ajustements de dimensions dans LaTeX et non sur des calculs complexes dans LilyPond.

  • Centrage Vertical : Si vous choisissez de conserver le centrage avec \vspace*{\fill}, assurez-vous que le contenu rotatif a bien une hauteur égale à \textheight pour éviter des espaces résiduels.

Conclusion

En modifiant le minipage interne pour avoir une largeur de \textheight et en ajustant éventuellement les commandes \vspace*{\fill}, vous devriez obtenir une portée musicale qui remplit toute la hauteur de l’environnement rotatif, sans espaces supplémentaires avant ou après. Cette solution est simple à implémenter et ne nécessite pas de connaissances avancées en LilyPond ou Scheme, répondant ainsi aux besoins d’un débutant.

Key Citations

Bonjour,

alors en lilypond,
je fais des silences (r1) et je supprime le stencil.
l'espace est gardé, en silence invisible (s1) l'espace semble compressé.
je passe par un markup que je tourne à 90°,
et le translate de 15 sur la droite.
Pour le moment je n'ai pas d'autres solutions

Cordialement,

        \version "2.24.4"

        \paper {
            indent = 0
           % line-width = 400
            system-count = 1
            page-count = 1
            top-margin = 0\mm
            bottom-margin = 0\mm
            left-margin = 0
            right-margin = 0
            vsize = 250\mm % TO ALLOW TALLER SYSTEM
       

            system-system-spacing =
              #'((basic-distance . 0)
                 (minimum-distance . 0)
                 (padding . 0)
                 (stretchability . 0))
            markup-system-spacing =
              #'((basic-distance . 0)
                 (minimum-distance . 0)
                 (padding . 0)
                 (stretchability . 0))
            
           % ragger-bottom = ##f
           % ragged-last-bottom = ##f
          ragged-right = ##f
         tagline = ##f
        }

        \layout {
            \context {
                \Score
                \remove "Bar_number_engraver"
                \remove "Time_signature_engraver"
                \remove "Bar_engraver"
                \remove "Key_engraver"
                % \override NonMusicalPaperColumn.line-break-permission = ##f
            }
            \context {
                \Staff
                \remove "Time_Signature_engraver"
                \remove "Bar_engraver"
                \remove "Key_engraver"
                \omit Staff.TimeSignature
            }
            \override VerticalAxisGroup.minimum-Y-extent = #'(-20 . 70)
        }
        
  \markup \rotate #'90 \translate #'(20 . 0)
        \score {
          
          \new PianoStaff << 
            \new Staff { \override PianoStaff.Rest.stencil = ##f
              \clef treble
              \repeat unfold 88 {  r1 } % adjust number for height
            }
            \new Staff {
            \clef bass
            \repeat unfold 88 { r1 }
            }
          >>
        }
        

image

1 « J'aime »

J'ai regardé le produit du code LilyPond isolé, comme vous avez suggéré, et j'ai découvert que la portée occupe bien le PDF isolé de bout à bout. C'était vraiment un problème avec LaTeX, mais ça ne m'arrive que quand j'ai un environnent LilyPond dans un environnent rotatif, ce qui est très étrange.

Au moins, je sais à présent que le problème ne vient pas de LilyPond.

Je vais peut-être juste laisser ça comme ça et continuer d'écrire mon document, et j'arrangerai la portée avec Inkscape à la fin, vu que ce programme me permet d'éditer des PDFs.

Merci à tous pour vos conseils. ++