基本上,我使用 LaTeX 来整理乐谱。每首乐曲都是一个小节,显示在目录中。
我想要做的是给每首音乐分配一个类别,然后将这些类别组织在文档前面的“类别列表”中,就像“图表列表”一样。
我还没有找到办法做到这一点,想知道这个社区是否能提供帮助。我精通 LaTeX,但没有编写自己的命令的经验。希望有一个软件包可以帮助解决这个问题。
编辑:根据 Sean 的要求,这是我希望看到的一个例子:
级别列表
6 级
.1 C 小调前奏曲,作品 28,第 20 号........第 # 页
.2 奏鸣曲 G 大调,L 84,K 63................第 # 页
8 级
.1 安慰................................................ 第 # 页
其中“C 小调前奏曲,作品 28,第 20 号”是小节标题。最好包含小节标题(即作曲家),但这不是必需的。
我想要做的是在 \subsection{} 命令末尾添加一个 \level{x} 命令以生成此列表,其中“Level”是我想要排序的类别。
编辑2:这是显示文档结构的 MWE。我想为每个子部分添加一个排序级别以获取“级别列表”。使用 \includepdf{} 在每个子部分的末尾添加 PDF。
\documentclass[twoside]{book}
\begin{document}
\pagenumbering{roman}
\tableofcontents
\pagenumbering{arabic}
\part{Sheet Music}
\chapter{Classical}
%%%%%%%%%%%%%% Sections by composer
\section{Bach, Johann Sebastian}
\clearpage
\addcontentsline{toc}{subsection}{Prelude BWV 846}
\section{Beethoven, Ludwig van}
\clearpage
\addcontentsline{toc}{subsection}{Pathetique}
\chapter{Romantic}
\section{Debussy, Claude}
\clearpage
\addcontentsline{toc}{subsection}{Suite Bergamasque}
\section{Schumann, Robert}
\end{document}
答案1
为了解决这个问题,我不得不自己创建一个新索引,紧跟 的book
。table of contents
我们将给她起名字table of levels
,她的基本功能与她的母亲相同。book
到目前为止,这至少对班级有效:
\documentclass{book}
\makeatletter
\newcommand{\levelsname}[1]{\def\@levelsname{#1}}
\newcommand{\levelsorder}[1]{%
\let\@levels\empty
\change@order #1,\@end
}
\def\change@order#1,{%
\g@addto@macro{\@levels}{\csname @#1\endcsname}
\@ifnextchar\@end{}{\change@order}
}
\let\@end\empty
\let\@levels\empty
\newcommand\tableoflevels{%
\@levels
\if@twocolumn
\@restonecoltrue\onecolumn
\else
\@restonecolfalse
\fi
\chapter*{\@levelsname
\@mkboth{%
\MakeUppercase\@levelsname}{\MakeUppercase\@levelsname}}%
\@starttoc{lvl}%
\if@restonecol\twocolumn\fi
}
\def\check@level#1{%
\@ifnextchar[{\set@level{#1}}{}
}
\def\set@level#1[#2]{%
\expandafter\protected@edef\csname @#1@pag\endcsname{\thepage}
\@ifundefined{@#2}{%
\expandafter\gdef\csname @#2\endcsname{%
\addtocontents{lvl}{\protect\contentsline{chapter}{#2}{}}
\addtocontents{lvl}
{\protect\contentsline{section}{#1}{\csname @#1@pag\endcsname}}}
\expandafter\g@addto@macro\expandafter\@levels
\csname @#2\endcsname
}{%
\expandafter\g@addto@macro\csname @#2\endcsname{%
\addtocontents{lvl}
{\protect\contentsline{section}{#1}{\csname @#1@pag\endcsname}}}
}
}
\let\@@subsection\subsection
\def\subsection{%
\@ifnextchar[{\get@optional}{\get@subsection}
}
\def\get@optional[#1]#2{%
\@@subsection[#1]{#2}
\check@level{#1}
}
\def\get@subsection#1{%
\@@subsection{#1}
\check@level{#1}
}
\makeatother
\begin{document}
\tableofcontents
\chapter{Classical}
\section{Bach, Johann Sebastian}
\clearpage
\subsection[Prelude]{Prelude BWV 846}[Level 1]
\clearpage
\section{H\"andel, Georg Friedrich}
\clearpage
\subsection{Dettingen Te Deum}
\clearpage
\section{Beethoven, Ludwig van}
\clearpage
\subsection{Pathetique}[Level 2]
\chapter{Romantic}
\section{Debussy, Claude}
\clearpage
\subsection{Suite Bergamasque}[Level 1]
\clearpage
\section{Brahms, Johannes}
\clearpage
\subsection{Schicksalslied}
\levelsname{Levels} % Sets table's title
\levelsorder{Level 1,Level 2} % [OPTIONAL] Changes levels' order in the table
\tableoflevels % Prints the table
\end{document}
命令列表:
\levelsname{<
表的标题>}
只是给你的新索引一个标题\tableoflevels
只打印索引\levelsorder{<
包含的标题>}
设置插入级别的正确顺序(默认为出现顺序)。它们必须用逗号分隔插入,并且必须拼写准确。
要将项目和级别放入索引中,只需在子部分的标题后放置一个额外的可选参数,添加其索引部分,从而产生
\subsection[<
索引显示的标题>]{<
标题>}[<
索引部分>]
。
示例代码中显示了所有内容。