我要用“歌曲”包制作一本歌本。我已经做了一些格式化,使歌本符合我的需求。
现在我要自定义歌本的索引。在标题索引中
\newindex{titleidx}{cbtitle}
\indexsongsas{titleidx}{\thepage}
\renewcommand{\songchapter}{\chapter*}
[...]
\showindex{Title index}{titleidx}
我想在每个条目中添加歌曲的作者。
实际上它看起来像:
Lady in Black ..................... 4
Lemon Tree ........................ 6
但我希望它看起来像,例如:
Lady in Black (Uriah Heep) ........ 4
Lemon Tree (Fool's Garden) ........ 6
有人能帮我解决这个问题吗?!:) 我希望清楚,我现在无法上传图像。:(
非常感谢!并致以最良好的祝愿!
// 编辑:完整示例(使用最新的歌曲包)。
\documentclass[11pt,a4paper,twoside,ngerman]{book}
\usepackage[bookmarks]{hyperref}
\usepackage[chorded]{songs}
\usepackage[utf8x]{inputenc}
\usepackage{textcomp}
\usepackage{geometry}
\usepackage{lastpage}
\usepackage{lmodern}
\renewcommand{\familydefault}{\sfdefault}
\geometry{a4paper, top=15mm, left=20mm, right=20mm, bottom=22.5mm, headsep=2.5mm, footskip=5mm}
\setlength{\headheight}{10mm}
\renewcommand{\lyricfont}{\sffamily}
\renewcommand{\chorusfont}{\sffamily}
\songcolumns{1}
\songpos{0}
\newindex{titleidx}{cbtitle}
\indexsongsas{titleidx}{\thepage}
\renewcommand{\idxtitlefont}{\sffamily\normalfont}
\begin{document}
\showindex{Title index}{titleidx}
\begin{songs}{titleidx}
\beginsong{Lady In Black}[by={Uriah\ Heep}]
\beginverse*
{\nolyrics Intro: \[Em Em]}
\endverse
\beginverse
\memorize
She \[Em]came to me one morning, one \[Em]lonely Sunday morning
Her \[D]long hair flowing in the \[Em]mid-winter wind
I \[Em]know not how she found me, for in \[Em]darkness I was walking
And de\[D]struction lay around me, from a \[Em]fight I could not win
\[Em]Ahh Ahh Ahh \[D]Ahh \[Em]Ahh ... \[Em]Ahh \[D]Ahh \[Em]Ahh \[Em] \[Em] \[Em]
\endverse
\beginverse*
...
\endverse
\endsong
\beginsong{Lemon Tree}[by={Fool's\ Garden}]
\beginverse*
\nolyrics{Intro: \[Em] ~ \[Bm] ~ \[Em] ~ \[Bm] ~ \[Am] ~ \[Bm] ~ \[Em]}
\endverse
\beginverse
I'm \[Em]sitting here in the \[Bm]boring room
It's \[Em]just another rainy Sunday \[Bm]afternoon
I'm \[Em]wasting my time, I got \[Bm]nothing to do
I'm \[Em]hanging around, I'm \[Bm]waiting for you
But \[Am]nothing ever happens \[Bm] and I \[Em]wonder
\endverse
\beginverse*
...
\endverse
\endsong
\end{songs}
\end{document}
// 编辑 2:哦,还有另一个问题,也许很容易解决:我想更改“标题索引”的(1 列)宽度。实际上它不够宽,一些条目在行末被打破了。有什么想法吗?! :)
答案1
以下是我的谦卑尝试。:)
这里的想法是修补.sdx
文件中负责索引标题歌曲的行。步骤如下:
- 添加当前歌曲的标题,在 中定义
\songtitle
。 - 通过发出条件来检查当前歌曲是否有作者
\songauthors
。 - 如果没有作者(
\ifx\songauthors\empty
),则不执行任何操作。 - 如果我们有作者(
\else
分支),请将其排版在括号内。
与其重新定义整个宏,不如使用这个神奇的xpatch
包来简化我们的生活。我们将使用\xpatchcmd
on \SB@@@beginsong
,其中包含我们需要更改的行。
补丁:
\xpatchcmd{\SB@@@beginsong}
{\SB@addtoindexes\songtitle}
{\SB@addtoindexes{\songtitle\ifx\songauthors\empty\else\ (\songauthors)\fi}}
{}{}
完整示例(为了让示例更简洁,我擅自删除了一些原始软件包,希望您不介意):
\documentclass{book}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[chorded]{songs}
\usepackage{xpatch}
\makeatletter
\xpatchcmd{\SB@@@beginsong}
{\SB@addtoindexes\songtitle}
{\SB@addtoindexes{\songtitle\ifx\songauthors\empty\else\ (\songauthors)\fi}}
{}{}
\makeatother
\newindex{titleidx}{cbtitle}
\indexsongsas{titleidx}{\thepage}
\begin{document}
\showindex{Title index}{titleidx}
\begin{songs}{titleidx}
\beginsong{Lady In Black}[by={Uriah\ Heep}]
\beginverse*
...
\endverse
\endsong
\beginsong{Lemon Tree}[by={Fool's\ Garden}]
\beginverse*
...
\endverse
\endsong
\beginsong{Orange Tree}
\beginverse
...
\endverse
\endsong
\end{songs}
\end{document}
如果我们看一下索引,我们将会发现:
希望能帮助到你。:)
更新:正如您自己所想的那样,\showindex
有一个可选参数,用于指定列数。根据包源,\showindex
定义为
\newcommand\showindex[3][0]{%
因此默认列数实际上是0
。提供1
给宏的可选参数即可完成此工作。
¹ 正如 egreg 在聊天室,使用这个词非常危险谦逊的当 Uriah Heep 参与其中时。:)
这是对查尔斯·狄更斯著名小说的引用大卫·库珀菲尔德,其中 Uriah Heep 总是宣称他(虚假的)谦逊。:)
当然,在这个答案的背景下,我们有其他Uriah Heep 是一支英国摇滚乐队;奇怪的是,他们有一张专辑名为很重,很笨重这是他们的首秀。:)
现在回到我们的正常日程。:P