我的音乐学论文(有人创建这个标签!)将于本周一截止,我需要帮助弄清楚如何在 Latex 中实现复杂音乐和弦的符号化。我尝试了所有可在谷歌上搜索到的数学模式符号堆叠解决方案,并寻找了可以正确执行此操作的软件包,但可惜的是……Lilypond 也没用,因为那里的和弦符号丑得令人难以置信(话虽如此,我喜欢用它来排版其他所有内容)。
我的两次尝试的例子很可怜。
\documentclass{article}
\begin{document}
C\(^{7}\dbinom{\sharp7}{\sharp5}\)
\end{document}
第一个格式根本不正确,第二个格式还算正确,但是又太大又丑。
我需要的是我的符号程序所做的,如下面的例子所示。
我正在使用 Tufts 类和 lilyglyphs 作为音乐符号,在 LuaLatex 中进行编译。
临时解决方案
\documentclass{article}
%-----------------------------------------------------------------------------
% Packages
%-----------------------------------------------------------------------------
\usepackage{fontspec}
\usepackage{lilyglyphs}
\usepackage{mathtools}
%-----------------------------------------------------------------------------
% Commands
%-----------------------------------------------------------------------------
\newcommand{\tinysharpx}[1][0.10ex]{\hspace*{#1}\sharp[scale=.7]\hspace*{#1}} % Makes some room around the symbol and scales it down to better fit stacking
\newcommand{\tinyflatx}[1][0.10ex]{\hspace*{#1}\flat[scale=.7]\hspace*{#1}}
\newcommand\bigchord[4]{\(\text{#1}^{#2}\mkern-3mu\relax(\mathop{}\limits\mkern-3mu\relax{}^{#3}_{#4})\)} % makes a four argument operator
%-----------------------------------------------------------------------------
% Document
%-----------------------------------------------------------------------------
\begin{document}
\bigchord{C}{7}{\tinysharpx 9}{\tinysharpx 5}
\end{document}
输出
仍需修复
1) 调整莲池符号,使其与数字一样高(如 Sibelius 示例所示)。
2) 调整两个堆叠数字之间的距离。需要稍微紧一点。
答案1
以下内容是否接近您的需要?
\documentclass{article}
\usepackage{fontspec}
\usepackage{lilyglyphs}
\usepackage{mathtools}
\begin{document}
C\(^{7}\hspace*{-.5ex}\binom{\sharp[scale=.6]7}{\sharp[scale=.6]5}\)
\end{document}
当然,升号的实际大小以及键和括号之间的间距可能取决于实际的文本字体。
我认为创建适当的参数化并考虑为和弦符号制作适当的命令是一个好主意。问题是这是否应该集成进去,lilyglyphs
或者我们是否应该创建一个新的包chordsymbols
。
答案2
(更改代码以适用于 Palatino 文本和数学字体的克隆。)
下面的示例定义了名为\mraise
和的辅助宏\mtop
——我想是“musicology-raise”和“musicology-atop”的缩写。前者使用两个 TeX“原语”(\raise
和\hbox
)来稍微提高其参数较少的比 更甚\textsuperscript
。后者还使用了另一个 TeX “原语”,\atop
,以非常紧凑的方式排版其参数。
\documentclass{article}
\usepackage{newpxtext,newpxmath} % set the text and math fonts
\usepackage{mleftright} \mleftright
%% Two handy macros: \mraise and \mtop
\newcommand\mraise[1]{\raise0.6ex\hbox{\scriptsize#1}}
\newcommand\mtop[2]{$\left(\mkern-1.5mu{{#1}\atop#2}\mkern-1.5mu\right)$}
\begin{document}
C\mraise{7}\mtop{\sharp9}{\sharp5}
\end{document}
附录:这是上述克隆的结果,其中mathpazo
加载了包 而不是newpxtext
和newpxmath
,并且将\left
宏\right
中的\mtop
和 替换为\bigl
和\bigr
:
进一步更新,它使用了 LuaLaTeX、fontspec
包、lilyglyphs
字体包和三种文本字体候选(Computer Modern、Times Roman 克隆和 Palatino 克隆):
% !TEX TS-program = lualatex
\documentclass[preview,border=1pt]{standalone}%{article}
\usepackage{fontspec}
\usepackage{lilyglyphs}
%% Two helper macros: \mraise and \mtop
\newcommand\mraise[1]{\raise0.6ex\hbox{\scriptsize#1}}
\newcommand\mtop[2]{$\bigl(\mkern-1.5mu {{\scriptsize#1}\atop{\scriptsize#2}} \mkern-1.5mu\bigr)$}
\begin{document}
C\mraise{7}\mtop{\sharp9}{\sharp5}
\setmainfont{XITS}
C\mraise{7}\mtop{\sharp9}{\sharp5}
\setmainfont{TeX Gyre Pagella}
C\mraise{7}\mtop{\sharp9}{\sharp5}
\end{document}
答案3
尝试这个:
\documentclass{article}
\usepackage{amsmath}
\newcommand\thing[4]{$\text{#1}^{#2}\mkern-2mu\relax(\mathop{}\limits\mkern-2mu\relax{}^{#3}_{#4})$}
\begin{document}
\thing{C}{7}{\sharp 9}{\sharp 5}
\end{document}