我正在尝试让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 的兼容性(书籍类)
以下是在主主文件中要采取的步骤,以实现(至少在简单情况下)etoc
vs的兼容性combine
。
定义了一个命令,每次使用该类的命令\PatchEtocOpenOut
之前必须发出该命令。\import
combine
文件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
过程没有任何错误,并且产生了预期的输出,正确导入了两个子文件。