This isn't everything you're looking for, but it's a start, and hopefully will give you an idea of how easily document class customization can start out. Mind you, I'm not going to worry much about emulating bad habits from the Word document, but focus on simple semantic content and formatting.
Let's start with some minimal content from your PDF:
\documentclass[12pt]{article}
\title{Personal Protective Clothing Level}
\date{7/24/08}
\author{Harper}
\begin{document}
\maketitle
\section{Procedures}
\subsection{Structure Fires}
\begin{enumerate}
\item All firefighters operating in the ``hot zone'' of a structure fire will be in
full turnouts to include coat, pants, helmet, hood, gloves and boots. When operating
in an IDLH atmosphere an SCBA shall be worn.
\item Engineers when operating close to the incident and exposed to products of
combustion shall also be in full PPE including SCBA. If outside the ``hot zone''
engineers will be allowed to modify their PPE accordingly. If the Engineer is
considered to be a part of the RIT team, then full PPE including an SCBA shall be
worn.
\end{enumerate}
\end{document}
Using the standard article class as given, you get page content that looks like
After writing a (relatively) simple document class based off article, the same content (with \documentclass[12pt]{sop}
and \approved{Chief Harper}
instead of \documentclass[12pt]{article}
, you get page content that looks like
and
The file sop.cls that created this layout is:
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{sop}[2011/07/08 v0.2 Modified article class for standard operating procedures]
% https://stackoverflow.com/questions/581916/how-do-you-extend-article-document-class-in-latex
% Passes and class options to the underlying article class
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
\ProcessOptions
\LoadClass{article}
% Redefine the page margins
\RequirePackage[left=1in,right=1in,top=1in,bottom=1in]{geometry}
% Modifications to the section titles
\RequirePackage{titlesec}
\renewcommand{\thesection}{\Roman{section}}
\titleformat{\section}{\normalfont\bfseries}
{\makebox[3em][l]{\thesection{}.}}{0pt}{}
\titleformat{\subsection}{\normalfont\bfseries}
{}{0pt}{}
% Modification of title block
\RequirePackage{titling}
\RequirePackage{multirow}
\newcommand{\approved}[1]{\newcommand{\theapproved}{#1}}
% Ref: http://tex.stackexchange.com/questions/3988/titlesec-versus-titling-mangling-thetitle
\let\oldtitle\title
\renewcommand{\title}[1]{\oldtitle{#1}\newcommand{\mythetitle}{#1}}
\renewcommand{\maketitle}{%
\begin{tabular}{|c|p{2in}|l|l|} \hline
\multirow{3}{*}{logo} & \multicolumn{1}{p{2.5in}|}{\centering Mammoth Lakes Fire Protection District } & Date: \thedate & Number: \\ \cline{2-4}
& \multicolumn{1}{p{2.5in}|}{\centering Standard Operating Procedure } & \multicolumn{2}{p{2.5in}|}{Title: \mythetitle} \\ \cline{2-4}
& Approved By: \theapproved & \multicolumn{2}{l|}{Revision Date: \quad / \quad / \quad} \\ \hline
\end{tabular}
}
% For "Page N of M"
\RequirePackage{lastpage}
% For easier construction of page headers/footers
\RequirePackage{fancyhdr}
\fancypagestyle{plain}{ % for first page
\fancyhf{}
\fancyfoot[L]{\framebox{Author: \theauthor}\\ \jobname{}.tex}
\fancyfoot[R]{\framebox{Page: \thepage{} of \pageref*{LastPage}}}
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0pt}
}
\pagestyle{fancy} % for other pages
\fancyhf{}
\fancyhead[R]{%
\begin{tabular}{|c|c|} \hline %
Revision Date: & Number: \\
\quad / \quad / \quad & \\ \hline
\end{tabular}%
}
\fancyfoot[L]{\framebox{Author: \theauthor}}
\fancyfoot[R]{\framebox{Page: \thepage{} of \pageref*{LastPage}}} % \pageref* if we use hyperref, \pageref otherwise
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0pt}
% For easier customization of itemized, enumerated, and other lists
\RequirePackage{enumitem}
% For hyperlinked cross-references
\RequirePackage{hyperref}
% Ensure first page is correct style
\thispagestyle{plain}
% That's all, folks!
\endinput
See this SO question for where I got started with this.
listings
package provides an elegant way to include an external programming source code as demonstrated below.
Assume that you have an external programming source code named project.cs
:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfApplication1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
}
You can import the code from within your report.
\documentclass{report}
\usepackage{xcolor}
\usepackage{listings}
\lstset
{
basicstyle=\tt\scriptsize,
identifierstyle=\color{blue},
commentstyle=\color{red},
breaklines=true,
backgroundcolor=\color{yellow!30},
numbers=none,
language=[Sharp]C
}
\begin{document}
\lstinputlisting{project.cs}
\end{document}
Output:
For further details how to use listings
package, run texdoc listings
to show the listings
package manual. There are too many options that I cannot show one by one.
For drawing UML, you can use PSTricks package named as pst-uml
.
Best Answer
Depending on which font you need you might want to consider using xelatex and the fontspec package to set the document font.
The textcolor can be set using color/xcolor packages.
Section titles can be customised using titletoc or sectsty or choose a flexible documentclass like memoir that has customisation tools build-in.
For inspiration on how to change the titlepage see http://www.ctan.org/pkg/titlepages.
Watermarks can be added with package atbegshi http://www.ctan.org/pkg/atbegshi.