自訂文字重疊,對齊字母底座

自訂文字重疊,對齊字母底座

我嘗試使用以下命令在文字上方渲染和弦鉛片包裹。 Leadsheets 套件提供了一個高級命令\chord{A#},我由於忘記的原因而避免使用該命令(這並不重要,事實證明問題與 Leadsheets 無關)。所以我使用自訂\overset{A#}{foo}命令(大約從這裡複製創建非數學模式替代 \overset 和 \underset 不依賴 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}

運行與latexmk -xelatex.

渲染:

在此輸入影像描述

問題在於範例中的和弦字母D,A和沒有垂直對齊。C我認為這是由於 Leadsheets 包中尖銳符號的渲染造成的,該符號的垂直下限低於字母,儘管尖銳符號的渲染看起來很特別(也許是為了使其更大),但不確定是什麼魔力在在那裡使用。 Leadsheets 中的指令\chord沒有這個缺陷,但我對低階乳膠的了解不足以複製這個方法。

讓字母垂直對齊的最佳方法是什麼(對我來說,如果尖銳的符號可以與下面的文字重疊,那就可以接受)。如果更容易的話,更改渲染尖銳符號的鉛表方式也是可以接受的,儘管它看起來很漂亮。

(編輯:實際上,無需鉛表即可重現相同的垂直未對齊,只需使用重疊測試AjAx。理想情況下 s 的底座a應垂直對齊。但對於這個問題,只需要針對鉛表中的尖銳符號的解決方案,因為一般的解決方案可能會更困難,幸運的是音樂符號沒有許多其他具有低懸掛基礎的符號。

答案1

您似乎已經重新定義了\#,因為您的程式碼產生了 # 而不是尖銳符號。就砸碎它吧。

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

在此輸入影像描述

答案2

在 @egreg 的幫助下,我根據他的答案進行了定制\textoverset,我想出了這個變體,它為所有重疊提供了更穩定的對齊:

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

我無法很好地解釋與原始內容相反的情況(任何人都可以修改答案來解釋),但這似乎對各種字符都有效,可以對齊重疊。

相關內容