Textoverset personalizado, alinhar bases de letras

Textoverset personalizado, alinhar bases de letras

Tento renderizar acordes acima do texto usando a ajuda doplanilhaspacote. O pacote leadsheets fornece um comando de alto nível \chord{A#}que evito por motivos que esqueci (não importa muito, acontece que a questão é independente dos leadsheets). Então eu uso um \overset{A#}{foo}comando personalizado (aproximadamente copiado daquiCriando substitutos de modo não matemático para \overset e \underset não dependentes do pacote 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}

Correr com latexmk -xelatex.

Renderização:

insira a descrição da imagem aqui

O problema é que as letras dos acordes D, Ae Cno exemplo não estão alinhadas verticalmente. Presumo que isso se deva à renderização do símbolo sustenido no pacote leadsheets, que possui um limite inferior vertical inferior às letras, embora a renderização do símbolo sustenido pareça muito especial (talvez para torná-lo maior), não tenho certeza do que é mágica. usado lá. O \chordcomando do leadsheets não tem essa falha, mas não entendo o látex de baixo nível o suficiente para copiar essa abordagem.

Qual é a melhor maneira de alinhar as letras verticalmente (para mim seria aceitável se o símbolo sustenido pudesse se sobrepor ao texto abaixo). Também seria aceitável alterar a maneira como a planilha de renderização do símbolo sustenido, se isso for mais fácil, embora pareça bonito do jeito que está.

(EDITAR: Na verdade, o mesmo desalinhamento vertical pode ser reproduzido sem folhas de chumbo, apenas usando o teste overset Aje Ax. Idealmente, as bases do as devem estar alinhadas verticalmente. Mas para esta questão, apenas uma solução para o símbolo sustenido nas folhas de chumbo é necessária, como o a solução geral pode ser mais difícil e, felizmente, a notação musical não tem muitos outros símbolos com bases baixas.)

Responder1

Você parece ter redefinido \#, porque seu código produz um # e não um sinal sustenido. Basta esmagá-lo.

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

insira a descrição da imagem aqui

Responder2

Com a ajuda de @egreg com base em cuja resposta eu fiz o custom \textoverset, criei esta variação, que fornece um alinhamento mais estável de todos os oversets:

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

Não consigo explicar bem o que acontece aqui em contraste com o original (qualquer um pode modificar a resposta para explicar), mas isso parece funcionar de forma robusta para vários personagens, alinhando excessos.

informação relacionada