使用 \addcontentsline 创建自定义目录

使用 \addcontentsline 创建自定义目录

我正在制作自定义部分,其名称取自使用arrayjob包。我想为这些自定义部分制作一个目录,但它似乎不想\addcontentsline接受变量参数。这是我所拥有的 MWE:

\documentclass[]{article}
\usepackage{arrayjob,hyperref}

\newcounter{mysection}
\setcounter{mysection}{1}

\newcommand\mysection
{
\newpage
{\Huge \bfseries \themysection: \sectionnames(\themysection)}
\addtocounter{mysection}{1}
}

\begin{document}

\newarray\sectionnames
\readarray{sectionnames}
{
 First section &
 Second section &
 Third section &
 Four section 
}

\mysection
\mysection
\mysection

\end{document}

现在,我尝试\addcontentsline{toc}{section}{SectionNameHere}在我的新的命令中使用自动将名称(以及指向它们的链接)添加到目录中,就像这样,希望能自动制作文档内可点击的链接:

\documentclass[]{article}
\usepackage{arrayjob,hyperref}

\newcounter{mysection}
\setcounter{mysection}{1}

\newcommand\mysection
{
\newpage
{\Huge \bfseries \themysection: \sectionnames(\themysection)}
\addcontentsline{toc}{chapter}{\themysection: \sectionnames(\themysection)}
\addtocounter{mysection}{1}
}

\begin{document}

\newarray\sectionnames
\readarray{sectionnames}
{
 First section &
 Second section &
 Third section &
 Four section 
}

\mysection
\mysection
\mysection

\end{document}

但是,我收到以下错误:

\one@VEC 的参数有一个额外的}。

我使用起来\addcontentsline{toc}{chapter}{\themysection}没有任何问题。当我尝试添加数组项时,它给出了此错误。

答案1

这是一种使用即将推出的 LaTeX 3 格式\seq的“数组”样式的方法。expl3

seq 变量用 存储\skeletonreadarray,其值存储为逗号分隔的列表,稍后用 提取相关数组项\seq_item:Nn,但需要包装器\retrievearrayelement

\documentclass[]{article}
\usepackage{hyperref}

\usepackage{xparse}

\ExplSyntaxOn

\seq_new:N \g_skeleton_sectionnames_seq

\cs_new:Npn  \skeletonreadarray#1 {
  \seq_gset_from_clist:Nn \g_skeleton_sectionnames_seq {#1}
}

\cs_new:Npn \retrievearrayelement#1{%
  \seq_item:Nn \g_skeleton_sectionnames_seq {#1}
}



\ExplSyntaxOff

\newcounter{mysection}

\makeatletter
\newcommand\mysection{%
  \clearpage
  \refstepcounter{mysection}%
  {\Huge \bfseries \themysection: \retrievearrayelement{\themysection}}
  \addcontentsline{toc}{section}{\themysection:\ \retrievearrayelement{\c@mysection}}
}
\makeatother

\begin{document}
\tableofcontents

\skeletonreadarray
{
 First section,
 Second section,
 Third section,
 Four section,
 Five section
}

\mysection
\mysection
\mysection
\mysection

\mysection

\end{document}

相关内容