我正在做一个大型项目,该项目可以自动生成乐谱,无需任何人工干预。大多数情况下,我使用 Lilypond。但有些乐谱使用图形符号,对于这些乐谱,我使用 TikZ 和 pdfLaTeX。问题是我想在 LaTeX 中匹配 Lilypond 的标题标题外观,但我很挣扎。
首先是Lilypond
接下来是我的努力:
以下是我的软件生成的 LaTeX 代码:
\documentclass[11pt]{memoir}
\usepackage{tikz}
\usepackage[top=5mm,left=15mm,right=15mm]{geometry}
\usepackage{parskip}
\usepackage{newcent}
\begin{document}
\begin{center}
(Dedication) \\
\smallskip\textbf{\LARGE{Title}} \\
\medskip\textbf{\large{Style}} \\
\end{center}
\vspace{-8pt}
\noindent
\begin{minipage}[t][0em][b]{0.33\textwidth}Poet \end{minipage}
\begin{minipage}[t][0em][b] {0.33\textwidth}\begin{center}\textbf{\large{Instrument}} \end{center}\end{minipage}
\begin{minipage}[t][0em][b]{0.33\textwidth}\hfill Composer\end{minipage}\\
\medskip
\noindent
\begin{minipage}[c][1em][b]{0.5\textwidth}Meter \end{minipage}
\begin{minipage}[c][1em][b]{0.5\textwidth}\hfill Arranger\end{minipage}\\
Piece
\end{document}
因此存在几个问题:
我的“作曲家”似乎没有右对齐
我真的不喜欢这
\vspace{-8pt}
一点。该软件将使用不同的字体和纸张大小,我担心任何这样的硬编码最终都会看起来很糟糕。我以前从未使用过 minipages,所以我不知道我是否正确地做了这些事情。基本上我只是试验了参数,直到它看起来不错。我不知道为什么 Lilypond 示例中的“Piece”条目间距如此尴尬,但我更喜欢我的示例中更均匀的间距,所以不是一个问题。
我可以自己更多地尝试几何形状,但如果有人对间距有任何建议,我也会很感激。
“诗人”、“韵律”和“作品”并不总是有条目。因此,目前使用
\hfill
似乎可以保持相同的间距。假设我继续使用 minipages,这是处理该问题的最佳方法吗?
它不需要是一个完美的复制品,但我希望它在普通观察者看来是相同的。
答案1
我建议,首先,使用键值语法。然后,你可以使用tabular
三个大小相同的列来划分空间,并进行左对齐、居中对齐和右对齐。
仅当存在时才会排版题注,并且位于独特的中心对齐列中,因此其宽度不会影响其他元素的定位。
\documentclass[11pt]{memoir}
\usepackage[top=5mm,left=15mm,right=15mm]{geometry}
\usepackage{newcent}
%\usepackage{array} % not needed with memoir
\usepackage{xparse}
\ExplSyntaxOn
\keys_define:nn { bfootdav/lilyheader }
{
dedication .tl_set:N = \l_bfootdave_lilytitle_dedication_tl,
title .tl_set:N = \l_bfootdave_lilytitle_title_tl,
style .tl_set:N = \l_bfootdave_lilytitle_style_tl,
instrument .tl_set:N = \l_bfootdave_lilytitle_instrument_tl,
poet .tl_set:N = \l_bfootdave_lilytitle_poet_tl,
composer .tl_set:N = \l_bfootdave_lilytitle_composer_tl,
arranger .tl_set:N = \l_bfootdave_lilytitle_arranger_tl,
meter .tl_set:N = \l_bfootdave_lilytitle_meter_tl,
piece .tl_set:N = \l_bfootdave_lilytitle_piece_tl,
}
\NewDocumentCommand{\makepieceheader}{m}
{
\group_begin:
\keys_set:nn { bfootdav/lilyheader } { #1 }
\bfootdav_make_piece_header:
\group_end:
}
\cs_new_protected:Npn \bfootdav_make_piece_header:
{
\noindent\begin{tabular}
{
@{}
>{\raggedright}p{.33333\textwidth}
@{}
>{\centering}p{.33333\textwidth}
@{}
>{\raggedleft\arraybackslash}p{.33333\textwidth}
@{}
}
\tl_if_empty:NF \l_bfootdave_lilytitle_dedication_tl
{
\multicolumn{3}{@{}>{\centering}p{\textwidth}@{}}
{
( \l_bfootdave_lilytitle_dedication_tl )
}
\\
}
& \LARGE\bfseries\strut \l_bfootdave_lilytitle_title_tl &
\\
& \large\bfseries\strut \l_bfootdave_lilytitle_style_tl &
\\
\l_bfootdave_lilytitle_poet_tl &
\bfseries\l_bfootdave_lilytitle_instrument_tl &
\l_bfootdave_lilytitle_composer_tl
\\
\l_bfootdave_lilytitle_meter_tl && \l_bfootdave_lilytitle_arranger_tl
\\
\l_bfootdave_lilytitle_piece_tl &&
\end{tabular}
}
\ExplSyntaxOff
\begin{document}
\makepieceheader{
dedication=Dedication,
title=Title,
style=Style,
poet=Poet,
instrument=Instrument,
composer=Composer,
meter=Meter,
arranger=Arranger,
piece=Piece
}
\end{document}