将 LaTeX 文档的部分内容包含到另一个文档中,而无需拆分原始文档

将 LaTeX 文档的部分内容包含到另一个文档中,而无需拆分原始文档

我正在和一些同事一起写一篇论文。同时,我也在为下个月的答辩准备论文。

我需要将论文纳入论文中,但它不会变成一个章节。部分内容放在一个章节中,部分内容放在另一个章节中。部分内容太多,无法将它们分别放在自己的文件中;至少有 5 或 6 个,所以我认为我的合作者会不高兴。目前,每个论文章节都是一个单独的文件(甚至是单独的目录)。

因此,我真正想要的是将论文(有时甚至是单个段落)拆分成我的论文,同时能够合并我和同事对基础论文所做的更改。这种合并应该很容易,或者最好在我请求时自动完成。(论文和学位论文都在 subversion 中。)

我有什么方法可以相当轻松地完成此操作吗?comment 包中的\includecomment和能帮助我吗?我读过一些关于 extract 包的内容,听起来很有用,只是它旨在通过提取来生成自由链文档,而我想提取 LaTeX 块以包含在内。有人知道这个包的效果如何,以及它是否能帮助我?我能否以某种方式对论文中的序言进行条件化,以便在输入提取的 tex 文件时将其全部注释掉?即,在我执行之前使用 #ifndef EXTRACT 和 #define EXTRACT ?\excludecomment\input\input

(此外,我认为我可以将任何新包直接放在目录中,以便我的合作者可以自动获取它。)

我使用 TeX 已有多年,但实际上并不是专家,我真的需要写好我的论文,这样我才能答辩。到目前为止,我刚刚分叉了这篇论文,并希望进行 subversion 合并,但这还不够——subversion 无法跟踪我重新定位的段落,因为它没有重新定位文本块的概念。

答案1

您可能可以使用类似这样的方法破解它(我不确定它是否会起作用)。您可能必须将 TeX 文件拆分为论文的包装器和论文的正文。在论文的包装器中,包含包comment,然后设置

\usepackage{comment}
\includecomment{bodyOfText}
\includecomment{paraA}
\includecomment{paraB}
% One for each separate unit you want to split up.

\newenvironment\commented[1]{\end{bodyOfText}\begin{#1}}%
  {\end{#1}\begin{bodyOfText}}

\begin{document}
\begin{bodyOfText}
\input{body}
\end{bodyOfText}
\end{document}

body.tex保存文本正文的位置,要提取的每个部分都应该用

\begin{commented}{paraA}
%text here
\end{commented}{paraA}

在你的论文中,你可以这样做

\usepackage{comment}
\excludecomment{bodyOfText}
\excludecomment{paraA}
% again, one for each extraction.
\newcommand\extracttext[1]{\includecomment{#1}\begin{bodyOfText}%
  \input{body}\end{bodyOfText}\excludecomment{#1}}

\begin{document}
%some other text

\extracttext{paraA}

%some other text

\extracttext{paraB}
\end{document}

答案2

很难想出一个能满足所有人需求的解决方案。你可能需要查看以下软件包纽特包括x子文档。但完全有可能他们中没有一个能满足你的要求。

我个人的做法与 Willie 的建议非常相似。(如果这有点多余,请见谅。大部分内容都是在 Willie 出现之前写的。)但请注意,您几乎可以完成所有这些操作,甚至不需要注释包。

创建不同的“包装器”文档,其中包含不同的前言和一堆命令定义,每个版本都不同,后面只跟 \input{...} 和 \include{...} 命令,调用使用这些命令的“核心”文档,但根据不同的定义对它们进行不同的解释。例如,在一个文档中,您有:

 \documentclass[12pt]{article}
 \newcommand{\articleversiononly}[1]{#1}
 \newcommand{\thesisversiononly}[1]{}
 \begin{document}
 \input{body.tex}
 \end{document}

在另一个情况下,则相反:

 \documentclass[10pt]{thesis}
 \newcommand{\articleversiononly}[1]{}
 \newcommand{\thesisversiononly}[1]{#1}
 \begin{document}
 \input{body.tex}
 \end{document}

以及body.tex诸如

 \articleversiononly{%

 Some stuff that only goes here in the article version.

 }

当然,如果这样更简单,您可以包含多个文件,尤其是,例如,某些文件在一个版本中放在一个地方,而在另一个版本中放在另一个地方。然后,您可以将其放在\articleversiononly{\input{movingpiece.tex}}body.tex 中的一个地方,但\thesisversiononly{\input{movingpiece.tex}}在另一个地方,依此类推。编译主版本将为您提供所需的内容。

对我来说这一直就够了,但我不知道我的需求是否和你的一样。如果我需要更多,我会创建一个“主版本”,然后编写一个脚本,使用 sed 创建子版本,也许使用注释中的提示,或者类似的东西。

答案3

摘自 Will Robertson 对这个问题, 这捕捉标签之间的文件包看起来是一个不错的选择。

答案4

pdfpages 包可以帮你省去很多麻烦。

在你的序言中: \usepackage{pdfpages}

在您的正文中,您想要包含以下页面:

\includepdf[pages=5-23]{foo.pdf}

相关内容