我正在写一本歌曲书,想要一个艺术家目录/索引,即从艺术家到歌曲书中出现该艺术家歌曲的页面的映射。
这是我想要实现的一个最小工作示例:
\documentclass[12pt]{article}
\begin{document}
\tableofcontents
\newpage
% this is what I want to automatically generate
Artist Directory
AC/DC 3,4,6
Deep Purple 5,6,7
\newpage
\section{Back in Black - AC/DC}
\label{AC/DC}
Test
\newpage
\section{Highway to Hell - AC/DC}
\label{AC/DC}
Test
\newpage
\section{Highway Star - Deep Purple}
\label{Deep Purple}
Test
\newpage
\section{Perfect Stranger - Deep Purple}
\label{Deep Purple}
Test
\newpage
\section{Smoke On the Water - Deep Purple}
\label{Deep Purple}
Test
\newpage
\section{The Honey Roll - AC/DC}
\label{AC/DC}
Test
\newpage
\end{document}
显然使用标签并不是解决问题的办法,因为标签必须是唯一的。
答案1
已经有排版歌曲的软件包,但是这里有一个使用词汇表获取信息的简便方法:
\newglossaryentry{bandnameabbrev}{type=rockgroups,name={Real Bandname},description={optionally empty}}*
将在词汇表中定义一个带区,\gls*{ac/dc}
将使用Real Bandname
并留下该带区已在词汇表页面上使用的信息。
\documentclass[12pt]{article}
\usepackage[nomain,nopostdot]{glossaries}
\newglossary{rockgroups}{rki}{rko}{Artist Directory}
\makeglossaries
\newglossaryentry{ac/dc}{
type=rockgroups,
name={AC/DC},
description={}}
\newglossaryentry{deeppurple}{
type=rockgroups,
name={Deep Purple},
description={}
}
\newcommand{\songtext}[3]{\
\section{#1 - \gls*{#2}}%
#3%
\clearpage
}
\usepackage{blindtext}
\begin{document}
\tableofcontents
\printglossaries
\clearpage
\songtext{Back in Black}{ac/dc}{\blindtext}
\songtext{Highway to Hell}{ac/dc}{\blindtext[2]}
\songtext{Highway Star}{deeppurple}{\blindtext[2]}
\songtext{Perfect Stranger}{deeppurple}{\blindtext[2]}
\songtext{Smoke on the Water}{deeppurple}{\blindtext[2]}
\songtext{The Honey Roll}{ac/dc}{\blindtext}
\end{document}