上下文:我正在排版一本歌本,其中偶尔会在某个单词上方排版“和弦”,例如,如果我输入类似
This \chord{A}is my \chord{B}beautiful song
我会得到类似这样的结果:
A B
This is my beautiful song
我可以轻松做到这一点,基本上只需结合\raise
和\hss
即可。但是,有时,当\chord
命令太靠近时,和弦会排版在另一个和弦之上(正常情况下,它们不占用空间):
This \chord{Am}i\chord{B7m}s \chord{C7}a mess
当我排版这个时,Am
和B7m
有C7
某种程度的重叠。
那么我的问题是:我如何确保它们不重叠?换句话说,我想在排版和弦之前插入一个空格,该空格足够长,以便它位于前一个空格被刷新之后。
需要说明的\chord
是,
\leavevmode\raise2.3ex\hbox to 0pt{\rule{0pt}{2.3ex}#1\hss
梅威瑟:
\documentclass{article}
\newcommand{\chord}[1]{\leavevmode\raise2.3ex\hbox to 0pt{\rule{0pt}{2.3ex}#1\hss}}
\begin{document}
This \chord{A}is my \chord{B}beautiful song
This \chord{Am}i\chord{B7m}s \chord{C7}a mess
% I'd like something that looks about like this, but automatically
This \chord{Am}i\hspace{5mm}\chord{B7m}s \hspace{5mm}\chord{C7}a mess
\end{document}
答案1
我的建议是稍微改变一下输入。也就是说,不要只向宏提供和弦\chord
,而是提供和弦和信函覆盖范围:
\documentclass{article}
\newcommand{\chord}[1]{\leavevmode\raise2.3ex\hbox to 0pt{\rule{0pt}{2.3ex}#1\hss}}
\newcommand{\newchord}[2]{\begin{tabular}[b]{@{}l@{}}
\scriptsize #1 \\ \strut#2
\end{tabular}}
\begin{document}
This \chord{A}is my \chord{B}beautiful song
This \chord{Am}{i}\chord{B7m}s \chord{C7}a mess
% I'd like something that looks about like this, but automatically
This \chord{Am}i\hspace{5mm}\chord{B7m}s \hspace{5mm}\chord{C7}a mess
\hrulefill
This \newchord{A}{is} my \newchord{B}{beautiful} song
This \newchord{Am}{i}\newchord{B7m}{s} \newchord{C7}{a} mess
\end{document}
该tabular
结构将扩展以适应最宽的长度(和弦或字母)。