% \iffalse meta-comment
%
% (c) 2009-2010 George R. Louthan IV <georgerlouth@nthefourth.com>
%       http://georgerloutha.nthefourth.com
% (c) 2007 Todd C. Miller <Todd.Miller@courtesan.com>
%       http://www.gratisoft.us/todd/
% (c) 2003-2007 David J. Grant <davidgrant-at-gmail.com>
%       http://www.davidgrant.ca
% (c) 2002 Matthew Boedicker <matthewm@boedicker.org>
%       http://matthewm.boedicker.org/
%
% This work is licensed under the Creative Commons Attribution-ShareAlike 3.0
% Unported License. To view a copy of this license, visit
% http://creativecommons.org/licenses/by-sa/3.0/ or send a letter to
% Creative Commons
% 171 Second Street, Suite 300
% San Francisco, California, 94105, USA.
%
% \fi
%
%\iffalse
%<*driver>
\ProvidesFile{tucv.dtx}
%</driver>
%<package>\NeedsTeXFormat{LaTeX2e}
%<package>\ProvidesPackage{tucv}
%<*package>
[2010/11/11 v1.0 Univ. of Tulsa iSec CV Style]
%</package>
%
%<*driver>
\documentclass{ltxdoc}
\usepackage{tucv}
\usepackage[american]{babel}
\EnableCrossrefs
\CodelineIndex
\RecordChanges
\begin{document}
    \DocInput{tucv.dtx}
    \PrintChanges
    \PrintIndex
