但是,有几个简单的解决方案:

但是,有几个简单的解决方案:

我使用 LaTeX 和 LilyPond(使用)排版了一本包含音乐作品的书lilypond-book。每首乐曲都从新的一页开始,长度从不到一页到几页不等。

我希望每首乐曲都填满所需的页数,这样乐曲最后一页的底部就不会留有空隙,并且所有页面的五线谱间距均匀。这可以在 LilyPond 中通过设置ragged-last-bottom为 来实现##f。这是一个简单的例子(music.ly):

#(set-global-staff-size 32)

\paper {
  paper-width = 18.5\cm
  ragged-last-bottom = ##f
}

\header{
  tagline = ##f
}

{
  c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c
  c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c
  c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c
  c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c
  c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c
}

这将产生以下输出:

第 1/2 页:
良好输出的第 1/2 页

第 2/2 页:
良好输出的第 2/2 页

现在,当我尝试在 LaTeX 中使用它时,它不起作用,因为将lilypond-bookLilyPond 输出分成.eps每个包含单行的文件,并且这些文件被生成的.tex文件一个接一个地包含。

因此,此 LaTeX 文件生成的输出不会用均匀分布的谱表完全填满页面(正如您在最后一页中轻松看到的那样):

\documentclass[a4paper]{article}
\usepackage{geometry}

\begin{document}

hello world

\lilypondfile{music.ly}

\end{document}

第 1/3 页:
错误输出的第 1/3 页

第 2/3 页:
错误输出的第 2/3 页

第 3/3 页:
错误输出的第 3/3 页

所以我的问题很简单:如何让 LaTeX 的行为像 LilyPondragged-last-bottom那样##f

非常感谢!☺

答案1

有趣的问题!最终,经过大量的思考和准备工作,解决方案最终变得非常简单。

感谢您向我介绍 lillypond — 很酷的东西。

我仍然有点困惑,因为我只使用了大约 5 分钟,但这就是我发现的。

你制作这个文件,我将其命名为 lillypond.ly:

#(set-global-staff-size 32)

\paper {
  paper-width = 18.5\cm
  ragged-last-bottom = ##f
}

\header{
  tagline = ##f
}

{
  c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c
  c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c
  c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c
  c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c
  c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c
}

我直接从你的问题中得到了这个答案。

另外,直接从您的问题是这个文件,我将其命名为 lillypondtex.lytex (.lytex 扩展名很重要并且很难弄清楚。)

\documentclass[a4paper]{article}
\usepackage{geometry}

\begin{document}

hello world

\lilypondfile{lillypond1.ly}

\end{document}

Applications/LilyPond.app/Contents/Resources/bin/lilypond-book --output=out --pdf lillypondtex.lytex如果您使用的是 Mac 电脑,又懒得按照安装说明操作,那么此文件至少会通过命令进行编译。在正常安装中,我认为此命令应该只是lilypond-book --output=out --pdf lillypondtex.lytex

该命令生成一个名为 的新目录out,其中包含一个名为5a(稍后很重要)的目录和以下文件:

lillypondtex.dep
lillypondtex.tex
snippet-map--9077002354240704700.ly
snippet-names--9077002354240704700.ly

现在我们终于取得了一些进展,终于得到了我熟悉并喜爱的扩展!

pdflatex继续运行lillypondtex.tex将得到与你看到的结果相同但你不喜欢的输出。

lillypondtex.tex文件包含以下内容:

\documentclass[a4paper]{article}
\usepackage{geometry}

\usepackage{graphics}
\begin{document}

hello world

{%
\parindent 0pt
\noindent
\ifx\preLilyPondExample \undefined
\else
  \expandafter\preLilyPondExample
\fi
\def\lilypondbook{}%
\input{5a/lily-66b633c5-systems.tex}
\ifx\postLilyPondExample \undefined
\else
  \expandafter\postLilyPondExample
\fi
}

\end{document}

仍然有点混乱,但是这条线\input{5a/lily-66b633c5-systems.tex}是关键。

现在,进入5a目录,我们有一个名为的文件lily-66b633c5-systems.tex,它最终是文档的布局代码。

\includegraphics{5a/lily-66b633c5-1}%
\ifx\betweenLilyPondSystem \undefined
  \linebreak
\else
  \expandafter\betweenLilyPondSystem{1}%
\fi
\includegraphics{5a/lily-66b633c5-2}%
\ifx\betweenLilyPondSystem \undefined
  \linebreak
\else
  \expandafter\betweenLilyPondSystem{2}%
\fi
\includegraphics{5a/lily-66b633c5-3}%
\ifx\betweenLilyPondSystem \undefined
  \linebreak
\else
  \expandafter\betweenLilyPondSystem{3}%
\fi
\includegraphics{5a/lily-66b633c5-4}%
\ifx\betweenLilyPondSystem \undefined
  \linebreak
