Benutzerdefinierter Textübersatz, Buchstabenbasen ausrichten

Benutzerdefinierter Textübersatz, Buchstabenbasen ausrichten

Ich versuche, Akkorde über Text darzustellen, mit Hilfe derNotenblätterPaket. Das Leadsheets-Paket bietet einen High-Level-Befehl \chord{A#}, den ich aus Gründen vermeide, die ich vergessen habe (spielt keine große Rolle, es stellt sich heraus, dass die Frage unabhängig von Leadsheets ist). Also verwende ich einen benutzerdefinierten \overset{A#}{foo}Befehl (ungefähr kopiert von hierErstellen von Ersatzprogrammen für \overset und \underset im Nicht-Mathematikmodus, die nicht vom amsmath-Paket abhängig sind):

\documentclass{book}

\usepackage[full]{leadsheets}

% print chord over the line spanning several characters
\newcommand\textoverset[2]{%
  \leavevmode
  \vbox{\offinterlineskip
    \halign{%
      ##\hfil\cr
      \vphantom{A}#1\cr
      \noalign{}
      \strut#2\cr
    }%
  }%
}

\begin{document}

   % \writechord from leadsheets package, \textoverset defined above
   appar\textoverset{\writechord{Dm}}{ence}s\textoverset{\writechord{A\#}}{} \textoverset{\writechord{C}}{} ...

   % EDIT: Inside song environment, sharp can be written without slash
   \begin{song}{title=Foo}, interpret={F.Oo}\index{Foosong}

      appar\textoverset{\writechord{Dm}}{ence}s\textoverset{\writechord{A#}}{} \textoverset{\writechord{C}}{} ...

   \end{song}

\end{document}

Ausführen mit latexmk -xelatex.

Darstellung:

Bildbeschreibung hier eingeben

Das Problem ist , dass die Akkordbuchstaben Dund im Beispiel nicht vertikal ausgerichtet sind. Ich nehme an, das liegt an der Darstellung des Kreuzsymbols im Leadsheets-Paket, das eine vertikale Untergrenze hat, die niedriger ist als die Buchstaben, obwohl die Darstellung des Kreuzsymbols sehr speziell zu sein scheint (vielleicht um es größer zu machen). Ich bin mir nicht sicher, welche Magie hier verwendet wird. Der Befehl von Leadsheets hat diesen Fehler nicht, aber ich verstehe Low-Level-Latex nicht gut genug, um diesen Ansatz zu kopieren.AC\chord

Was ist die beste Möglichkeit, die Buchstaben vertikal auszurichten (für mich wäre es akzeptabel, wenn das Kreuzsymbol mit dem Text darunter überlappen könnte). Es wäre auch akzeptabel, die Art und Weise zu ändern, wie das Kreuzsymbol im Leadsheet dargestellt wird, wenn das einfacher ist, obwohl es so, wie es ist, hübsch aussieht.

(EDIT: Tatsächlich kann dieselbe vertikale Fehlausrichtung auch ohne Leadsheets reproduziert werden, indem man einfach den Overset-Test Ajund verwendet Ax. Idealerweise sollten die Basen des as vertikal ausgerichtet sein. Für diese Frage ist jedoch nur eine Lösung für das Kreuzsymbol in Leadsheets erforderlich, da die allgemeine Lösung schwieriger sein könnte und es in der Musiknotation glücklicherweise nicht viele andere Symbole mit tief hängenden Basen gibt.)

Antwort1

Sie scheinen neu definiert zu haben \#, da Ihr Code ein # und kein Kreuz erzeugt. Zerschlagen Sie es einfach.

\documentclass{book}

\usepackage[full]{leadsheets}

% print chord over the line spanning several characters
\newcommand\textoverset[2]{%
  \leavevmode
  \vbox{\offinterlineskip
    \halign{%
      ##\hfil\cr
      \vphantom{A}#1\cr
      \noalign{}
      \strut#2\cr
    }%
  }%
}
\DeclareRobustCommand{\#}{\smash{$\sharp$}}

\begin{document}

\show\#

   % \writechord from leadsheets package, \textoverset defined above
   appar\textoverset{\writechord{Dm}}{ence}s\textoverset{\writechord{A\#}}{} \textoverset{\writechord{C}}{} ...

\end{document}

Bildbeschreibung hier eingeben

Antwort2

Mit etwas Hilfe von @egreg, basierend auf dessen Antwort ich die Anpassung vorgenommen hatte \textoverset, kam ich auf diese Variante, die eine stabilere Ausrichtung aller Übersätze bietet:

\newcommand\textoverset[2]{%
  \leavevmode
  \vbox{\offinterlineskip
    \halign{%
      ##\hfil\cr % center
      \strut#1\cr
      \vphantom{(/Aj}#2\cr
    }%
  }%
}

Ich kann nicht gut erklären, was hier im Gegensatz zum Original vor sich geht (jeder kann die Antwort zur Erklärung abändern), aber dies scheint für verschiedene Zeichen beim Ausrichten von Übersätzen stabil zu funktionieren.

verwandte Informationen