使用 songs 包创建自定义歌本

使用 songs 包创建自定义歌本

朋友们,我通常使用软件包的帮助来创建歌本songs(我猜 CTAN 版本有点旧,可以下载最新版本从这里)。请考虑以下示例(取自作者的网页):

\documentclass[letterpaper]{article}
%\usepackage[chorded]{songs}
\usepackage[lyric]{songs}

\newindex{titleidx}{cbtitle}

\begin{document}

\begin{songs}{titleidx}

\beginsong{Amazing Grace}[
  by={John Newton},
  sr={Luke 15:4; 2 Corinthians 4:8,9; Ephesians 2:8; Revelation 14:3},
  cr={Public domain.}]

\beginverse
A\[E]mazing \[E/D#]grace! How \[A/C#]sweet the \[E/B]sound
That \[E]saved a \[E/C#]wretch like \[B7]me!
I \[E]once was \[E/D#]lost, but \[A/C#]now am \[E/B]found;
Was \[A]blind, but \[A/B]now I \[E]see.
\endverse

\beginverse
T'was ^grace that ^taught my ^heart to ^fear,
And ^grace my ^fears re^lieved;
How ^precious ^did that ^grace ap^pear
The ^hour I ^first be^lieved!
\endverse

\endsong

\end{songs}

\end{document}

输出根据提供的参数\usepackage[<<type of songbook>>]{songs}

歌本输出

我总是使用chorded参数表示音乐家,lyric使用 参数表示其他观众。正如您在代码中看到的,使用 符号^将使其他诗句重复这些位置的和弦。大多数歌曲都有相同的旋律,所以我想通过将和弦放在第一节中而保持其他诗句不变来节省一些空间并节省一些树木,如下所示:

\beginverse
A\[E]mazing \[E/D#]grace! How \[A/C#]sweet the \[E/B]sound
That \[E]saved a \[E/C#]wretch like \[B7]me!
I \[E]once was \[E/D#]lost, but \[A/C#]now am \[E/B]found;
Was \[A]blind, but \[A/B]now I \[E]see.
\endverse

\beginverse
T'was grace that taught my heart to fear,
And grace my fears relieved;
How precious did that grace appear
The hour I first believed!
\endverse

\endsong

遗憾的是,chorded输出仍然保留了行之间的空格:

歌本输出

我的想法是这样的:当提供和弦时,像选项一样显示它们chorded,否则保留lyric一个。这是我想要获得的输出:

我有一个梦想

我阅读了songs文档,但找不到任何关于如何以我想要的方式混合和弦和歌词风格的参考资料。我想继续使用该songs软件包,因为它具有出色的索引功能,而且我已经有一本包含数千首歌曲的书。当然,如果不可能,我愿意接受有关软件包的其他建议。=)

答案1

一个可能的解决方案是使用包\singlespacing中的以下方法setspace

\documentclass[letterpaper]{article}
\usepackage[chorded]{songs}
\usepackage{setspace}

\newindex{titleidx}{cbtitle}

\begin{document}

\begin{songs}{titleidx}

\beginsong{Amazing Grace}[
  by={John Newton},
  sr={Luke 15:4; 2 Corinthians 4:8,9; Ephesians 2:8; Revelation 14:3},
  cr={Public domain.}]

\beginverse
A\[E]mazing \[E/D#]grace! How \[A/C#]sweet the \[E/B]sound
That \[E]saved a \[E/C#]wretch like \[B7]me!
I \[E]once was \[E/D#]lost, but \[A/C#]now am \[E/B]found;
Was \[A]blind, but \[A/B]now I \[E]see.
\endverse

\beginverse\singlespacing
T'was grace that taught my heart to fear,
And grace my fears relieved;
How precious did that grace appear
The hour I first believed!
\endverse

\endsong

\end{songs}

\end{document}

编辑:该songs包提供了一个本机解决方案:\baselineadj长度控制连续歌词行基线之间的垂直距离;因此重新定义这个长度也可以完成这项工作(无需加载额外的包):

\documentclass[letterpaper]{article}
\usepackage[chorded]{songs}

\newindex{titleidx}{cbtitle}

\begin{document}

\setlength\baselineadj{-\baselineskip}

\begin{songs}{titleidx}

\beginsong{Amazing Grace}[
  by={John Newton},
  sr={Luke 15:4; 2 Corinthians 4:8,9; Ephesians 2:8; Revelation 14:3},
  cr={Public domain.}]

\beginverse
A\[E]mazing \[E/D#]grace! How \[A/C#]sweet the \[E/B]sound
That \[E]saved a \[E/C#]wretch like \[B7]me!
I \[E]once was \[E/D#]lost, but \[A/C#]now am \[E/B]found;
Was \[A]blind, but \[A/B]now I \[E]see.
\endverse

\beginverse
T'was grace that taught my heart to fear,
And grace my fears relieved;
How precious did that grace appear
The hour I first believed!
\endverse

\endsong

\end{songs}

\end{document}

答案2

songs 包提供的预期解决方案是使用 \chordsoff 和 \chordson 宏根据需要打开和关闭和弦间距,以指定哪些诗句/合唱部分是和弦的,哪些不是。使用 \chordsoff 后,行间距为单倍;使用 \chordson 后,行间距为双倍。

请注意,如果您的歌曲位于主文件中,并且该文件被加载到多种书籍类型(和弦和非和弦)中,那么您可能需要为此创建自己的条件宏,类似于以下内容:

\ifchorded
  \newcommand{\stopchords}{\chordsoff}
  \newcommand{\resumechords}{\chordson}
\else
  \newcommand{\stopchords}{}
  \newcommand{\resumechords}{}
\fi

然后,您可以使用 \stopchords 和 \resumechords 代替 \chordsoff 和 \chordson 来影响和弦书的行距,而不影响仅有歌词的书。

尽管可以全局修改 \baselineadj 以强制所有不包含和弦的行采用单倍行距(例如,通过编写类似“\baselineadj=-14pt”的内容),但这存在一个潜在的缺点,即在和弦诗句中恰好不包含和弦的行采用单倍行距。这可能会让一些音乐家在视觉上感到困惑。比较以下两个输出,第一个使用 \baselineadj 方法,第二个使用 \chordson 和 \chordsoff:

使用 \baselineadj 设置行距

使用 \chordson 设置行距

相关内容