假设我有两个 latex 文件file1
,并且file2
具有相同的序言等等。然后我想创建一个名为 bigfile 的文件,将这两个文件放在一起。由于某种原因,这不起作用。因此,我首先尝试仅包含 file1,这是我所做的:
\documentclass .... %% same as file1 ...
same preamble as file1
\begin{document}
\input{file1}
\end{document}
结果是我不仅得到了文件 1,还得到了序言等等。这是我第一次将文件放在一个文件中。请给我一个解决方案 :)
答案1
最好的办法可能是省略文档序言和\begin{document}
包含\end{document}
的文件,并有一个设置样式的主文件。
主文件:
\documentclass{article}
% preamble.
\begin{document}
\input{file1}
\input{file2}
\end{document}
第一个包含的文件:
\section{Blah}
% more stuff.
第二个包含的文件
\section{More stuff}
% blah blah
答案2
从你的问题来看,file
和file
是完全独立的文件,旨在能够单独编译。如果是这样的话,那么你应该考虑包裹standalone
bigfile
。这需要在前言的早期加载,并且bigfile
需要包含全部两个文件所需的包。
我建议您这样做:
mypackages.sty
:
虽然这不是绝对必要的,但我建议您创建一个包含mypackages.sty
完成的文档所需的所有包的文件:
\usepackage{standalone}% Need standalone package
\usepackage{amsmath}% any others that you use
该文件应为您的主文件并包含所有您的自定义内容,例如页面几何形状、边距等...
这将简化序言的维护,并确保单独编译的文件在包含在主文档中时具有相同的格式。
file1.tex
和file2.tex:
每个单独的文件看起来应如下所示:
\documentclass{article}
% Preamble of file <n>
\usepackage{mypackages}
\begin{document}
... File n contents here ...
\end{document}
注意,这些是完整的文件,可以自行编译。
bigfile.tex
:
\documentclass{article}
\usepackage{mypackages}
\begin{document}
\input{file1}
\input{file2}
\end{document}
笔记:
- 您还应该考虑何时应使用 \input 和 \include?
以下是一个文件中的完整代码。这里我使用了filecontents
包来包含各个文件,以生成可编译的示例。下面,我没有使用包mypackages.sty
来表明只有主文件需要包含standalone
包。
\documentclass{article}
\usepackage{standalone}
% Complete premable required by all files...
\usepackage{amsmath}
%-----------------------
\usepackage{filecontents}
\begin{filecontents*}{file1.tex}
\documentclass{article}
% Preamble of file 1
\usepackage{amsmath}
\begin{document}
... File 1 contents here ...
\end{document}
\end{filecontents*}
\begin{filecontents*}{file2.tex}
\documentclass{article}
% Preamble of file 2
\usepackage{amsmath}
\begin{document}
... File 2 contents here ...
\end{document}
\end{filecontents*}
%----------------------
\begin{document}
\input{file1}
\input{file2}
\end{document}
答案3
据我所知,你不能以这种方式做到这一点。
制作三个文件:
% in1.tex
This is my first file only Text and other stuff from
between \verb+\begin{document}+ and \verb+\end{document}+.
% in2.tex
This is my second file it contains only the body stuff
like file 1 did.
% master.tex
\documentclass{minimal}
\usepackage{...}
\begin{document}
This is the master file including all other files.
\input{in1}
\input{in2}
\end{document}
您可以添加一个名为的文件,header.tex
包括之前所有内容\begin{document}
% header.tex
\documentclass{minimal}
\usepackage{...}
把这个放进去master.tex
% master.tex
\input{header}
\begin{document}
This is the master file including all other files.
\input{in1}
\input{in2}
\end{document}
另一种适合您目的的方法是使用\include
命令将文档分成各个章节。在包含内容之前,它会发送一个\clearpage
命令。处理前一章的所有浮动内容。\includeonly{chap1}
您可以只包含一个文件,保留整个目录和\ref
来自其他章节的信息
答案4
作为对其他答案的跟进 - 我最近不得不在一份很长的科学提案中做一些类似的事情。我基本上必须整理一份所有合作者的简历清单。每个人都给我发了他们各自的简历,有些是完整的独立 tex 文档,有些只有他们各自部分的基本内容,甚至有些是 PDF 文件。
我编写了一个简单的 Python 脚本,将所有这些内容放在一个文档中,但您的情况可能会有所不同:
#!/usr/bin/env python
import sys
import re
template_file = "bs.template" # contains full document preamble
output_file = "bs.tex"
# regular expression that finds content between begin and end document statements
documentRE = re.compile(r".*\\begin{document}(.*)\\end{document}.*",re.DOTALL)
def removeLaTeXPreamble(file):
try:
fh = open(file,'r')
except IOError:
print ":removeLatexPreamble: Couldn't open file %s" % file
sys.exit()
content = fh.read()
fh.close()
searchResults = documentRE.search(content)
if searchResults is None:
# this is not a complete TeX file, so just input it
return "\input{%s}\n\\newpage\n" % file
else:
# this is a complete TeX file, so only use the section between
# the \begin{document} and \end{document}
return searchResults.group(1).strip() + "\n\\newpage\n"
def make_bios(fileList):
fileList.sort()
try:
fh = open(template_file,'r')
except IOError:
print "Could not open template file %s" % template_file
sys.exit()
output = fh.read()
fh.close()
for file in fileList:
if file.endswith(".pdf"):
# this is a PDF file, so just includepdf it
output += "\includepdf[pages=-,pagecommand=\\thispagestyle{plain}]{\
%s}\n\\newpage\n" % file
else if file.endswith(".tex"):
# this should be a .tex file, check to see if it is a full document
output += removeLaTeXPreamble(file)
else:
print "I don't understand how to process %s" % file
sys.exit()
output += r"\end{document}"
try:
outFH = open(output_file,'w')
except IOError:
print "Couldn't open file %s for writing" % output_file
sys.exit()
outFH.write(output)
outFH.close()
if __name__ == "__main__":
make_bios(sys.argv[1:])
这bs.模板文件只包含 LaTeX 前言部分\begin{document}
。您可以像这样运行此脚本python <script_name.py> <your files>
,然后繁體中文将创建文件。我知道,这可能不是最好的名字,BS:-p。