\end{document}
%</driver>
%\fi
%
% \CheckSum{0}
%
% \CharacterTable
%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%   Digits        \0\1\2\3\4\5\6\7\8\9
%   Exclamation   \!     Double quote  \"     Hash (number) \#
%   Dollar        \$     Percent       \%     Ampersand     \&
%   Acute accent  \'     Left paren    \(     Right paren   \)
%   Asterisk      \*     Plus          \+     Comma         \,
%   Minus         \-     Point         \.     Solidus       \/
%   Colon         \:     Semicolon     \;     Less than     \<
%   Equals        \=     Greater than  \>     Question mark \?
%   Commercial at \@     Left bracket  \[     Backslash     \\
%   Right bracket \]     Circumflex    \^     Underscore    \_
%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%   Right brace   \}     Tilde         \~}
%
% \changes{v1.0}{2010/11/13}{Initial version}
%
% \GetFileInfo{tucv.dtx}
%
% \DoNotIndex{\^, \begin, \colorbox, \DeclareOption, \definecolor, \end}
% \DoNotIndex{\evensidemargin, \extracolsep, \fancyfoot, \fancyhead, \fill}
% \DoNotIndex{\headheight, \headrulewidth, \headsep, \hspace, \IfNoValueTF}
% \DoNotIndex{\large, \NewDocumentCommand, \newline, \oddsidemargin}
% \DoNotIndex{\pagestyle, \parskip, \ProcessOptions, \raggedbottom}
% \DoNotIndex{\raggedright, \renewcommand, \RequirePackage, \setlength}
% \DoNotIndex{\tabcolsep, \tabularnewline, \textbf, \textheight, \textit}
% \DoNotIndex{\textwidth, \topmargin, \voffset, \vphantom}
% \DoNotIndex{\^{E}}
% \title{The \textsf{tucv} package\thanks{This document
%   corresponds to \textsf{tucv}~\fileversion, dated \filedate.}}
% \author{George Louthan \\ \texttt{georgerlouth@nthefourth.com}}
%
% \maketitle
%
% \section{Introduction}
%
% This style provides commands for typesetting a CV or resume. Its current form
% is based upon the shaded resume style originally by Matthew Boedicker and
% updated by David Grant, Todd Miller, and George Louthan. It has been modified
% to provide the tools to produce the style of resume used by the University of
% Tulsa's Institute for Information Security and Cyber Corps program, which is
% the work, among others, of Christopher Swenson and Alexander Barclay. This
% work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported
% License.
%
% This style is designed to produce a somewhat long and quite detailed document.
% It may be suitable to typeset a shorter resume, as well, but that is not
% necessarily the goal.
%
% Although this style expects a page with quite narrow margins (narrower even
% than you are likely to see with the |fullpage| package), it does not by default adjust
% the margins or do any other page setup activities. However, when passed the
% |pagesetup| option (as in |\usepackage[pagesetup]{tucv}|), it sets up
% known-compatible margins.
%
% \section{Usage}
%
% Note: The \textsf{tucv} package is designed to be used in a document of
% \textsf{article} class. It is suggested that you import it with the
% \DescribeMacro{pagesetup}
% |pagesetup| option in order to avoid having to set up your own margins.
%
% A \textsf{tucv} resume will likely have three levels of content: resume
% headings (e.g. ``Employment,'' ``Education,'' etc.), resume entries (e.g.
% schools, employers, etc. which are meant to be part of itemized
% lists under headings), and resume subentries (e.g. degrees from schools, jobs
% at particular employers, etc., which are indented by default 10pt from the
% level of entries).
%
% There are two types of commands provided by this package: raw and high level.
% Raw commands are mainly intended to be internal to the package and are
% unlikely to be particularly useful by themselves in a document. These have
% names like |\resentry| and |\ressubentry|. High level commands are the ones
% that are likely to be most useful in typesetting a resume and include
% |\resschool| and |\resjob|.
%
% \subsection{Raw commands}
% \DescribeMacro{\resentry}
% Raw (internal) two-column resume entries are provided by |\resentry|. It is
% unlikely that this will be of
% much use directly very often. Instead, it is used internally by other commands
% provided by this package. It may also be indented by an optional width.
% Usage: |\resentry| \oarg{indent} \marg{lefttext} \marg{righttext}
%
% \DescribeMacro{\ressubentry}
% Indented two-column resume subentries are provided by
% |\ressubentry|; this is just a |\resentry|
% with a 10pt indentation specified. Usage:
% |\ressubentry| \marg{lefttext} \marg{righttext}. Same as
% |\resentry{10pt}{|\meta{lefttext}|}{|\meta{righttext}|}|.
%
% \DescribeMacro{\resentrysinglecol}
% Single-column resume entries are
% provided by |\resentrysinglecol| with optional indentation. The
% text will fill the same area occupied by both columns of the two-column
% entries. Usage: |\resentrysinglecol| \oarg{indent} \marg{text}
%
%\DescribeMacro{\ressubentrysinglecol}
% Indented one-column resume entries are provided by
% |\ressubentrysinglecol|. Usage:
% |\ressubentrysinglecol| \marg{text}. Same as |\resentrysinglecol{10pt}{|
% \meta{text}|}|.
%
% \subsection{High level commands}
% \DescribeMacro{\resheading}
% Place top-level section headings with the |\resheading| command. This will
% place the heading inside a shaded box. Usage: |\resheading| \marg{heading}.
%
% \DescribeMacro{\resschool}
% |\resschool| provides an entry for a school, with a name, location, and
% optional description. Usage: |\resschool| \oarg{description} \marg{name}
% \marg{location}. This describes only the school itself; a subentry called
% |\resdegree| is provided to place immediately following |\resschool| entries
% in order to specify the degrees issued by that school (and their dates).
%
% \DescribeMacro{\resdegree}
% |\resdegree| provides an entry for a degree or other issuance from a school,
% with a
% degree, major, date, and optional description. Intended to be a subentry
% beneath a school. Usage: |\resdegree| \oarg{description} \marg{degree}
%
% \DescribeMacro{\resemployer}
% |\resemployer| provides an entry for an employer. This entry is very similar
% to the school
% entry; it is different mainly for semantic reasons and to allow easier
% customization. Usage: |\resemployer| \oarg{description} \marg{name}
%
% \DescribeMacro{\resjob}
% |\resjob| provides an entry for a job. This works similarly to the
% school/degree
% set of entries and is intended to be a subentry of an employer field. Provides
% title, start date, end date, and description fields. Usage: |\resjob|
% \oarg{description} \marg{title} \marg{startdate} \marg{enddate}.
%
% \DescribeMacro{\resconference}
% |\resconference| provides an entry for denoting conference participation,
% with name and role
% fields. An optional description argument is accepted by not currently typeset.
% Usage: |\resconference| \oarg{description} \marg{name} \marg{role}
%
%\DescribeMacro{\ressubconference}
% |\ressubconference| provides an entry for denoting ``subconference''
% participation, with name and
% role fields. An optional description argument is accepted by not currently
% typeset. Usage: |\ressubconference| \oarg{description} \marg{name} \marg{role}
% This is intended to denote workshops, tutorials, special topics symposia,
% sessions, etc.
%
%\DescribeMacro{\resdesc}
% |\resdesc| provides an item/description pair, somewhat similar in appearance
% to |\item|s
% in \LaTeX's |\description| environment, though |\resdesc| is not a drop-in
% replacement for |\item| because it does not use |\item| in its implementation.
% Usage: |\resdesc| \marg{item} \marg{description}.
%
%\DescribeMacro{\resbib}
% |\resbib| provides a bibliography entry. Currently identical to |\resdesc| in
% behavior, but separate because of the semantic difference and the possibility
% of altering its appearance in the future. Usage: |\resbib| \marg{title}
%
% \StopEventually{}
% \section{Implementation}
% Require dependencies, adjust margins, set up header/footer.
%    \begin{macrocode}
\RequirePackage{array}
\RequirePackage{color}
\RequirePackage{calc}
\RequirePackage{fancyhdr}
\RequirePackage{xparse}
\DeclareOption{pagesetup}{
    \renewcommand{\headrulewidth}{0pt}
    \setlength{\voffset}{0.1in}
    \setlength{\headheight}{0in}
    \setlength{\headsep}{0in}
    \setlength{\textheight}{11in}
    \setlength{\textheight}{9.5in}
    \setlength{\topmargin}{-0.25in}
    \setlength{\textwidth}{7in}
    \setlength{\oddsidemargin}{-0.25in}
    \setlength{\evensidemargin}{-0.25in}
    \setlength{\tabcolsep}{0in}
    \raggedbottom
    \raggedright
    \pagestyle{fancy}
    \fancyhead{}
    \fancyfoot{}
}
\ProcessOptions
%    \end{macrocode}
%\begin{macro}{tucvheading}
% Set the default color of the |\resheading| shaded backgrounds. Overwrite in
% your documents in order to adjust the color.
%    \begin{macrocode}
\definecolor{tucvheading}{gray}{0.85}
%    \end{macrocode}
%\end{macro}
% \begin{macro}{\resheading}
% Resume heading. Heading inside a shaded box. Usage:
% |\resheading| \marg{heading}
%    \begin{macrocode}
\NewDocumentCommand\resheading{m}{{\large \colorbox{tucvheading}{\begin{minipage}
    {\textwidth-6.0pt}{\textbf{#1 \vphantom{p\^{E}}}}\end{minipage}}}}
%    \end{macrocode}
% \end{macro}
%
%\begin{macro}{\resentry}
% Raw (internal) two-column resume entry. It is unlikely that this will be of
% much use directly very often. Instead, it is used internally by other commands
% provided by this package. It may also be indented by an optional width.
% Usage: |\resentry| \oarg{indent} \marg{lefttext} \marg{righttext}
%    \begin{macrocode}
\NewDocumentCommand\resentry{O{0pt}mm}{
    \begin{tabular*}{0.9\textwidth}[t]{@{\hspace{#1}}
            p{5.0in-#1}@{\extracolsep{\fill}}p{0.75in}}
        \raggedright #2 & #3
        \tabularnewline
    \end{tabular*}
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\ressubentry}
% Raw (internal) indented two-column resume subentry; this is just a |\resentry|
% with a 10pt indentation specified. Usage:
% |\ressubentry| \marg{lefttext} \marg{righttext}. This is equivalent to
% |\resentry{10pt}{|\meta{lefttext}|}{|\meta{righttext}|}|.
%    \begin{macrocode}
\NewDocumentCommand\ressubentry{mm}{
    \resentry[10pt]{
        \setlength{\parskip}{1ex plus 0.5ex minus 0.2ex}
        #1}{#2}
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\resentrysinglecol}
% Raw (internal) single-column resume entry with optional indentation. The
% text will fill the same area occupied by both columns of the two-column
% entries. Usage: |\resentrysinglecol| \oarg{indent} \marg{text}
%    \begin{macrocode}
\NewDocumentCommand\resentrysinglecol{O{0pt}m}{
    \begin{tabular*}{0.9\textwidth}[t]{@{\hspace{#1}}p{0.9\textwidth-#1}}
        #2
        \tabularnewline
    \end{tabular*}
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\ressubentrysinglecol}
% Raw (internal) indented one-column resume entry. This is just
% |\resentrysinglecol| with a fixed 10pt indentation. Usage:
% |\ressubentrysinglecol| \marg{text}. Equivalent to |\resentrysinglecol{10pt}{|
% \meta{text}|}|.
%    \begin{macrocode}
\NewDocumentCommand\ressubentrysinglecol{m}{
    \resentrysinglecol[10pt]{
        \setlength{\parskip}{1ex plus 0.5ex minus 0.2ex}
        #1}
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\resschool}
% Provides an entry for a school, with a name, location, and optional
% description. Usage: |\resschool| \oarg{description} \marg{name}
% \marg{location}.
%    \begin{macrocode}
\NewDocumentCommand\resschool{omm}{
    \resentry{\textbf{#2}
    \IfNoValueTF{#1}
    {}
    {\newline \textit{#1}}
    }{#3}
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\resdegree}
% Provides an entry for a degree or other issuance from a school, with a
% degree, major, date, and optional description. Intended to be a subentry
% beneath a school. Usage: |\resdegree| \oarg{description} \marg{degree}
% \marg{major} \marg{date}.
%    \begin{macrocode}
\NewDocumentCommand\resdegree{ommm}{
    \ressubentry{#2 in #3
    \IfNoValueTF{#1}
    {}
    {\newline \textit{#1}}
    }{#4}
    %\ressubentry{#2 in #3}{#4}
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\resemployer}
% Provides an entry for an employer. This entry is very similar to the school
% entry; it is different mainly for semantic reasons and to allow easier
% customization. Usage: |\resemployer| \oarg{description} \marg{name}
% \marg{location}.
%    \begin{macrocode}
\NewDocumentCommand\resemployer{omm}{
    \resentry{\textbf{#2} 
    \IfNoValueTF{#1}
    {}
    {\newline #1}
    }{#3}
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\resjob}
% Provides an entry for a job. This works similarly to the school/degree
% set of entries and is intended to be a subentry of an employer field. Provides
% title, start date, end date, and description fields. Usage: |\resjob|
% \oarg{description} \marg{title} \marg{startdate} \marg{enddate}.
%    \begin{macrocode}
\NewDocumentCommand\resjob{ommm}{
    \resentry[10pt]{
    \setlength{\parskip}{1ex plus 0.5ex minus 0.2ex} \textbf{#2} 
    \IfNoValueTF{#1}
    {}
    {\newline #1}
    }{#3 -- \newline #4}
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\resconference}
% Provides an entry for denoting conference participation, with name and role
% fields. An optional description argument is accepted by not currently typeset.
% Usage: |\resconference| \oarg{description} \marg{name} \marg{role}
%    \begin{macrocode}
\NewDocumentCommand\resconference{omm}{
    \resentrysinglecol{\raggedright \textbf{#2} #3}
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\ressubconference}
% Provides an entry for denoting ``subconference'' participation, with name and
% role fields. An optional description argument is accepted by not currently
% typeset. Usage: |\ressubconference| \oarg{description} \marg{name} \marg{role}
% This is intended to denote workshops, tutorials, special topics symposia,
% sessions, etc.
%    \begin{macrocode}
\NewDocumentCommand\ressubconference{omm}{
    \resentrysinglecol[10pt]{\textbf{#2} #3}
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\resdesc}
% Provides an item/description pair, somewhat similar in appearance to |\item|s
% in \LaTeX's |\description| environment, though |\resdesc| is not a drop-in
% replacement for |\item| because it does not use |\item| in its implementation.
% Usage: |\resdesc| \marg{item} \marg{description}.
%    \begin{macrocode}
\NewDocumentCommand\resdesc{mm}{
    \resentrysinglecol{\raggedright \textbf{#1} #2}
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\resbib}
% Provides a bibliography entry. Currently identical to |\resdesc| in
% behavior, but separate because of the semantic difference and the possibility
% of altering its appearance in the future. Usage: |\resbib| \marg{title}
% \marg{citation\_remainder}.
%    \begin{macrocode}
\NewDocumentCommand\resbib{mm}{
    \resentrysinglecol{\raggedright \textbf{#1} #2}
}
%    \end{macrocode}
%\end{macro}
%
% \Finale
\endinput