结合、etoc 和回忆录

结合、etoc 和回忆录

我正在尝试让combine班级与一起工作etoc。特别是我有一篇文章/章节,它有自己的本地目录。请参阅以下 chapter1.tex:

\documentclass{memoir}
\usepackage{etoc}
\etocsettocdepth{paragraph}
\begin{document}

\etocsettocdepth.toc{paragraph}
\chapter{A chapter}
\etocsettocstyle{\section*{\contentsname}}{}
\localtableofcontents*
\section{A section}
\subsection{A subsection}
\subsubsection{A subsubsection}
\paragraph{A paragraph}
\end{document}

该文件本身编译得很好,除了

软件包 etoc 警告:如果您希望充分利用 etoc,可以考虑使用 \etocsettocdepth.toc 作为 memoir 自己的 \settocdepth 的替代品。同样,考虑使用 \etocsettocdepth 和 \etocsetnexttocdepth,而不是 memoir 的 \maxtocdepth。在输入行 4。

如果我尝试将其加载到以下类的主文件中,combine则主目录和本地目录都会中断:

\documentclass[memoir]{combine}
\usepackage{etoc}

\begin{document}

\tableofcontents

\begin{papers}

\coltoctitle{Article number 1}
\coltocauthor{Author number 1}
\label{art1}
\import{chapter1}

\end{papers}
\end{document}

答案1

独立于etoc目前(最新的 TL2015)似乎存在与 的combine不兼容性memoir

答案的底部解决了etoc+book+combine兼容性问题;我没有尝试,etoc+memoir+combine因为我已经观察到了问题memoir+combine,我首先对其进行了描述。

结合测试书籍:好

使用组合和类对以下文件进行操作没有问题book

文件testcombine-book.tex

\documentclass[book]{combine}

\begin{document}

\tableofcontents

\begin{papers}

\coltoctitle{Article number 1}
\coltocauthor{Author number 1}

\label{art1}
\import{testcombine-book-chap1}

\coltoctitle{Article number 2}
\coltocauthor{Author number 2}

\label{art2}
\import{testcombine-book-chap2}

\end{papers}
\end{document}

文件testcombine-book-chap1.tex

\documentclass{book}

\begin{document}

\tableofcontents

\chapter{A chapter (FIRST PAPER)}

\section{A section}
\subsection{A subsection}
\subsubsection{A subsubsection}
\paragraph{A paragraph}
\end{document}

文件testcombine-book-chap2.tex

\documentclass{book}

\begin{document}

\tableofcontents

\chapter{A chapter (SECOND PAPER)}

\section{A section}
\subsection{A subsection}
\subsubsection{A subsubsection}
\paragraph{A paragraph}
\end{document}

编译过程没有任何错误并给出预期结果。

结合回忆录测试:问题

另一方面,使用memoir类的非常相似的文件会产生一个问题:

% file testcombine-memoir.tex
\documentclass[memoir]{combine}
% there is a problem with memoir+combine independently of etoc
% tested 2015-08-30, up-to-date TeXLive 2015

\begin{document}

\tableofcontents

\begin{papers}

\coltoctitle{Article number 1}
\coltocauthor{Author number 1}

\label{art1}
\import{testcombine-memoir-chap1}

\coltoctitle{Article number 2}
\coltocauthor{Author number 2}

\label{art2}
\import{testcombine-memoir-chap2}

\end{papers}
\end{document}

% file testcombine-memoir-chap1.tex
\documentclass{memoir}

\begin{document}

\tableofcontents*

\chapter{A chapter (FIRST PAPER)}

\section{A section}
\subsection{A subsection}
\subsubsection{A subsubsection}
\paragraph{A paragraph}
\end{document}

% file testcombine-memoir-chap2.tex
\documentclass{memoir}

\begin{document}

\tableofcontents*

\chapter{A chapter (SECOND PAPER)}

\section{A section}
\subsection{A subsection}
\subsubsection{A subsubsection}
\paragraph{A paragraph}
\end{document}

这些文件的编译最终会出现以下错误:

% gives 
% ERROR: LaTeX Error: Command \sf@@memsub@label already defined.

% --- TeX said ---
%                Or name \end... illegal, see p.192 of the manual.

% See the LaTeX manual or LaTeX Companion for explanation.
% Type  H <return>  for immediate help.
%  ...                                              

