如何使用 etoc 包创建本地目录?

如何使用 etoc 包创建本地目录?

我需要编写一个非常大的文档,并且我想使用 etoc 来创建本地目录。(minitoc 与我的文档不兼容;)

我如何创建表格和图形的本地列表?

为什么 nameref 在这个 mwe 中引用错误?

当我使用未编号的部分(\part*{Appendix})时,命令 \localtableofcontents 显示一个空表,而前面的目录列出了附录内容,我该如何纠正?

\documentclass[]{report}
\usepackage{lipsum}
\usepackage{etoc}
\usepackage{titlesec}
\usepackage{nameref}

\titleclass{\part}{top} % make part like a chapter
\titleformat{\part}
[display]
{\centering\normalfont\Huge\bfseries}
{\titlerule[2pt]\vspace{3pt}\titlerule[1pt]\vspace{3pt}\MakeUppercase{\partname} \thepart}
{0pt}
{\titlerule[1pt]\vspace{1pc}\huge\MakeUppercase}
%
\titlespacing*{\part}{0pt}{0pt}{20pt}

\begin{document}
\listoffigures\newpage
\listoftables\newpage
\tableofcontents\newpage


\etocmulticolstyle{\noindent\bfseries\footnotesize
\leaders\hrule height1pt\hfill
\MakeUppercase{Contents}}
\etocsettocdepth{1}

\part{FIRST PART}\label{part:one}
%how to make a localtableofcontents of figures and tables?
\localtableofcontents
\chapter{INTRODUCTION} \lipsum{1}
\chapter{METHODOLOGY} \lipsum{1}
\chapter{CONCLUSION} \lipsum{1}


\part{SECOND PART}
%how to make a localtableofcontents of figures and tables?
\localtableofcontents
\chapter{INTRODUCTION} 
Like in \nameref{part:one}.% why nameref gets the wrong reference? 
\lipsum{1}

\chapter{METHODOLOGY} \lipsum{1}
\chapter{CONCLUSION} \lipsum{1}

\appendix
\part{APPENDIX}
%how to make a localtableofcontents of appendix
\localtableofcontents
\chapter{document a}
\chapter{document B}
\end{document}

感谢你 : )

答案1

(*更新:etoc 1.07k融入了兼容性tocloft;参见答案底部*)

埃托克本文撰写时的包并未挂接图表列表或表格列表,而仅处理目录。

对于未编号的附录部分,addcontentsline应使用通常的

\part*{APPENDIX}
\addcontentsline {toc}{part}{APPENDIX}

请注意,如果没有它,即使没有它的主要内容\tableofcontents也会etoc看起来很奇怪,因为附录的章节会出现在前面章节的延续中(尽管带有 Alpha 编号)。

然而,也可以获取部分中的本地目录APPENDIX,而无需APPENDIX在主目录中有条目。

在主目录命令中:

\etocsetlevel{appendixplaceholder}{6}
\tableofcontents
\etocsetlevel{appendixplaceholder}{-1}

和:

\part*{APPENDIX}
\etoctoccontentsline*{appendixplaceholder}{APPENDIX}{-1}
% the above works with or without hyperref. If the document does not use
% hyperref, then
% \addcontentsline{toc}{appendixplaceholder}{APPENDIX}
% is an alternative
\localtableofcontents

有了这个:

  1. 本地目录按需要创建
  2. 主目录中没有附录条目
  3. pdf 输出中有一个正确的 APPENDIX 书签。

但是,由于和的命令之间存在一些交互,因此 3.您的设置并不适用。那里有些功能失调,我没有进一步调查。mwe\titleclass\titleformattitlesechyperref

而对于nameref没有得到正确的引用,这与无关etoc,正如人们通过不加载它和注释掉所有相关部分所看到的那样。

这是一个titlesec休斯回答


etoc-tocloft兼容性:

tocloft 评论中提到了该软件包。尽管etoc手册总是说在兼容模式下可以使用tocloft来自定义目录行etoc,但它忘了说用户必须执行来 抵消\let\tableofcontents\etoctableofcontents的覆盖。tocloft\tableofcontents\begin{document}

无论如何,1.07k发布埃托克透明地提供与 的兼容性tocloft,后者应先加载etoc(否则会发出警告,因为tocloft将被强制进入其“ titles”模式)。然后,在兼容模式下,tocloft会忠实地遵循目录行和目录标题的自定义etoc。用户仍可从 的其他方面受益,etoc例如其\localtableofcontents(也遵循tocloft文档该点当前的自定义)和其\label+\ref机制。并且可以将 用作tocloft一个目录和etoc另一个目录。此外,自然地,完全不会影响和 的tocloft处理。list of figureslist of tablesetoc

答案2

这是一个使用的解决方案titletoc包。重要的部分是:

% local tableofcontents
\section*{Local toc}
\startcontents[mytoc]
\printcontents[mytoc]{}{0}{}

% local listoffigures
\section*{Local lof}
\startlist[mylof]{lof}
\printlist[mylof]{lof}{0}{}

