In the same way that creating a standard table of contents makes use of levels (chapters, sections, subsections, etc.) Is there a way to create a custom function that that mimics this using tocloft? I have played around with modifications to #8 in this list of ways to customize toc to get the list of lists effect as well as this more in-depth guide on the behavior of the functions with no luck.

I am envisioning some custom function of the form:

\function{the chapter}{the section} 

Called like this in the code:




Generates a table of contents something like this when \listofWHATEVER is called:

  1. Pine

    • cone

    • wood

  2. foo

    • bar

I know there are examples of doing this using custom environments or brute-forcing it using enumerate/itemize. But I'm hoping there is some way to do it with a custom command.

I've searched around and haven't seen a solution for this, it's possible I have been using the wrong keywords or simply missed it. Examples or links to a solution would be much appreciated.

  • Welcome to TeX.SX! You can use tocloft. Please read the documentation or guides like this for that purpose and then ask a specific question.
    – TeXnician
    Mar 10, 2017 at 6:02
  • I thought it was clear enough, but I have added some clarifications. Mar 10, 2017 at 14:34
  • Well, what should happen when \function{pine}{sawmill} is called after \function{foo}{bar}?
    – user31729
    Mar 10, 2017 at 18:59
  • It should not behave any differently, the order does not matter Mar 10, 2017 at 19:08
  • @JoeKissling: Well, it should add 3. Pine and sawmill then, but not 'sorted' into the first Pine appearance?
    – user31729
    Mar 10, 2017 at 19:18

1 Answer 1


A preliminary version without hyperlinking etc. of page numbers.

The code stores the individual keywords and their values in expl3 sequences and writes the values to a .foo ToC file at the end of the document, which is then typeset with \listofwhatever.

The keywords are set with chapter like ToC - entries, the values with section like entries, tocloft is used to disable pagenumbers for the keywords in the .foo file.





  \section*{List of Whatever}


\seq_new:N \g_full_keywords_seq

  \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

  \seq_if_exist:cT {g_#1_local_keywords_seq } {
    \seq_gput_right:cx {g_#1_local_keywords_seq } {#2;;;;;\thepage}

  \seq_map_inline:Nn \g_full_keywords_seq {%
    \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}}{}{}}





\section{Foo section}




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


enter image description here

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .