确保两个元素之间的最小距离

确保两个元素之间的最小距离

上下文:我正在排版一本歌本,其中偶尔会在某个单词上方排版“和弦”,例如,如果我输入类似

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

当我排版这个时,AmB7mC7某种程度的重叠。

那么我的问题是:我如何确保它们不重叠?换句话说,我想在排版和弦之前插入一个空格,该空格足够长,以便它位于前一个空格被刷新之后。

需要说明的\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结构将扩展以适应最宽的长度(和弦或字母)。

相关内容