级别列表

级别列表

基本上,我使用 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

为了解决这个问题,我不得不自己创建一个新索引,紧跟 的booktable 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[<索引显示的标题>]{<标题>}[<索引部分>]
示例代码中显示了所有内容。

相关内容