在简短目录中包含详细内容条目吗?

在简短目录中包含详细内容条目吗?

通过memoir文档类,我既有简短内容(仅章节和节),也有详细内容(还有小节,恰好没有编号)。

是否可以在简短内容表中包含“详细内容”条目没有在详细目录中包括条目“目录”,反之亦然?

来源:

\documentclass[12pt]{memoir}

\begin{document}

\frontmatter

{\renewcommand*{\contentsname}{Short Contents}
  \setcounter{tocdepth}{1}
  \tableofcontents
}
\renewcommand*\contentsname{Detailed Contents}
\setcounter{tocdepth}{3}
\tableofcontents 

\mainmatter

\chapter{First Chapter} 

\section{Section 1}

\subsection*{First subsection}
\addcontentsline{toc}{subsection}{First subsection}

\subsection*{Second subsection}
\addcontentsline{toc}{subsection}{Second subsection}

\section{Section 2}

\end{document}

输出的第一页:

简短而详细的目录

当然:

  • \tableofcontents*仅对详细内容使用带星号的形式,会在两个 TOCS 中产生“简短内容”条目(但不会在任何内容中产生“详细内容”条目);

  • 仅对简短内容使用带星号的形式\tableofcontents*会在两个目录中产生“详细内容”条目(但都不会产生“简短内容”);并且

  • 对两者使用带星号的形式,将导致任一目录中均不会出现任何条目。

答案1

这是一个可能的解决方案,通过使用\if@shorttoc开关并将虚拟内容写入 ToC,在加载文件\contentsline时进行评估(通常隐藏).toc\@input{\jobname.toc}\@starttoc

如果\@shorttoctrue设置了,\longcontentsstuff将显示用于详细内容的内容行,相应地它是\relax\@shorttocfalse, accordingly the opposite is done for\shortcontentsstuff` 设置的。

简化是通过\shorttableofcontents和进行的\longtableofcontents,两者都有一个可选参数,用作计数器的值。(我知道,也tocdepth有与此 tocdepth 等效的函数)memoir

为了提供hyperref支持,必须使用一些“重型”技巧。

  • memoir也许我可以稍后寻找一个基于的解决方案。
  • 当然,我对的重新定义与的版本\tableofcontents并不兼容,尤其是方式。memoir\tableofcontents*

\documentclass[12pt]{memoir}

\usepackage{hyperref}



\makeatletter

% Just in case we're not loading hyperref
\@ifpackageloaded{hyperref}{%
}{
  \providecommand{\@currentHref}{}
  \providecommand{\hyperlink}[2]{#2}
  \providecommand{\getrefnumber}[1]{}
  \providecommand{\phantomsection}{}
}


\AtBeginDocument{%
\newcommand{\shortcontentsstuff}{%
  \contentsline{chapter}{\hyperlink{\getrefnumber{toc::shorttoc::anchor}}{\shortcontentsname}}{\pageref{toc::shorttoc}}{\getrefnumber{toc::shorttoc::anchor}}
}

\newcommand{\longcontentsstuff}{%
  \contentsline{chapter}{\hyperlink{\getrefnumber{toc::longtoc::anchor}}{\longcontentsname}}{\pageref{toc::longtoc}}{\getrefnumber{toc::longtoc::anchor}}
}
}

\newif\if@shorttoc

\renewcommand{\tableofcontents}{%
  \if@twocolumn
  \@restonecoltrue\onecolumn
  \else
  \@restonecolfalse
  \fi
  \chapter*{\contentsname
   \@mkboth{%
     \MakeUppercase\contentsname}{\MakeUppercase\contentsname}}
 % Addition
 \if@shorttoc
 \protected@edef\@currentlabel{shorttoc}% Rather unimportant
 \edef\@currentlabelname{\shortcontentsname}% For \nameref
 \label{toc::shorttoc}% 
 % Now let us fix the hyperanchor for the short toc
 \edef\@currentlabelname{}%
 \protected@edef\@currentlabel{\@currentHref}\label{toc::shorttoc::anchor}
 \else
 \protected@edef\@currentlabel{longtoc}% Rather unimportant
 \edef\@currentlabelname{\longcontentsname}
 \label{toc::longtoc}%
 % Now let us fix the hyperanchor for the long toc
 \edef\@currentlabelname{}%
 \protected@edef\@currentlabel{\@currentHref}\label{toc::longtoc::anchor} 
 \fi
 % End of additions
 \@starttoc{toc}%
 \if@restonecol\twocolumn\fi
}

\newcommand{\longcontentsname}{Detailed Contents}
\newcommand{\shortcontentsname}{Short Contents}

\newcommand{\shorttableofcontents}[1][1]{%
  \begingroup
  \@shorttoctrue
  \setcounter{tocdepth}{#1}
  \let\shortcontentsstuff\relax
  \phantomsection
  \write\@auxout{\string\@writefile{toc}{\protect\longcontentsstuff}}
  \let\contentsname\shortcontentsname% Disabling the \shortcontentsstuff in toc
  \tableofcontents
  \endgroup
  \@shorttocfalse% Disable the short toc
}

\newcommand{\longtableofcontents}[1][3]{%
  \begingroup
  \setcounter{tocdepth}{#1}
  \phantomsection
  \let\longcontentsstuff\relax% Disabling the \longcontentsstuff in toc
  \write\@auxout{\string\@writefile{toc}{\protect\shortcontentsstuff}}
  \let\contentsname\longcontentsname
  \tableofcontents
  \endgroup
}
\makeatother




\begin{document}


\frontmatter


\shorttableofcontents

\longtableofcontents

\mainmatter

\chapter{First Chapter} 

\section{Section 1}

\subsection*{First subsection}
\addcontentsline{toc}{subsection}{First subsection}

\subsection*{Second subsection}
\addcontentsline{toc}{subsection}{Second subsection}


\section{Section 2}

\end{document}

简短目录 在此处输入图片描述

详细目录 在此处输入图片描述

这里未显示超链接...

相关内容