Textoverseset personalizado, alinear bases de letras

Textoverseset personalizado, alinear bases de letras

Intento representar acordes encima del texto usando la ayuda delhojas de plomopaquete. El paquete Leadsheets proporciona un comando de alto nivel \chord{A#}que evito por razones que olvidé (no importa mucho, resulta que la pregunta es independiente de Leadsheets). Entonces uso un \overset{A#}{foo}comando personalizado (aproximadamente copiado de aquíCrear sustitutos en modo no matemático para \overset y \underset no depende del paquete amsmath):

\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}

Corre con latexmk -xelatex.

Representación:

ingrese la descripción de la imagen aquí

El problema es que las letras del acorde D, Ay Cen el ejemplo no están alineadas verticalmente. Supongo que se debe a la representación del símbolo sostenido en el paquete de hojas de plomo, que tiene un límite inferior vertical que es más bajo que las letras, aunque la representación del símbolo sostenido parece muy especial (tal vez para hacerlo más grande), no estoy seguro de qué es la magia. usado allí. El \chordcomando de Leadsheets no tiene ese defecto, pero no entiendo lo suficiente el látex de bajo nivel como para copiar ese enfoque.

¿Cuál es la mejor manera de alinear las letras verticalmente? (Para mí, sería aceptable si el símbolo agudo pudiera superponerse con el texto a continuación). También sería aceptable cambiar la forma en que la hoja de plomo representa el símbolo sostenido, si eso es más fácil, aunque se ve bonito tal como está.

(EDITAR: En realidad, la misma desalineación vertical se puede reproducir sin hojas de plomo, simplemente usando la prueba de desbordamiento Ajy Ax. Idealmente, las bases de las as deberían estar alineadas verticalmente. Pero para esta pregunta, solo se requiere una solución para el símbolo agudo en las hojas de plomo, ya que el La solución general podría ser más difícil y, afortunadamente, la notación musical no tiene muchos otros símbolos con bases bajas).

Respuesta1

Parece que lo ha redefinido \#, porque su código produce un # y no un signo agudo. Simplemente aplastalo.

\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}

ingrese la descripción de la imagen aquí

Respuesta2

Con la ayuda de @egreg, en función de cuya respuesta hice la costumbre \textoverset, se me ocurrió esta variación, que proporciona una alineación más estable de todos los desbordamientos:

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

No puedo explicar bien lo que sucede aquí en contraste con el original (cualquiera puede modificar la respuesta para explicarlo), pero esto parece funcionar de manera sólida para varios personajes, alineando desbordamientos.

información relacionada