% local listoftables
\section*{Local lot}
\startlist[mylot]{lot}
\printlist[mylot]{lot}{0}{}

... <part content goes here>
... <part content goes here>
... <part content goes here>

% stop local toc, lof, lot
\stopcontents[mytoc]
\stoplist[mylof]{lof}
\stoplist[mylot]{lot}

这将创建部分tocloflot

这是一个完整的 MWE,它演示了这个想法 - 你需要运行它两次,或者用arara这将为您编译两次。

% arara: pdflatex
% arara: pdflatex
\documentclass{report}
\usepackage{lipsum}
\usepackage{titlesec}
\usepackage{titletoc}
\usepackage{hyperref}

\titleclass{\part}{top} % make part like a chapter
\titleformat{\part}
[display]
{\centering\normalfont\Huge\bfseries}
{\titlerule[2pt]\vspace{3pt}\titlerule[1pt]\vspace{3pt}\MakeUppercase{\partname} \thepart}
{0pt}
{\titlerule[1pt]\vspace{1pc}\huge\MakeUppercase}
%
\titlespacing*{\part}{0pt}{0pt}{20pt}

\makeatletter
\let\titlesec@part\part
\renewcommand{\part}{\@ifstar\part@star\part@nostar}
\def\part@star#1{\NR@gettitle{#1}\titlesec@part*{#1}}
\def\part@nostar{\@ifnextchar[\part@nostar@opt\part@nostar@nopt}
\def\part@nostar@nopt#1{\NR@gettitle{#1}\titlesec@part{#1}}
\def\part@nostar@opt[#1]#2{\NR@gettitle{#2}\titlesec@part[#1]{#2}}
\makeatother


\begin{document}
\listoffigures
\listoftables
\tableofcontents



\part{FIRST PART}\label{part:one}
% local tableofcontents
% local tableofcontents
% local tableofcontents
\section*{Local toc}
\startcontents[mytoc]
\printcontents[mytoc]{}{0}{}

% local listoffigures
% local listoffigures
% local listoffigures
\section*{Local lof}
\startlist[mylof]{lof}
\printlist[mylof]{lof}{0}{}

% local listoftables
% local listoftables
% local listoftables
\section*{Local lot}
\startlist[mylot]{lot}
\printlist[mylot]{lot}{0}{}
\chapter{INTRODUCTION} \lipsum{1}
\chapter{METHODOLOGY} \lipsum{1}
\chapter{CONCLUSION} \lipsum{1}
\newcount\tmp
\tmp=0
\loop
\advance\tmp by 1
\begin{table}[!htb]\caption{table in part I}\end{table}
\begin{figure}[!htb]\caption{figure in part I}\end{figure}
\ifnum\tmp<5 \repeat

% stop local toc, lof, lot
\stopcontents[mytoc]
\stoplist[mylof]{lof}
\stoplist[mylot]{lot}

\part{SECOND PART}
% local tableofcontents
% local tableofcontents
% local tableofcontents
\section*{Local toc}
\startcontents[mytoc]
\printcontents[mytoc]{}{0}{}

% local listoffigures
% local listoffigures
% local listoffigures
\section*{Local lof}
\startlist[mylof]{lof}
\printlist[mylof]{lof}{0}{}

% local listoftables
% local listoftables
% local listoftables
\section*{Local lot}
\startlist[mylot]{lot}
\printlist[mylot]{lot}{0}{}
\chapter{INTRODUCTION} 
Like in \nameref{part:one}.% why nameref gets the wrong reference? 
\lipsum{1}

\chapter{METHODOLOGY} \lipsum{1}
\chapter{CONCLUSION} \lipsum{1}
\tmp=0
\loop
\advance\tmp by 1
\begin{table}[!htb]\caption{table in part II}\end{table}
\begin{figure}[!htb]\caption{figure in part II}\end{figure}
\ifnum\tmp<5 \repeat

% stop local toc, lof, lot
\stopcontents[mytoc]
\stoplist[mylof]{lof}
\stoplist[mylot]{lot}

\appendix
\part{APPENDIX}
% local tableofcontents
% local tableofcontents
% local tableofcontents
\section*{Local toc}
\startcontents[mytoc]
\printcontents[mytoc]{}{0}{}

% local listoffigures
% local listoffigures
% local listoffigures
\section*{Local lof}
\startlist[mylof]{lof}
\printlist[mylof]{lof}{0}{}

% local listoftables
% local listoftables
% local listoftables
\section*{Local lot}
\startlist[mylot]{lot}
\printlist[mylot]{lot}{0}{}

\chapter{document a}
\chapter{document B}
\tmp=0
\loop
\advance\tmp by 1
\begin{table}[!htb]\caption{Table}\end{table}
\begin{figure}[!htb]\caption{Figure}\end{figure}
\ifnum\tmp<5 \repeat

% stop local toc, lof, lot
\stopcontents[mytoc]
\stoplist[mylof]{lof}
\stoplist[mylot]{lot}
\end{document}

我还粘贴了一些代码使用 titlesec 的部分标签存在问题修复nameref\part

相关内容