我正在使用 LaTeX ( pdflatex
) 和 Lilypond 制作一个重要的音乐版本,两者都使用 EB Garamond 字体。这两个程序为“Q”提供了不同的字形:LaTeX 提供了常规 Q,而 Lilypond 提供了波浪形 Q。我想要两个文档中的常规 Q。比较下面的 MWE 的结果。
软件包提供的字体ebgaramond
提供了花哨的 Q 连字符。默认情况下,使用编码加载的字体版本不启用连字符。显然,在 Lilypond 通过 加载的pdflatex
字体T1
版本中,默认情况下启用了该连字符pango
。Lilypond 的字体加载依赖于系统,我的是 Debian GNU/Linux v8 和 Gnome v3.14.1。
这里还有一个问题(一个大大的花哨“Q”) 展示了如何在 LaTeX 中获得波浪形 Q(使用lualatex
并加载带有“Contextuals=Alternate”选项的字体)。但我喜欢默认pdflatex
输出,我不想要在 Lilypond 中获得波浪形 Q!
我怎样才能让 Lilypond 加载没有花哨 Q 连字符的字体文件?
为什么这是主题:Lilypond 正在加载由 LaTeX 包提供的字体,ebgaramond
但它的加载方式与 LaTeX 加载方式不同。因此,这是关于 Lilypond 与 LaTeX 包的交互,但不一定与 LaTeX 本身交互。
例子
文件texquack.tex
——编译pdflatex
:
\documentclass{article}
\usepackage{ebgaramond}
\usepackage[T1]{fontenc}
\pagestyle{empty}
\begin{document}
Quack
\end{document}
文件lyquack.ly
——编译lilypond
:
\version "2.18.2"
\header {
title = "Quack"
tagline = ##f
}
\paper {
line-width=2\in
#(define fonts
(make-pango-font-tree
"EB Garamond" "" ""
(/ staff-height pt 20)))
}
\score {
\new Staff
<<
\new Voice { a'1 }
\new Lyrics \lyricmode { Quack }
>>
}
答案1
TeXLive 2016 将该文件EBGaramond12-Regular.otf
作为ebgaramond
软件包的一部分提供。
通过检查fontforge
,我可以看到该文件定义了calt
“上下文替代”字体功能,其中字形在某些上下文中Q
被字形替换Q.long
。这些在表“calt”上下文替代查找 95 中的上下文 0 和上下文 1 下定义。替换在单一替换查找表 96 和 97 中定义。
在我的 Debian 系统上,系统会自动加载calt
启用该功能的字体。这就是为什么在任何使用系统字体选择机制的程序中,单词Quack
都会以 呈现Q.long
。LibreOffice 和 Lilypond 中的情况相同。
XeTeXcalt
默认加载该功能,但 LuaTeX 不加载。这可能是因为 XeTeX 使用系统字体机制,而 LuaTeX 使用自己的字体机制 ( luaotfload
)。
考虑以下示例,清楚的XeTeX 和 LuaTeX。我们必须calt
向 LuaTeX 添加该功能(:+calt
在字体定义中)才能获得花哨的 Q。或者,我们可以从 XeTeX 中删除该功能以获得常规 Q(:-calt
在字体定义中)。
XeTeX (使用以下工具编译xetex
):
\font\ebg="EB Garamond" \ebg Quack \bye
LuaTeX(使用‘luatex’编译):
\input luaotfload.sty \font\ebg="EB Garamond:+calt" \ebg Quack \bye
使用时无法使用花哨的 Q,pdflatex
因为程序根本没有加载 OpenType 字体,而是加载了从 OpenType 字体改编而来的 LaTeX 字体度量文件(等),而且长 Q 显然不包括在内。
正如@AlanMunn 所说,Lilypond 开发人员正在讨论如何改进 Lilypond 的字体选择机制,包括指定 OpenType 字体功能。稳定版本 2.18.2 中不提供此功能。
TL;DR——可能的解决方案如下:
- 拥抱华丽的 Q,放弃。使用默认值或通过选择功能来
pdflatex
编译 LaTeX 部分。替代上下文也给出了华丽的斜体 Q 和可爱的斜体连字符。xelatex
fontspec
lualatex
calt
fontspec
es
- 编辑字体文件以更改默认功能(例如,编辑 FontForge 中的查找表)。可能可以通过编写文件来完成
.fea
,如fontspec
文档中所述。 - 接受文档中的变量 Q。由于一个是乐谱,另一个是文本,因此不太明显。