我正在尝试收集一组独立的文档,每个文档都有自己的序言和
begin{document}
行文,将它们整理\end{document}
成一本书。我查看了软件包subfiles
并尝试过\include
,但所有这些都要求我将一个共同的序言整理成一个文件main.tex
,然后\include
分别整理每个文件。这样做的问题是,我失去了独立编译每个单独的章节,因为每个章节的序言都必须在合并到时删除main.tex
。因此,如果我以后想单独编译每个章节,我必须替换序言,然后编译。我想避免手动执行此操作,因为有很多章节。
另一个问题是,每个单独的章节都有标签,例如fig:figure1
。单独编写每个章节时不会产生歧义,但是将它们合并成一本书时,它们就会变得含糊不清。
有办法解决这些问题吗?
答案1
首先,我认为合并相似的前言是一种好的做法。例如,如果子文件在其前言中为特殊符号定义了宏,那么将所有此类定义外包到例如中是一个好主意,mysybols.sty
然后所有子文件都可以加载它,并轻松合并到主前言中。
除此之外,您可能正在寻找standalone
包。此包可以执行子文件的前言,请参阅下面的示例。但请注意,子前言中的冲突定义或包选项无法解决。这留下了多重定义标签的问题。我建议一种通过在前面添加章节号来使这些标签唯一的方法。为此,\label
和的定义\ref
被更改。如果您使用其他不属于和来自包的交叉引用宏,\label
则必须以相同的方式处理它们。请注意,和的重新定义在这里之后,即使在更改它们之后,这些重新定义仍然有效。\ref
\cref
cleveref
\label
\ref
\begin{document}
hyperref
这里有两个小的子文件,都定义了一个宏,并且都使用了标签fig:1
。
subfile1.tex
是
\documentclass{article}
\usepackage[colorlinks]{hyperref}
\newcommand{\foo}{first subfile}
\begin{document}
\section{First section of \foo}
\begin{figure}
\caption{A figure of \foo}\label{fig:1}
\end{figure}
See Figure~\ref{fig:1}.
\end{document}
subfile2.tex
是
\documentclass{article}
\usepackage[colorlinks]{hyperref}
\newcommand{\baz}{second subfile}
\begin{document}
\section{First section of \baz}
\begin{figure}
\caption{A figure of \baz}\label{fig:1}
\end{figure}
See Figure~\ref{fig:1}.
\end{document}
现在是主要文件:
\documentclass{report}
\usepackage[colorlinks]{hyperref}
\usepackage[subpreambles=true]{standalone}
\begin{document}
\let\oldlabel\label
\renewcommand{\label}[1]{\oldlabel{\thechapter:#1}}
\let\oldref\ref
\renewcommand{\ref}[1]{\oldref{\thechapter:#1}}
\tableofcontents
\chapter{First chapter including first subfile}
\input{subfile1}
\chapter{Second chapter including second subfile}
\input{subfile2}
\end{document}
如果子序言有冲突,而您又不想整理,最好的选择可能是使用软件包合并 pdf 文件pdfpages
,或者甚至使用 之类的工具将 pdf 文件粘贴在一起pdfjoin
。但请注意,pdfpages
您将丢失子 pdf 中的所有超链接。