% 
% Licensed to the Apache Software Foundation (ASF) under one
% or more contributor license agreements.  See the NOTICE file
% distributed with this work for additional information
% regarding copyright ownership.  The ASF licenses this file
% to you under the Apache License, Version 2.0 (the
% "License"); you may not use this file except in compliance
% with the License.  You may obtain a copy of the License at
% 
%   http://www.apache.org/licenses/LICENSE-2.0
% 
% Unless required by applicable law or agreed to in writing,
% software distributed under the License is distributed on an
% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
% KIND, either express or implied.  See the License for the
% specific language governing permissions and limitations
% under the License.
% 
\documentclass[oneside]{book}

% space between paragraphs
\usepackage{parskip}

% import graphics
%\usepackage[pdftex]{graphicx}
\usepackage{graphicx}

% Better control of figure placement
\usepackage{float}

% hyperlinks
\usepackage[colorlinks,linkcolor=blue]{hyperref}

% Conditionally execute based on PDF or HTML output
\usepackage{ifpdf}

% Margins
\usepackage[top=1in, bottom=.75in, left=.75in, right=.75in ]{geometry}

\usepackage{xcolor}

\usepackage{caption} 
\captionsetup[table]{skip=18pt}

%list margins
\usepackage{enumitem}

% better control over date formatting
\usepackage{datetime}

\title{\Huge \textbf{Distributed UIMA Cluster Computing}}
\author{Written and maintained by the Apache\\
UIMA\texttrademark Development Community \\
\\
\\
\\
Version 2.0.0}

\date{}

\begin{document}

\frontmatter
\maketitle

\input{legal.tex}

%% \setcounter{tocdepth}{4}
% Call it Table Of Contents, same as other UIMA books do
\renewcommand\contentsname{Table of Contents}
\tableofcontents
\listoffigures
% \listoftables

\mainmatter

\input{common.tex}

\part{DUCC Concepts}
\input{part1/overview.tex}
\input{part1/terminology.tex}

\part{Ducc Users Guide}
\input{part2/ducc-uguide.tex}

\part{Programming Model And Applications}
\input{part3/ducc-applications.tex}

\part{Ducc Administrators Guide}
\input{part4/ducc-aguide.tex}

% Temporarily pulled because it's incomplete.  To be brought back later.
% \part{Ducc Principles of Operation}
% \input{part5/ducc-pops.tex}

\end{document}
