如何正确使用 \input{file.tex}?

如何正确使用 \input{file.tex}?

假设我有两个 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

从你的问题来看,filefile是完全独立的文件,旨在能够单独编译。如果是这样的话,那么你应该考虑包裹standalonebigfile。这需要在前言的早期加载,并且bigfile需要包含全部两个文件所需的包。

我建议您这样做:

mypackages.sty

虽然这不是绝对必要的,但我建议您创建一个包含mypackages.sty完成的文档所需的所有包的文件:

\usepackage{standalone}% Need standalone package
\usepackage{amsmath}%  any others that you use

该文件应为您的主文件并包含所有您的自定义内容,例如页面几何形状、边距等...

这将简化序言的维护,并确保单独编译的文件在包含在主文档中时具有相同的格式。

file1.texfile2.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}

笔记:


以下是一个文件中的完整代码。这里我使用了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。

相关内容