与创建标准目录使用级别(章节、部分、小节等)的方式相同,是否有办法创建一个自定义函数来模拟使用 tocloft 的这种功能?我已经尝试修改了第 8 条这自定义 toc 的方法列表,以获得列表效果以及这对没有运气的功能行为进行更深入的指导。
我正在设想一些以下形式的自定义函数:
\function{the chapter}{the section}
在代码中这样调用:
\function{pine}{cone}
\function{pine}{wood}
\function{foo}{bar}
当调用 \listofWHATEVER 时生成类似这样的目录:
松树
锥体
木头
富
- 酒吧
我知道有使用自定义环境或使用 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}