歌曲包:歌曲之间的垂直间距

歌曲包:歌曲之间的垂直间距

我想知道是否可以删除歌曲之间的任何额外垂直间距,以使所有歌曲之间的距离相同。在所附示例中,可以看到歌曲编号 10 和 11(以及歌曲 5 和 6)是如何分开的。我希望它们彼此靠近并保持固定距离。

此问题仅出现在 \songpos{0} 中。

在此处输入图片描述 最小工作示例:

\documentclass[a5paper,10pt]{article}
\usepackage[lyric]{songs}

\songpos{0}
\renewcommand{\colbotglue}{0pt plus .5\textheight minus 0pt}

\begin{document}
\begin{songs}{}

\beginsong{Gud er din hvile}[]
\beginchorus
Gud er din hvile, 
Kristus din styrke, 
anden er nar som en trofast ven. 
Herren har hort dig, 
nadig berort dig, 
Herren vil rejse dig op igen
\endchorus
\endsong
\beginsong{I min Gud har jeg fundet styrke}[]
\beginchorus
I min Gud har jeg fundet styrke
I min Herre bor min sang.
For han skanker frelse og fred.
Pa ham jeg stoler, min frygt forgar,
Pa ham jeg stoler, min frygt forgar.
\endchorus
\endsong
\beginsong{Jesus, Guds son}[]
\beginchorus
Jesus, Guds son, du lys i mit indre
lad ikke morket fa magten i mit sind
Jesus, Guds, son, du lys i mit indre
luk mig op for din karligheds and
\endchorus
\endsong
\beginsong{Jesus remember me}[]
\beginchorus
Jesus remember me
when you come into your kingdom. 
Jesus, remember me
when you come into your kingdom
\endchorus
\endsong
\beginsong{Jordens morke er ikke morke}[]
\beginchorus
Jordens morke er ikke morke, Gud, for dig:
som dagens klare lys bliver natten.
\endchorus
\endsong
\beginsong{Gud er din hvile}[]
\beginchorus
Gud er din hvile, 
Kristus din styrke, 
anden er nar som en trofast ven. 
Herren har hort dig, 
nadig berort dig, 
Herren vil rejse dig op igen
\endchorus
\endsong
\beginsong{I min Gud har jeg fundet styrke}[]
\beginchorus
I min Gud har jeg fundet styrke
I min Herre bor min sang.0For han skanker frelse og fred.
Pa ham jeg stoler, min frygt forgar,
Pa ham jeg stoler, min frygt forgar.
\endchorus
\endsong
\beginsong{Jesus, Guds son}[]
\beginchorus
Jesus, Guds son, du lys i mit indre
lad ikke morket fa magten i mit sind
Jesus, Guds, son, du lys i mit indre
luk mig op for din karligheds and
\endchorus
\endsong
\beginsong{Jesus remember me}[]
\beginchorus
Jesus remember me
when you come into your kingdom. 
Jesus, remember me
when you come into your kingdom
\endchorus
\endsong
\beginsong{Jordens morke er ikke morke}[]
\beginchorus
Jordens morke er ikke morke, Gud, for dig:
som dagens klare lys bliver natten.
\endchorus
\endsong

\end{songs}
\end{document}

答案1

感谢您最小化您的工作示例。经过大量挖掘,您的最小化示例使我能够追踪导致此问题的歌曲包编程中一个长期存在的、难以捉摸的错误。该错误将在软件的下一个版本(应该是 2.19)中修复。以下是您在此期间可以使用的解决方法和手动修复:

  1. 大多数歌曲之间出现不必要的空白的用户并没有发现错误;他们无意中将其\colbotglue设置为 0pt,迫使歌曲包将每列的末尾与页面底部齐平。当没有足够的材料来填充列时,歌曲之间就会出现间隙。因此,通常的解决方案是调整宏,\colbotglue如以下类似问题的答案中所述:

    https://tex.stackexchange.com/a/108259/28900

  2. 如果在进行上述更正后您仍然看到歌曲之间的空格,则可能是上述错误(出现在歌曲版本 2.18 及更高版本中)造成的。您通常可以通过重新定义\colbotglue为足够强大的内容来抵消造成额外空格的不必要的内容,从而解决该错误\vfil。例如:

    \renewcommand\colbotglue{0pt plus 1fill minus 0pt}
    

    这解决了您的最小工作示例中的问题。

  3. 要解决问题的核心错误,您可以songs.sty按照以下方式手动编辑文件:在软件包的 2.18 版本中,找到\SB@mkpage宏的定义。在其定义中,将以下行替换为:

    \global\setbox#2\vbox{\unvbox\SB@tempii\unskip}%
    

    内容如下:

    \global\setbox#2\box\SB@tempii
    

    然后,在紧接着这一行后面\repeat添加以下代码:

    \ifnum#1=\z@\global\setbox#2\vbox{\unvbox#2\unskip}\fi
    

    预计此修正将包含在 2.19 版本中。

(好奇的人:问题是页面制作器\vfil在尝试候选列中断时会临时附加内容以抑制未满框警告。\vfil一旦选择了最终的列断点,就应该删除多余的部分,但是如果算法“幸运”并在第一次尝试时找到完美的列断点而没有任何回溯,它就会忘记删除\vfil。)

相关内容