我尝试使用主打单包。leadsheets 包提供了一个高级命令\chord{A#}
,我因为忘记的原因而避免使用它(这没什么大不了的,事实证明这个问题与 leadsheets 无关)。所以我使用了一个自定义\overset{A#}{foo}
命令(大致从这里复制而来创建不依赖于 amsmath 包的 \overset 和 \underset 的非数学模式替代品):
\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
中的命令没有这个缺陷,但我对低级 latex 的了解不足以复制该方法。
让字母垂直对齐的最佳方法是什么(对我来说,如果尖锐符号可以与下面的文本重叠,那就可以接受)。如果这样更容易,也可以改变 leadsheet 渲染尖锐符号的方式,尽管这样看起来很漂亮。
Aj
(编辑:实际上,无需使用铅字表,只需使用重叠测试和,即可重现相同的垂直错位。Ax
理想情况下,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
}%
}%
}
我无法很好地解释这里与原文相比发生了什么(任何人都可以修改答案来解释),但这似乎对各种字符都很有效,可以对齐过度设置。