如何使用 tocloft 创建包含级别的目录?

如何使用 tocloft 创建包含级别的目录?

与创建标准目录使用级别(章节、部分、小节等)的方式相同,是否有办法创建一个自定义函数来模拟使用 tocloft 的这种功能?我已经尝试修改了第 8 条自定义 toc 的方法列表,以获得列表效果以及对没有运气的功能行为进行更深入的指导。

我正在设想一些以下形式的自定义函数:

\function{the chapter}{the section} 

在代码中这样调用:

\function{pine}{cone}

\function{pine}{wood}

\function{foo}{bar}

当调用 \listofWHATEVER 时生成类似这样的目录:

  1. 松树

    • 锥体

    • 木头

    • 酒吧

我知道有使用自定义环境或使用 enumerate/itemize 强制执行的示例。但我希望有某种方法可以使用自定义命令来做到这一点。

我搜索了好久,还是没找到解决方案,可能是我用错了关键词,或者根本没找到。如果能提供解决方案的示例或链接就更好了。

答案1

初稿未hyperlinking包含页码等。

代码将各个关键字及其值按expl3顺序存储,并将值写入.foo文档末尾的 ToC 文件,然后用 进行排版\listofwhatever

关键字设置chapter类似目录-条目,值设置section类似条目,tocloft用于禁用文件keywords中的页码.foo

\documentclass{book}

\usepackage{xparse}

\newcounter{keyword}
\newcounter{keywordvalue}



\usepackage{tocloft}


\makeatletter
\newcommand{\listofwhatever}{%
  \begingroup
  \clearpage
  \section*{List of Whatever}
  \@starttoc{foo}
  \endgroup
}
\makeatother

\ExplSyntaxOn

\seq_new:N \g_full_keywords_seq

\NewDocumentCommand{\addkeyword}{m}{%
  \seq_if_in:NnF \g_full_keywords_seq {#1} {%
    \seq_new:c {g_#1_local_keywords_seq }
    \seq_new:c {g_#1_local_pagenumber_seq }
  }
  \seq_gput_right:Nn \g_full_keywords_seq {#1}
  \seq_gremove_duplicates:N \g_full_keywords_seq
}

\NewDocumentCommand{\function}{m+m}{%
  \addkeyword{#1}%
  \seq_if_exist:cT {g_#1_local_keywords_seq } {
    \seq_gput_right:cx {g_#1_local_keywords_seq } {#2;;;;;\thepage}
  }
}

\NewDocumentCommand{\generatelistof}{}{%
  \addtocontents{foo}{\protect\renewcommand{\protect\cftsecdotsep}{\cftnodots}}%
  \addtocontents{foo}{\protect\cftpagenumbersoff{chapter}}
  \seq_map_inline:Nn \g_full_keywords_seq {%
    \refstepcounter{keyword}%
    \addcontentsline{foo}{chapter}{\protect\numberline{\thekeyword}##1}%
    \seq_map_inline:cn {g_##1_local_keywords_seq} {%
      \seq_set_split:Nnn \l_tmpa_seq {;;;;;} {####1}
      % Use this without hyperref
      \addtocontents{foo}{\protect\contentsline{section}{\textbullet\protect\quad \seq_item:Nn \l_tmpa_seq {1}}{\seq_item:Nn \l_tmpa_seq {2}}}
      % Use this with hyperref
      %\addtocontents{foo}{\protect\contentsline{section}{\textbullet\protect\quad \seq_item:Nn \l_tmpa_seq {1}}{\seq_item:Nn \l_tmpa_seq {2}}{}{}}
    }
  }
}



\ExplSyntaxOff

\usepackage{blindtext}



\AtEndDocument{%
  \generatelistof
}



\begin{document}
\listofwhatever
\tableofcontents

\chapter{Foo}
\section{Foo section}

\function{pine}{cone}
\function{pine}{wood}

\blindtext[10]
\function{foo}{bar}

\function{pine}{sawmill}

\function{foo}{Hello Darkness my old friend}



\end{document}

在此处输入图片描述

相关内容