\else
  \expandafter\betweenLilyPondSystem{4}%
\fi
\includegraphics{5a/lily-66b633c5-5}%
\ifx\betweenLilyPondSystem \undefined
  \linebreak
\else
  \expandafter\betweenLilyPondSystem{5}%
\fi
\includegraphics{5a/lily-66b633c5-6}%
\ifx\betweenLilyPondSystem \undefined
  \linebreak
\else
  \expandafter\betweenLilyPondSystem{6}%
\fi
\includegraphics{5a/lily-66b633c5-7}%
\ifx\betweenLilyPondSystem \undefined
  \linebreak
\else
  \expandafter\betweenLilyPondSystem{7}%
\fi
\includegraphics{5a/lily-66b633c5-8}%
\ifx\betweenLilyPondSystem \undefined
  \linebreak
\else
  \expandafter\betweenLilyPondSystem{8}%
\fi
\includegraphics{5a/lily-66b633c5-9}%
\ifx\betweenLilyPondSystem \undefined
  \linebreak
\else
  \expandafter\betweenLilyPondSystem{9}%
\fi
\includegraphics{5a/lily-66b633c5-10}%
\ifx\betweenLilyPondSystem \undefined
  \linebreak
\else
  \expandafter\betweenLilyPondSystem{10}%
\fi
\includegraphics{5a/lily-66b633c5-11}%
\ifx\betweenLilyPondSystem \undefined
  \linebreak
\else
  \expandafter\betweenLilyPondSystem{11}%
\fi
\includegraphics{5a/lily-66b633c5-12}%
\ifx\betweenLilyPondSystem \undefined
  \linebreak
\else
  \expandafter\betweenLilyPondSystem{12}%
\fi
\includegraphics{5a/lily-66b633c5-13}%
\ifx\betweenLilyPondSystem \undefined
  \linebreak
\else
  \expandafter\betweenLilyPondSystem{13}%
\fi
\includegraphics{5a/lily-66b633c5-14}%
% eof

这些\linebreak命令就是问题所在,这就是为什么 LaTeX 将音乐视为一个段落而不是将其均匀分布。

此处所做的任何更改都将影响 的输出lillypond.tex。从这里开始,我相信这里有比我更有经验的人可以对此进行进一步的调整。


但是,有几个简单的解决方案:

\linebreak只需查找并替换所有带有 with的情况\par即可\flushbottom按预期使用lillypond.tex。输出:

在此处输入图片描述

这可以修复所有行和文本之间的间距。如果我用这种方法写书,我会选择将每行音乐变成一个段落,因为它可以\flushbottom很好地与文本配合使用并使其流畅。此外,此时,David Carlisle 的粘贴到文件\setlength\parskip{\fill}中的答案lillypond.tex将按他的意图工作。

另一个选择是用 替换每一个\linebreak\vfill通过填满最后一页,我们可以更接近 OP 期望的结果。

从这里开始,只需缩小边距,使其与 lillypond 的输出类似。顶部和底部的边距为 0.75 英寸,可产生以下输出:

在此处输入图片描述

间距均匀,页面填满,我相信这就是您所要求的。

最终lillypond.tex文件:

\documentclass[a4paper]{article}
\usepackage[margin=.75in]{geometry}

\usepackage{graphics}
\begin{document}
\flushbottom

\centering
hello world

{%
\parindent 0pt
\noindent
\ifx\preLilyPondExample \undefined
\else
  \expandafter\preLilyPondExample
\fi
\def\lilypondbook{}%
\input{5a/lily-66b633c5-systems.tex}
\ifx\postLilyPondExample \undefined
\else
  \expandafter\postLilyPondExample
\fi
}

\end{document}

我刚刚想到的另一个选择是\pagebreaks结合使用\vfill来明确声明每页显示多少行。


如果您想要默认Article边距:

如何隔开线条,使它们与article类默认边距均匀分布:\par在音乐行之间使用,然后\parskip像这样定义:

\setlength\parskip{26pt plus 36pt minus 0pt}

这告诉 LaTeX,每行之间必须有 26pt,并且可以通过\flushbottom将每行拉伸 36pt 来满足要求,但不允许将行压缩得更紧密。

结果如下:

在此处输入图片描述

LaTeX 将其分成两页,每页五行,和一页,每页四行。

下面是我用来实现它的代码:

\documentclass[a4paper]{article}
\usepackage[]{geometry}

\usepackage{graphics}
\begin{document}
\flushbottom

hello world

{%
\parindent 0pt
\noindent
\setlength\parskip{26pt plus 36pt minus 0pt}
\ifx\preLilyPondExample \undefined
\else
  \expandafter\preLilyPondExample
\fi
\def\lilypondbook{}%
\input{5a/lily-66b633c5-systems.tex}
\ifx\postLilyPondExample \undefined
\else
  \expandafter\postLilyPondExample
\fi
}

\end{document}

相关内容