% l.9 \begin{document}
% referring to testcombine-memoir-chap1

导入第二篇论文时也出现类似的情况。

etoc 与 Combine 兼容性问题

话虽如此,etoc目前与类不兼容combine:我可以将使用添加etoc到上面的类文件中book

\usepackage{etoc}
% inside main file, also add this :
% make coltoctitle and coltocauthor level known to etoc
\etocsetlevel{coltoctitle}{1}
\etocsetlevel{coltocauthor}{2}

然后编译继续进行并且没有错误,但是本地目录的机制被破坏了。

etoc在本地目录文件中记录一些 ID .toc。我发现这些信息正确地出现在.aux导入的论文文件中,这些文件在每次编译主文件时都会更新。但这些信息并没有出现在.toc导入的论文文件中,这些文件不会重新生成,而在单独编译每个子论文时创建的文件中自然包含错误的本地目录 ID。

如果子.toc文件按文件原样重新生成.aux,则本地目录etoc可以发挥作用。

如果可能的话,解决这个问题需要花些力气来分析combine类代码及其与的交互etoc.toc在没有的情况下,文件可以正确地重新生成etoc

但是,处理文件打开和关闭的代码etoc并不完全容易修补,因为有些部分不是包装在宏中,而是直接添加到添加开始文档钩子中。因此解决这个问题可能还需要一个新版本的etoc

更新:恢复 etoc 与 Combine 的兼容性(书籍类)

以下是在主主文件中要采取的步骤,以实现(至少在简单情况下)etocvs的兼容性combine

定义了一个命令,每次使用该类的命令\PatchEtocOpenOut之前必须发出该命令。\importcombine

文件testcombine-etoc-book.tex

\documentclass[book]{combine}

\usepackage{etoc}
% make coltoctitle and coltocauthor level known to etoc
\etocsetlevel{coltoctitle}{1}
\etocsetlevel{coltocauthor}{2}

% class combine modifies the output streams names
% Inner macro of package etoc must be patched
% (etoc versions 1.08g and earlier)
\makeatletter
\newcommand*\PatchEtocOpenOut {%
% \PatchEtocOpenOut must be issued before
% each use of \import command (after main TOC)
  \Etoc@toctoks {}%
  \def\Etoc@openouttoc
  {%
      \if@filesw
         \immediate \openout \c@ltocfnum \jobname .toc\relax
      \fi
      \global\let\Etoc@openouttoc\empty 
  }%
}
\makeatother

\begin{document}

\tableofcontents

\begin{papers}

\coltoctitle{Article number 1}
\coltocauthor{Author number 1}
\label{art1}
\PatchEtocOpenOut % must be issued before each \import
\import{testcombine-etoc-book-chap1}

\coltoctitle{Article number 2}
\coltocauthor{Author number 2}
\label{art2}
\PatchEtocOpenOut % must be issued before each \import
\import{testcombine-etoc-book-chap2}

\end{papers}
\end{document}

文件testcombine-etoc-book-chap1.tex

\documentclass{book}
\usepackage{etoc}
\etocsettocdepth{paragraph}
\etocarticlestyle

\begin{document}

\chapter{A chapter (FIRST PAPER)}

\localtableofcontents

\section{A section}
\subsection{A subsection}
\subsubsection{A subsubsection}
\paragraph{A paragraph}
\end{document}

文件testcombine-etoc-book-chap2.tex:(第二章有一个主目录和两个本地目录;所有这三个目录都是通过使用类编译上面的主文件而按预期生成的combine。)

\documentclass{book}
\usepackage{etoc}
\etocsettocdepth{paragraph}

\begin{document}

\etocsettocstyle
  {\section*{\contentsname{} of second paper}}
  {\vspace{.5cm}\hrule}

\tableofcontents

\etocsettocstyle{\subsection*{\contentsname{} for this chapter}}{}

\chapter{First chapter (SECOND PAPER)}
\localtableofcontents

\section{A section}
\subsection{A subsection}
\subsubsection{A subsubsection}
\paragraph{A paragraph}

\chapter{Second chapter (SECOND PAPER)}
\localtableofcontents

\section{A section}
\subsection{A subsection}
\subsubsection{A subsubsection}
\paragraph{A paragraph}

\end{document}

编译testcombine-etoc-book.tex过程没有任何错误,并且产生了预期的输出,正确导入了两个子文件。

相关内容