![如何使用自定义字体的 lilypond-book?](https://linux22.com/image/271841/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E8%87%AA%E5%AE%9A%E4%B9%89%E5%AD%97%E4%BD%93%E7%9A%84%20lilypond-book%EF%BC%9F.png)
我正在尝试创建一个包含 lilypond 片段的 LaTeX(更准确地说是 XeLaTeX)文档。我用它lilypond-book
来创建一个 .tex 文件。在我的(LaTeX)文档中,我使用(自定义)TTF 字体。我希望我的歌词以相同的字体显示。通过使用环境\paper
和#(define fonts (make-pango-font-tree ...))
所述命令这里例如,我可以在 lilypond 中使用该字体。我通过lilypond
在我的(单独的)lilypond 文件上运行命令并在 PDF 查看器中查看结果来验证这一点。
现在,我基本上想在我的 LaTeX+Lilypond 文档中获得相同的结果。据我所知,lilypond-book
大部分情况下会忽略\paper
lilypond 文件中的部分。有没有办法在 lilypond 文件中设置字体,以便 尊重它lilypond-book
?
我认为这个问题有一个简单的答案,但我在优秀的 lilypond 文档或其他地方找不到任何线索。
答案1
我不太确定这里的问题是什么,但我怀疑这是lilypond-book
你使用的特定版本的问题。如果我这样做:
\documentclass{scrartcl}
\usepackage{fontspec}
\newcommand*{\defaultfontfamily}{Calluna}%
\defaultfontfeatures{Mapping=tex-text, Ligatures={Discretionary, Common, Rare}}%
\setmainfont{\defaultfontfamily}%
\begin{document}
\subsection*{Lilypond \lilypondversion}
\begin{lilypond}
\paper {
myStaffSize = #20
#(define fonts
(make-pango-font-tree "Calluna"
"Calluna Sans"
"Luxi Mono"
(/ myStaffSize 20)))
}
\new Voice {
\time 3/4
g2 e4
a2 f4
g2.
}
\addlyrics {
\set stanza = #"1. "
Hi, my name is Bert.
}
\addlyrics {
\override StanzaNumber #'font-name = #"Calluna"
\set stanza = #"2. "
\override LyricText #'font-family = #'roman
Oh, ché -- ri, je t'aime
}
\end{lilypond}
\subsection*{Not lilypond}
Oh, ché -- ri, je t'aime
\end{document}
然后运行:
lilypond-book --latex-program=xelatex test.lytex && xelatex test.tex
我得到以下输出:
请注意两处都使用了 Calluna。由于文档的 lilypond 部分从 pango(而不是 fontspec/xelatex)获取字体,因此 TeX 文档中出现的任何 OpenType 特性都不会显示在 Lilypond 输出中……但至少您获得了一致的字体!
答案2
虽然我没有找到一个干净的方法来解决我的问题,但我可以解决我的问题。以防万一这个问题没有优雅的解决方案,我提供了一个丑陋的解决方案:我将修改 lilypond-book 并手动(#(define ...)
和硬编码)将语句添加到paper
(对于所有代码片段):
编辑lilypond 附带的python
模块book_snippets.py
。在我的情况下,它位于/usr/share/lilypond/2.14.2/python/book_snippets.py
并在此文件中搜索PREAMBLE_LY
。在 的定义中PREAMBLE_LY
,有一个\paper
块。向其中添加任何您想要的内容,但请记住,lilypond-book 会自行设置一些值,并且一些参数可以在 LaTeX 文件中覆盖。据我所知,不幸的是,字体定义无法从 LaTeX 中指定(从 lilypond 2.14.2 版开始)。您可以通过向此模块添加特定于您要求的参数来轻松编写更易于维护的解决方案。
答案3
有趣的是,我不知道 lilypond-book 不会尊重您的字体声明。因此,我没有直接的答案,但我想到了两种替代方法。
第一种是完全避免使用 lilypond-book,而只是将 lilypond 代码单独编译为片段,然后将 pdf 插入到您的 XeLaTeX 文档中。据我所知,这正是 lilypond-book 所做的。我对大多数乐谱都这样做,我使用 Lilypond 制作整页,然后使用 LuaTeX 处理封面和封底以及所有其他文本。我知道片段比整页更难处理,但效果应该不错。
另一个是学习 MusixTeX。这就是我最新项目所做的事情。它将包含大约 1,200 个音乐片段,因此我不用摆弄 lilypond-book 或甚至只是 lilypond 并插入所有外部 pdf,而是用 MusixTeX 来做。它的语法与 lilypond 不同。非常不同。而且学习曲线更陡峭。而且它没有所有很好的自动间距算法。但是一旦你掌握了语法,它就没那么糟糕了,而且它使编译和引入片段变得容易得多,因为它不依赖于任何外部软件或多次编译。
第三个更疯狂的想法。使用 Lilypond-book 生成包含片段的文档无文字然后使用 XeLaTeX 在 lilypond 片段顶部添加所需的文本。