summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/mycv/mycv.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/mycv/mycv.dtx')
-rw-r--r--macros/latex/contrib/mycv/mycv.dtx1247
1 files changed, 1247 insertions, 0 deletions
diff --git a/macros/latex/contrib/mycv/mycv.dtx b/macros/latex/contrib/mycv/mycv.dtx
new file mode 100644
index 0000000000..129304a5a1
--- /dev/null
+++ b/macros/latex/contrib/mycv/mycv.dtx
@@ -0,0 +1,1247 @@
+% \iffalse meta-comment
+% mycv : a curriculum vitae class allowing TikZ decorations
+% (v1.5.6 - Sun May 20 21:31:37 CEST 2012)
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License version
+% 1.3c, available at 'http://www.latex-project.org/lppl'.
+%
+% This work consists of the main source file 'mycv.dtx'
+% and the derived files:
+%
+% mycv.ins,
+% mycv.cls,
+% mycv_base.def, mycv_misc.def, mycv_version.def
+% mycv_style.sty, mycv_dec.sty,
+% mycv_split_contents.pl
+% mycv.pdf
+%
+% Moreover, it also consists of the files 'README',
+% 'CHANGELOG', 'checksum.pl' and folders <Examples>
+% and <Doc>.
+%
+% Unpacking the class files:
+%
+% (pdf)latex mycv.dtx
+%
+% Generating the documentation:
+%
+% the documentation has to be produced separately as it
+% uses the package 'arsclassica', that seems to be not
+% fully compatible with the 'doc' package (that should
+% be used in the driver file for producing the document).
+% To produce the documentation, move to the folder 'Doc'
+% and type:
+%
+% pdflatex mycv.tex
+%
+% Generating the examples:
+%
+% see the file 'Exampes/Notes.txt'.
+%
+% ----------------------------------------------------------
+% ** This file was automatically generated by <DoPackage.sh>
+% ** with option(s) 'ctan'.
+% ** Date: Sun May 20 21:31:37 CEST 2012::1337542297
+% ----------------------------------------------------------
+% \fi
+%<*install>
+\input docstrip.tex
+
+\preamble
+--------------------------------------------------------
+ Author: Andrea Ghersi
+ Copyright 2012 Ghersi Andrea (ghanhawk@gmail.com).
+
+ This work may be distributed and/or modified under the
+ conditions of the LaTeX Project Public License version
+ 1.3c, available at 'http://www.latex-project.org/lppl'.
+
+ This work has the LPPL maintenance status "maintained".
+ The Current Maintainer of this work is Andrea Ghersi.
+
+ This work consists of the files listed in the README
+ file.
+--------------------------------------------------------
+\endpreamble
+
+\keepsilent
+\askforoverwritefalse
+\usedir{tex/latex/mycv}
+
+\generate{%
+ \file{mycv.ins}{\from{mycv.dtx}{install}}%
+ \file{mycv.cls}{\from{mycv.dtx}{mycv.cls}}%
+ \file{mycv_base.def}{\from{mycv.dtx}{mycv-base.def}}%
+ \file{mycv_misc.def}{\from{mycv.dtx}{mycv-misc.def}}%
+ \file{mycv_dec.sty}{\from{mycv.dtx}{mycv-dec.sty}}%
+ \file{mycv_style.sty}{\from{mycv.dtx}{mycv-style.sty}}%
+ \file{mycv_version.def}{\from{mycv.dtx}{mycv-version.def}}%
+}
+
+\generate{%
+ \file{mycv_split_contents.pl}%
+ {\nopreamble\nopostamble\from{mycv.dtx}{mycv-split-contents.pl}}%
+}
+
+\obeyspaces
+\Msg{**************************************************************}
+\Msg{* *}
+\Msg{* To finish the installation you have to move the following *}
+\Msg{* files into a directory searched by (La)TeX: *}
+\Msg{* *}
+\Msg{* mycv.cls, mycv*.def, mycv*.sty *}
+\Msg{* *}
+\Msg{* and copy the script 'mycv-split-contents.pl' into a folder *}
+\Msg{* that is in your PATH environment variable. *}
+\Msg{* On Unix-like operating systems, make the script executable *}
+\Msg{* (i.e. chmod +x mycv-split-contents.pl). *}
+\Msg{* *}
+\Msg{* To produce the documentation, move to the folder <Doc> and *}
+\Msg{* run the file 'mycv.tex' twice through LaTeX. *}
+\Msg{* *}
+\Msg{* See the file 'Exampes/Notes.txt' for information on how to *}
+\Msg{* produce pdf files with examples. *}
+\Msg{* *}
+\Msg{* If you want to verify the integrity of the main files, you *}
+\Msg{* can run the script 'checksum.pl' (on Unix-like operating *}
+\Msg{* systems, make it executable -- i.e. chmod +x checksum.pl). *}
+\Msg{* *}
+\Msg{* Happy (La)TeXing! *}
+\Msg{* *}
+\Msg{**************************************************************}
+
+\endbatchfile
+%</install>
+% \StopEventually{}
+%
+%
+% \iffalse
+%<*mycv-base.def>
+% \fi
+
+\ProvidesFileSVN
+ {$Id: mycv_base.def 87 2012-05-17 00:40:11Z ghangenit $}
+ [v\@versionstr][Base system core]
+
+%% for lists and other useful tools
+\RequirePackage{etextools}
+
+%%%%%%%%%%%%%%%%%%%
+%% %
+%% Default values %
+%% %
+%%%%%%%%%%%%%%%%%%%
+
+\def\@mainbodypagesize{1.00}
+\def\@subbodypagesize{0.45}
+
+\def\@mainheaderpagesize{1.00}
+\def\@subheaderpagesize{0.44}
+
+\def\@mainfooterpagesize{1.00}
+\def\@subfooterpagesize{0.44}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% %
+%% Layout components (parser) %
+%% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\@cmdsListSep{:}
+\def\@argsListSep{=}
+
+\expandaftercmds{\DeclareCmdListParser\MyParserCmds}{\@cmdsListSep}
+\expandaftercmds{\DeclareCmdListParser\MyParserArgs}{\@argsListSep}
+
+%% -----------------------------------
+%% setup file components: header pages
+%% -----------------------------------
+
+\def\@MainHeaderPageBegin{MainHeaderPageBegin}
+\def\@SubHeaderPageBegin{SubHeaderPageBegin}
+\def\@MainHeaderPageEnd{MainHeaderPageEnd}
+\def\@SubHeaderPageEnd{SubHeaderPageEnd}
+
+%% ---------------------------------
+%% setup file components: body pages
+%% ---------------------------------
+
+\def\@MainBodyPageBegin{MainBodyPageBegin}
+\def\@MainBodyPageEnd{MainBodyPageEnd}
+\def\@SubBodyPageBegin{SubBodyPageBegin}
+\def\@SubBodyPageEnd{SubBodyPageEnd}
+
+\def\@MainFooterPageBegin{MainFooterPageBegin}
+\def\@SubFooterPageBegin{SubFooterPageBegin}
+\def\@MainFooterPageEnd{MainFooterPageEnd}
+\def\@SubFooterPageEnd{SubFooterPageEnd}
+
+%% -------------------
+%% regular expressions
+%% -------------------
+
+\def\@regexPreCmd{<precmd:([-!*@.0-9A-Za-z \@cmdsListSep\@argsListSep]+)>}
+\def\@regexPostCmd{<postcmd:([-!*@.0-9A-Za-z \@cmdsListSep\@argsListSep]+)>}
+\def\@regexArgsList{\@argsListSep([-!*@.0-9A-Za-z \@argsListSep]+)}
+
+\def\@regexMarginLB{/ml([0-9.-]+.{2})}
+\def\@regexMarginRB{/mr([0-9.-]+.{2})}
+\def\@regexPageSizeAbs{/pagesize([0-9.]+.{2})/}
+\def\@regexPagebreak{/pagebreak/}
+\def\@regexPageSize{<([0-9.]+)>}
+\def\@regexMarginLE{/endml/}
+\def\@regexMarginRE{/endmr/}
+\def\@regexFileName{^([_\-a-zA-Z0-9]+)@}
+\def\@regexCmdName{([a-zA-Z]+)}
+\def\@regexFileVar{^.{1}([A-Za-z]+)}
+\def\@regexParamTypeA{^[@]}
+\def\@regexParamTypeB{^[!]}
+\def\@regexParamTypeC{^[*]}
+
+%% ==================
+%% Auxiliary commands
+%% ==================
+
+\newcommand{\@concatCommandArg}[1]{%
+ \ifnum\pdfmatch{\@regexParamTypeA}{#1}=1
+ \StrGobbleLeft{#1}{1}[\arg]
+ \expandafter\g@addto@macro\expandafter\args%
+ \expandafter{\expandafter[\arg]}
+ \else
+ \ifnum\pdfmatch{\@regexParamTypeB}{#1}=1
+ \StrGobbleLeft{#1}{1}[\arg]
+ \expandafter\g@addto@macro\expandafter\args%
+ \expandafter{\expandafter<\arg>}
+ \else
+ \ifnum\pdfmatch{\@regexParamTypeC}{#1}=1
+ \g@addto@macro\args{*}
+ \else
+ \g@addto@macro\args{{#1}}
+ \fi
+ \fi
+ \fi%
+}
+
+\newcommand{\@execCommand}[1]{%
+ \let\args\@empty
+ \ifnum\pdfmatch{\@regexArgsList}{#1}=1
+ \@getRegexResult{\argslist}
+ \ifnum\pdfmatch{\@regexCmdName}{#1}=1
+ \@getRegexResult{\cmd}
+ \fi
+ \MyParserArgs[\@concatCommandArg]\argslist
+ \expandaftercmds{\csuse\cmd}{\args}
+ \else
+ \csuse{#1}
+ \fi%
+}
+
+\newcommand{\@getRegexResult}[1]{%
+ \StrPosition{\pdflastmatch 1}{>}[\n]
+ \StrGobbleLeft{\pdflastmatch 1}{\n}[#1]%
+}
+
+\newcommand{\@executeCommandList}[2]{%
+ \ifnum\pdfmatch{#2}{#1}=1%
+ \StrPosition{\pdflastmatch 1}{>}[\n]
+ \StrGobbleLeft{\pdflastmatch 1}{\n}[\cmdlist]
+ \MyParserCmds[\@execCommand]\cmdlist
+ \fi%
+}
+
+\newcommand{\@parsePageBegin}[2]{%
+ \let\pagewidth#2
+ \ifnum\pdfmatch{\@regexPageSize}{#1}=1
+ \@getRegexResult{\pagewidth}
+ \fi
+ \@executeCommandList{#1}{\@regexPreCmd}
+ \ifnum\pdfmatch{\@regexPageSizeAbs}{#1}=1
+ \@getRegexResult{\pagewidth}
+ \noindent\begin{minipage}[t]{\pagewidth}
+ \else
+ \noindent\begin{minipage}[t]{\pagewidth\textwidth}
+ \fi
+ \@executeCommandList{#1}{\@regexPostCmd}
+ \ifnum\pdfmatch{\@regexMarginLB}{#1}=1
+ \@getRegexResult{\marginsize}
+ \begin{mychangemarginLeft}{\marginsize}
+ \fi
+ \ifnum\pdfmatch{\@regexMarginRB}{#1}=1
+ \@getRegexResult{\marginsize}
+ \begin{mychangemarginRight}{\marginsize}
+ \fi%
+}
+
+\newcommand{\@parsePageEnd}[1]{%
+ \ifnum\pdfmatch{\@regexMarginRE}{#1}=1
+ \end{mychangemarginRight}
+ \fi
+ \ifnum\pdfmatch{\@regexMarginLE}{#1}=1
+ \end{mychangemarginLeft}
+ \fi
+ \@executeCommandList{#1}{\@regexPreCmd}
+ \ifnum\pdfmatch{\@regexPagebreak}{#1}=1
+ \end{minipage}
+
+ \else
+ \end{minipage}
+ \fi
+ \@executeCommandList{#1}{\@regexPostCmd}
+}
+
+\newcommand{\@parseFileName}[1]{%
+ \let\marginsizeleft\relax
+ \let\marginsizeright\relax
+ \@executeCommandList{#1}{\@regexPreCmd}
+ \ifnum\pdfmatch{\@regexMarginLB}{#1}=1
+ \@getRegexResult{\marginsizeleft}
+ \begin{mychangemarginLeft}{\marginsizeleft}
+ \fi
+ \ifnum\pdfmatch{\@regexMarginRB}{#1}=1
+ \@getRegexResult{\marginsizeright}
+ \begin{mychangemarginRight}{\marginsizeright}
+ \fi
+ \IfBeginWith{#1}{*}{%
+ \ifnum\pdfmatch{\@regexFileVar}{\noexpand#1}=1
+ \@getRegexResult{\filename}
+ \fi
+ \input\cvcontentsdir/\csuse{\filename}
+ }%
+ {%
+ \ifnum\pdfmatch{\@regexFileName}{#1}=1
+ \@getRegexResult{\filename}
+ \fi
+ \input\cvcontentsdir/\filename
+ }
+ \@executeCommandList{#1}{\@regexPostCmd}
+ \ifx\marginsizeright\relax
+ \relax
+ \else
+ \end{mychangemarginRight}
+ \fi
+ \ifx\marginsizeleft\relax
+ \relax
+ \else
+ \end{mychangemarginLeft}
+ \fi
+}
+
+%% =============
+%% Main commands
+%% =============
+
+\newcommand{\@bodylayoutlistentry}[1]{%
+ \ifstrmatch{\@SubBodyPageBegin}{#1}{%
+ \@parsePageBegin{#1}{\@subbodypagesize}%
+ }%
+ {%
+ \ifstrmatch{\@SubBodyPageEnd}{#1}{%
+ \@parsePageEnd{#1}%
+ }%
+ {%else
+ \ifstrmatch{\@MainBodyPageBegin}{#1}{%
+ \@parsePageBegin{#1}{\@mainbodypagesize}%
+ }%
+ {%else
+ \ifstrmatch{\@MainBodyPageEnd}{#1}{%
+ \@parsePageEnd{#1}%
+ }%
+ {%else
+ \@parseFileName{#1}%
+ }%
+ }%
+ }%
+ }%
+}
+
+\newcommand{\@headerlayoutlistentry}[1]{%
+ \ifstrmatch{\@MainHeaderPageBegin}{#1}{%
+ \@parsePageBegin{#1}{\@mainheaderpagesize}%
+ }%
+ {%else
+ \ifstrmatch{\@SubHeaderPageBegin}{#1}{%
+ \@parsePageBegin{#1}{\@subheaderpagesize}%
+ }%
+ {%else
+ \ifstrmatch{\@MainHeaderPageEnd}{#1}%
+ {\@parsePageEnd{#1}}%
+ {%else
+ \ifstrmatch{\@SubHeaderPageEnd}{#1}{%
+ \@parsePageEnd{#1}%
+ }%
+ {%else
+ \@parseFileName{#1}%
+ }%
+ }%
+ }%
+ }%
+}
+
+\newcommand{\@footerlayoutlistentry}[1]{%
+ \ifstrmatch{\@MainFooterPageBegin}{#1}{%
+ \@parsePageBegin{#1}{\@mainfooterpagesize}%
+ }%
+ {%else
+ \ifstrmatch{\@SubFooterPageBegin}{#1}{%
+ \@parsePageBegin{#1}{\@subfooterpagesize}%
+ }%
+ {%else
+ \ifstrmatch{\@MainFooterPageEnd}{#1}%
+ { \@parsePageEnd{#1}%
+ }%
+ {%else
+ \ifstrmatch{\@SubFooterPageEnd}{#1}{%
+ \@parsePageEnd{#1}%
+ }%
+ {%else
+ \@parseFileName{#1}%
+ }%
+ }%
+ }%
+ }%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% %
+%% Layout components (render) %
+%% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newcommand{\@raisewarning}[1]{%
+ \ClassWarning{mycv}{%
+ WARNING! The list <#1> used by 'mycv' class is undefined. %
+ Please, define it before using '\myrenderlayout' command. %
+ }%
+}
+
+\DeclareRobustCommand{\myrenderlayout}[1][a]{%
+ \begingroup
+ \ifsinglechar{b}{#1}{%
+ \@ifundefined{bodylayoutlist}%
+ {\@raisewarning{bodylayoutlist}}% else
+ {\csvloop[\@bodylayoutlistentry]{\bodylayoutlist}}%
+ }%
+ {%else
+ \ifsinglechar{h}{#1}{%
+ %% --------
+ %% HEADINGS
+ %% --------
+ \@ifundefined{headerlayoutlist}%
+ {\@raisewarning{headerlayoutlist}}% else
+ {\csvloop[\@headerlayoutlistentry]\headerlayoutlist}%
+ }%
+ {%else
+ %% ------------------------------------------------
+ %% FOOTINGS: sign and treatment of personal details
+ %% ------------------------------------------------
+ \ifsinglechar{f}{#1}{%
+ \@ifundefined{footerlayoutlist}%
+ {\@raisewarning{footerlayoutlist}}% else
+ {\csvloop[\@footerlayoutlistentry]\footerlayoutlist}%
+ }%
+ {%\else
+ %% --------------
+ %% ALL COMPONENTS
+ %% --------------
+ \@ifundefined{headerlayoutlist}%
+ {\@raisewarning{headerlayoutlist}}% else
+ {\csvloop[\@headerlayoutlistentry]\headerlayoutlist}%
+ \@ifundefined{bodylayoutlist}%
+ {\@raisewarning{bodylayoutlist}}% else
+ {\csvloop[\@bodylayoutlistentry]\bodylayoutlist}
+ \@ifundefined{footerlayoutlist}%
+ {\@raisewarning{footerlayoutlist}}% else
+ {\csvloop[\@footerlayoutlistentry]\footerlayoutlist}%
+ }%
+ }%
+ }%
+ \endgroup
+}
+% \iffalse
+%</mycv-base.def>
+% \fi
+%
+%
+% \iffalse
+%<*mycv-misc.def>
+% \fi
+%% -------------------------------------------------------
+%% Copyright 2012 Ghersi Andrea (ghanhawk@gmail.com).
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License version
+%% 1.3c, available at 'http://www.latex-project.org/lppl'.
+%% -------------------------------------------------------
+
+\ProvidesFileSVN
+ {$Id: mycv_misc.def 66 2012-04-28 14:38:41Z ghangenit $}
+ [v\@versionstr][Miscellaneous commands]
+
+\RequirePackage{hyperref}
+
+%% -----------------------------------------------------
+%% partial hyperref setup: the rest is set in style file
+%% -----------------------------------------------------
+
+\hypersetup{%
+ pdfstartpage = 1,
+ pdfauthor = \@pdfauthor,
+ pdftitle = \@pdftitle,
+ pdfsubject = \@pdfsubject,
+ pdfproducer = \LaTeX{},
+ pdfkeywords = cv curriculum vit\ae{},
+ pdfcreator = \LaTeX{} with 'mycv' (v\@versionstr)
+}
+
+%%%%%%%%%%%%
+%% %
+%% Margins %
+%% %
+%%%%%%%%%%%%
+
+\newenvironment{mychangemargin}[2]
+ {\begin{list}{}{%
+ \setlength{\topsep}{0pt}%
+ \setlength{\leftmargin}{#1}%
+ \setlength{\rightmargin}{#2}%
+ \setlength{\partopsep}{0pt}%
+ \setlength{\parsep}{\parskip}}\item[]%
+ }%
+ {\end{list}}
+
+\newenvironment{mychangemarginLeft}[1]
+ {\begin{list}{}{%
+ \setlength{\topsep}{0pt}%
+ \setlength{\leftmargin}{#1}%
+ \setlength{\partopsep}{0pt}%
+ \setlength{\parsep}{\parskip}}\item[]%
+ }%
+ {\end{list}}
+
+\newenvironment{mychangemarginRight}[1]
+ {\begin{list}{}{%
+ \setlength{\topsep}{0pt}%
+ \setlength{\rightmargin}{#1}%
+ \setlength{\partopsep}{0pt}%
+ \setlength{\parsep}{\parskip}}\item[]%
+ }%
+ {\end{list}}
+
+%%%%%%%%%%%%%%%%
+%% %
+%% Other stuff %
+%% %
+%%%%%%%%%%%%%%%%
+
+\DeclareRobustCommand{\mylang}[2][english]{%
+ \foreignlanguage{#1}{{z#2}}} %{\color{blue}{#2}}}
+
+%% ------------
+%% pdf metadata
+%% ------------
+
+\DeclareRobustCommand{\mypdfsubject}[1]{\def\@pdfsubject{#1}}
+\DeclareRobustCommand{\mypdfauthor}[1]{\def\@pdfauthor{#1}}
+\DeclareRobustCommand{\mypdftitle}[1]{\def\@pdftitle{#1}}
+
+
+% \iffalse
+%</mycv-misc.def>
+% \fi
+%
+%
+% \iffalse
+%<*mycv-version.def>
+% \fi
+\def\@versionstr{1.5.6}
+% \iffalse
+%</mycv-version.def>
+% \fi
+%
+%
+% \iffalse
+%<*mycv.cls>
+% \fi
+
+\NeedsTeXFormat{LaTeX2e}
+
+\RequirePackage{svn-prov}
+\input{mycv_version.def}
+
+\ProvidesClassSVN
+ {$Id: mycv.cls 87 2012-05-17 00:40:11Z ghangenit $}
+ [v\@versionstr][My Curriculum Vitae class]
+
+%% ========
+%% Packages
+%% ========
+
+\RequirePackage{kvoptions} % for class options with key-value format
+\RequirePackage{xstring} % for string utilities
+\RequirePackage{ifthen} % for the <\ifthenelse> command
+
+%% =============
+%% Class Options
+%% =============
+
+\DeclareBoolOption{withDec}
+
+\DeclareDefaultOption{%
+ \PassOptionsToClass{\CurrentOption}{article}}
+
+\DeclareStringOption[english]{language}
+\DeclareStringOption[Contents]{cntdir}
+\DeclareStringOption[mycv_style]{style}
+\DeclareStringOption[]{mdlname}
+\ProcessKeyvalOptions*
+
+%% -----------------------------------------------------------
+%% The value of an option declared with <\DeclareStringOption>
+%% is stored in the macro \<class (or package) name>@<option>
+%% -----------------------------------------------------------
+
+\PassOptionsToPackage{\mycv@language}{babel}
+\RequirePackage{babel}
+
+\LoadClass{article}
+
+\def\cvcontentsdir{\mycv@cntdir}
+
+%% ===============
+%% File inclusions
+%% ===============
+
+\input{mycv_base.def}
+\input{mycv_misc.def}
+
+%% -------------------------------------
+%% use custom, default or any style file
+%% -------------------------------------
+\ifthenelse{\equal{\mycv@style}{none}}%
+ {\relax}% file style is not wanted
+ {\RequirePackage{\mycv@style}}
+
+%% ----------------------
+%% use decorations or not
+%% ----------------------
+\ifthenelse{\boolean{mycv@withDec}}%
+ {\RequirePackage{mycv_dec}}%
+ {\relax}
+
+\DeclareRobustCommand{\ifmodel}[1]{%
+ \begingroup
+ \def\@mdlname{#1}
+ \ifx\mycv@mdlname\@mdlname
+ \endgroup
+ \expandafter\@firstoftwo
+ \else
+ \endgroup
+ \expandafter\@secondoftwo
+ \fi
+}
+
+%% -----------------------------------------------
+%% <\ifoption{optionname}{then block}{else block}>
+%% -----------------------------------------------
+
+\DeclareRobustCommand{\ifoption}[1]{%
+ \begingroup
+ \ifthenelse{\boolean{mycv@#1}}
+ {\endgroup\expandafter\@firstoftwo}
+ {\endgroup\expandafter\@secondoftwo}%
+}
+% \iffalse
+%</mycv.cls>
+% \fi
+%
+%
+% \iffalse
+%<*mycv-dec.sty>
+% \fi
+
+\NeedsTeXFormat{LaTeX2e}
+\RequirePackage{svn-prov}
+
+\input{mycv_version.def}
+
+\ProvidesPackageSVN
+ {$Id: mycv_dec.sty 89 2012-05-19 18:23:03Z ghangenit $}
+ [v\@versionstr][Decorations commands]
+
+\RequirePackage{tikz} % for graphics
+\usetikzlibrary{shapes,decorations,shadows,fadings}
+\usetikzlibrary{decorations.pathmorphing}
+\usetikzlibrary{decorations.fractals}
+\usetikzlibrary{decorations.shapes}
+\usetikzlibrary{calc}
+\RequirePackage{xparse} % for commands with multiple default arguments
+\RequirePackage{xstring} % for string utilities
+
+%%%%%%%%%%%%%
+%% %
+%% Settings %
+%% %
+%%%%%%%%%%%%%
+
+\def\@segmentLengthString{}
+\def\@segmentLengthValue{}
+\def\@lineWidthString{}
+\def\@lineWidthValue{}
+\def\@segmentAmplitudeString{}
+\def\@segmentAmplitudeValue{}
+\def\@xBottomRight{-1cm}
+\def\@yBottomRight{1cm}
+\def\@xTopLeft{1cm}
+\def\@yTopLeft{-1cm}
+
+\tikzfading[%
+ name=fade out, inner color=transparent!0,
+ outer color=transparent!100%
+]
+
+\tikzset{
+ define mycolor/.code 2 args={\definecolor{#1}{rgb}{#2}},
+ DecoratewithShape/.style={%
+ decorate,decoration={shape backgrounds,shape=#1}%
+ },
+ DecoratewithPathMorphing/.style={%
+ decorate,decoration=#1%
+ },
+ Mainstyle/.style={
+ define mycolor={myred}{0.43,0.06,0,13},
+ define mycolor={dpred}{0.80,0.35,0}
+ }
+}
+
+%%%%%%%%%%%%%
+%% %
+%% Commands %
+%% %
+%%%%%%%%%%%%%
+
+\newcommand{\versionBasedSettings}[2]{%
+ \IfBooleanTF#1{%
+ %% ---------------------------------------------------------
+ %% From <xstring> package
+ %% ---------------------------------------------------------
+ %% Macros of this package take the catcodes of tokens into
+ %% account. To avoid unexpected behaviour (particulary with
+ %% tests), you should keep in mind that tokens and their
+ %% catcodes are examined.
+ %% For instance, these two arguments: {\string a\string b}
+ %% and {ab} do not expand into equal strings for xstring!
+ %% Because of the command \string, the first expands into
+ %% ab with catcodes 12 while the second have characters
+ %% with their natural catcodes 11. Catcodes do not match!
+ %% Starred macros do not take catcodes into account. They
+ %% simply convert some arguments into arguments with
+ %% catcodes 10, 11 and 12, and call the non-starred macros
+ %% with these modified arguments.
+ %% ---------------------------------------------------------
+ \IfStrEqCase*{#2}{%
+ {radial}{\def\@colorStr{inner color}}%
+ {ball}{\def\@colorStr{ball color}}%
+ {none}{\relax}%
+ }%
+ [mycv: Unknown option <#2>!!!]%
+ }{\relax}%
+}
+
+%% -----------------------------------------------------
+%% Pathmorphing decoration values:
+%% shape, straight zigzag, random steps, saw, zigzag,
+%% bent, bumps, coil, snake, Koch snowflake
+%%
+%% Shadings: radial, ball
+%% -----------------------------------------------------
+
+\DeclareDocumentCommand{\mydecorationsPathmorphing}%
+ {s O{1} m O{gray} D<>{radial} D<>{white}}%
+{%
+ \begingroup
+ \versionBasedSettings{#1}{#5}%
+ \begin{tikzpicture}[overlay,remember picture]%
+ \IfBooleanTF#1{% version with a star (shading)
+ \shade[
+ Mainstyle,
+ \@lineWidthString=\@lineWidthValue,
+ \@segmentAmplitudeString=\@segmentAmplitudeValue,
+ \@segmentLengthString=\@segmentLengthValue,
+ DecoratewithPathMorphing=#3,
+ color=#4,
+ shading=#5,
+ \@colorStr=#6,
+ \ifnum#2>0draw\fi
+ ]}%
+ {% version without a star (not shading)
+ \path[
+ Mainstyle,
+ \@lineWidthString=\@lineWidthValue,
+ \@segmentAmplitudeString=\@segmentAmplitudeValue,
+ \@segmentLengthString=\@segmentLengthValue,
+ DecoratewithPathMorphing=#3,
+ color=#4,
+ fill=#6,
+ \ifnum#2>0draw\fi
+ ]}%
+ ($ (current page.north west)+
+ (\@xTopLeft,\@yTopLeft) $)
+ rectangle % -- oppure circle (4), ...
+ ($ (current page.south east)+
+ (\@xBottomRight,\@yBottomRight) $);
+ \end{tikzpicture}
+ \endgroup
+}
+
+%% --------------------------------------
+%% Shapes: dart, diamond, rectangle, star
+%% --------------------------------------
+
+\DeclareDocumentCommand{\mydecorationsShape}%
+ {O{1} m O{gray}}
+{%
+ \begingroup
+ \begin{tikzpicture}[overlay,remember picture]
+ \path[
+ Mainstyle,
+ \@lineWidthString=\@lineWidthValue,
+ \@segmentAmplitudeString=\@segmentAmplitudeValue,
+ \@segmentLengthString=\@segmentLengthValue,
+ DecoratewithShape=#2,
+ color=#3,
+ \ifnum#1>0draw\fi
+ ]%
+ ($ (current page.north west)+
+ (\@xTopLeft,\@yTopLeft) $)
+ rectangle
+ ($ (current page.south east)+
+ (\@xBottomRight,\@yBottomRight) $);
+ \end{tikzpicture}
+ \endgroup
+}
+
+\DeclareDocumentCommand{\mydecorationsFading}%
+ {O{north} m O{80} O{black} D<>{1.0}}
+{%
+ \begin{tikzpicture}[overlay,remember picture]
+ \draw[path fading=#1,fill=#2!#3!#4,opacity=#5]
+ ($ (current page.north west)+
+ (\@xTopLeft,\@yTopLeft) $)
+ rectangle % -- oppure circle (4), ...
+ ($ (current page.south east)+
+ (\@xBottomRight,\@yBottomRight) $);
+ \end{tikzpicture}%
+}
+
+\DeclareRobustCommand{\mydecorationsSetPosXTL}[1]%
+ [1cm]%
+{%
+ \def\@xTopLeft{#1}%
+}
+
+\DeclareRobustCommand{\mydecorationsSetPosYTL}[1]%
+ [-1cm]%
+{%
+ \def\@yTopLeft{#1}%
+}
+
+\DeclareRobustCommand{\mydecorationsSetPosXBR}[1]%
+ [-1cm]%
+{%
+ \def\@xBottomRight{#1}%
+}
+
+\DeclareRobustCommand{\mydecorationsSetPosYBR}[1]%
+ [1cm]%
+{%
+ \def\@yBottomRight{#1}%
+}
+
+\DeclareDocumentCommand{\mydecorationsSetLineWidth}%
+ {s O{}}%
+{%
+ \IfBooleanTF#1%
+ {\def\@lineWidthString{}} % starred
+ {\def\@lineWidthString{line width}} % not starred
+
+ \def\@lineWidthValue{#2}%
+}
+
+\DeclareDocumentCommand{\mydecorationsSetSegmentAmplitude}%
+ {s O{}}%
+{%
+ \IfBooleanTF#1%
+ {\def\@segmentAmplitudeString{}} % starred
+ {\def\@segmentAmplitudeString{segment amplitude}} % not starred
+
+ \def\@segmentAmplitudeValue{#2}%
+}
+
+\DeclareDocumentCommand{\mydecorationsSetSegmentLength}%
+ {s O{}}%
+{%
+ \IfBooleanTF#1%
+ {\def\@segmentLengthString{}} % starred
+ {\def\@segmentLengthString{segment length}} % not starred
+
+ \def\@segmentLengthValue{#2}%
+}
+% \iffalse
+%</mycv-dec.sty>
+% \fi
+%
+%
+% \iffalse
+%<*mycv-style.sty>
+% \fi
+
+\NeedsTeXFormat{LaTeX2e}
+\RequirePackage{svn-prov}
+
+\input{mycv_version.def}
+
+\ProvidesPackageSVN
+ {$Id: mycv_style.sty 89 2012-05-19 18:23:03Z ghangenit $}
+ [v\@versionstr][Default style file]
+
+\RequirePackage{titlesec} % for title format and spacing
+\RequirePackage{fancyhdr} % for custom headers and footers
+\RequirePackage{xcolor} % for colors
+\RequirePackage{calligra} % for the calligra font
+\RequirePackage{times} % for times font
+\RequirePackage{pifont} % for the ’ding’ style (itemize environment)
+\RequirePackage{marvosym} % symbols - phone
+\RequirePackage{amssymb} % symbols - email
+\RequirePackage{hyperref} % for hypertext links and other stuff
+\RequirePackage{xparse} % for commands with multiple default arguments
+
+%%%%%%%%%%%%
+%% %
+%% Layout %
+%% %
+%%%%%%%%%%%%
+
+%% -----------------------------------------------------
+%% passing the option 'showframe' to the package permits
+%% to see the page margins: that may be useful for debug
+%% -----------------------------------------------------
+\RequirePackage[
+ paperwidth=210mm,
+ paperheight=297mm,
+ textwidth=495pt,
+ vmargin=1.5cm,
+ columnsep=18pt
+]{geometry}
+
+%%%%%%%%%%%%%%%%%%%%%%
+%% %
+%% Header and footer %
+%% %
+%%%%%%%%%%%%%%%%%%%%%%
+
+\renewcommand{\headrulewidth}{0.0pt}
+
+\fancyhf{}
+
+\DeclareRobustCommand{\mycfoot}[1]{%
+ \cfoot{\color{myheadingscolor}{{\sffamily\tiny{#1}}}}%
+}
+
+\pagestyle{fancy}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%
+%% %
+%% Hyperref and colours %
+%% %
+%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%% ------------------------------------------
+%% setup colours for links, text and headings
+%% ------------------------------------------
+\definecolor{mylinkcolour}{HTML}{0000FF} % {FF0080} %light purple link for the email
+\definecolor{myshadecolor}{HTML}{F0F0F0} % {E4E3E3}%{D4D7FE} %light blue shade
+\definecolor{mytextcolor}{HTML}{2b2b2b} % text is almost black
+\definecolor{myheadingscolor}{HTML}{701112} % dark red
+
+%% ----------------------
+%% setup hyperref package
+%% ----------------------
+\hypersetup{%
+ colorlinks,breaklinks,%
+ urlcolor=mylinkcolour,%
+ linkcolor=mylinkcolour,%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% %
+%% Section title format and spacing %
+%% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\DeclareDocumentCommand{\mysectionTitleFormat}%
+ {O{myheadingscolor} O{myheadingscolor}}%
+{%
+ \titleformat{\section}%
+ {\bigskip\color{#1}\titlerule\scshape\Large\raggedright}%
+ {}{0em}{}[\color{#2}\titlerule\medskip]
+}
+
+\DeclareDocumentCommand{\mysectionTitleSpacing}%
+ {O{0pt} O{0pt} O{5pt}}%
+{%
+ \titlespacing{\section}{#1}{#2}{#3}%
+}
+
+\mysectionTitleFormat
+\mysectionTitleSpacing
+
+%%%%%%%%%%%%%%%%%%%%
+%% %
+%% Customized list %
+%% %
+%%%%%%%%%%%%%%%%%%%%
+
+\newenvironment{myitemize}%
+ {\renewcommand{\labelitemi}{\ding{43}}\begin{itemize}}%
+ {\end{itemize}}
+
+%%%%%%%%%%%%%%%%
+%% %
+%% Other stuff %
+%% %
+%%%%%%%%%%%%%%%%
+
+%% --------------------------------
+%% set text color for the whole doc
+%% --------------------------------
+\color{mytextcolor}
+% \iffalse
+%</mycv-style.sty>
+% \fi
+%
+%
+% \iffalse
+%<*mycv-split-contents.pl>
+% \fi
+#!/usr/bin/perl
+
+# -------------------------------------------------------
+# Copyright 2012 Ghersi Andrea (ghanhawk@gmail.com).
+#
+# This work may be distributed and/or modified under the
+# conditions of the LaTeX Project Public License version
+# 1.3c, available at 'http://www.latex-project.org/lppl'.
+# -------------------------------------------------------
+
+# $Id: mycv_split_contents.pl 89 2012-05-19 18:23:03Z ghangenit $
+
+use Getopt::Long;
+use File::Path;
+use warnings;
+use strict;
+use Cwd;
+
+# hashes with errors and warnings messages
+
+my %errors = (
+ OME => "$0: ERROR opening <%s> in output mode (CWD: %s): %s\n",
+ IME => "$0: ERROR opening <%s> in input mode (CWD: %s): %s\n",
+ NIF => "$0: ERROR: no input file provided!\nUse the option <-i infile>.\n",
+ NOD => "$0: ERROR: no output dir. provided!\nUse the option <-o outdir>.\n",
+ IOE => "$0: ERROR: input file and output dir are the same!\n"
+);
+
+my %warnings = (
+ NVC => "WARNING:: <%s> is not recognized as a valid component!\n" .
+ "A component can only be 'header', 'body' or 'footer'.\n"
+);
+
+my $outdir = 'Contents'; # default output dir
+my $infile = 'cv_contents.tex'; # default input file
+my $cwd = getcwd(); # current directory
+my %opt = (); # hash for options
+
+
+###
+###
+
+sub _usage()
+{
+ print STDERR << "EOF";
+
+ Usage: $0 [-h] [-e] [-i infile] [-o outdir] [-m modelfile]
+ Version <1.0>
+
+ Options:
+ ========
+
+ -o outdir \t : uses <outdir> as output dir {default: 'Contents'}
+ -m mdlfile \t : writes basic model directives to the <mdlfile> file
+ -i infile \t : uses <infile> as input file {default: 'cv_contents.tex'}
+ -e \t : keeps file names extension in model directives
+ -h \t : this help message
+
+ Examples:
+ =========
+
+ 1) Splits the input file 'cv_contents.tex' into multiple files (they
+ will be created in the directory 'Contents'), as specified in the
+ file itself - the input file is not modified:
+
+ [$0 -i cv_contents.tex]
+
+ 2) As above but, in addiction, a basic model file (model-spl.tex) for
+ multiple files is created (in the model directives, the file names
+ extension will be removed):
+
+ [$0 -i cv_contents.tex -m model-spl.tex]
+
+ 3) As above, but file names in the model directives will keep their
+ own extension:
+
+ [$0 -i cv_contents.tex -m model-spl.tex -e]
+
+EOF
+ exit 0;
+}
+
+
+###
+###
+
+sub mcdie { printf STDERR @_, $!; exit 1; }
+
+
+###
+###
+
+sub processCommandLine()
+{
+ GetOptions (
+ 'o=s' => \$opt{o}, 'i=s' => \$opt{i},
+ 'm=s' => \$opt{m}, 'h' => \$opt{h},
+ 'e' => \$opt{e}
+ ) or _usage();
+
+ $opt{h} and _usage();
+ _usage() if ( $#ARGV > -1 );
+
+ _dealWithInOutFiles();
+ return \%opt;
+}
+
+
+###
+###
+
+sub _dealWithInOutFiles
+{
+ $opt{o} and $outdir = $opt{o};
+ $opt{i} and $infile = $opt{i};
+
+ if ( $infile eq "" ){ die $errors{NIF} }
+ if ( $outdir eq "" ){ die $errors{NOD} }
+ if ( $infile eq $outdir ){ die $errors{IOE} }
+
+ $opt{outdir} = $outdir;
+ $opt{infile} = $infile;
+}
+
+
+###
+###
+
+sub fileprocess ($)
+{
+ my $cmdoptions = shift;
+ my $outdir = $cmdoptions->{'outdir'};
+ my $linehook = '###';
+ my %components;
+ my $sep = '::';
+
+ open INFILE, $cmdoptions->{'infile'} or
+ mcdie( $errors{IME}, $cmdoptions->{'infile'}, $cwd );
+
+ mkpath($outdir);
+ (-d $outdir) or mcdie( $errors{OME}, $outdir, $cwd );
+
+ while ( my $line = <INFILE> )
+ {
+ my @info; my $ctype='';
+ if ( $line =~ /$linehook/ )
+ {
+ PROCESSLINE:
+ @info = split(/$sep/, $line);
+
+ $ctype=$info[2]; # contains the component type (header,...)
+ chomp($ctype);
+
+ if ( $info[2] )
+ {
+ if ( $ctype =~ /header/ ) { push (@{$components{h}}, $line) }
+ elsif ( $ctype =~ /body/ ){ push (@{$components{b}}, $line) }
+ elsif ( $ctype =~ /footer/ ){ push (@{$components{f}}, $line) }
+ else { printf STDERR $warnings{NVC}, $ctype }
+ }
+
+ if ( $info[1] ) # contains the file name to write
+ {
+ open OUTFILE, '>', "$outdir/$info[1]" or
+ mcdie( $errors{OME}, $info[1], $cwd );
+
+ while ( $line = <INFILE> )
+ {
+ if ( $line =~ /$linehook/ )
+ {
+ close OUTFILE;
+ goto PROCESSLINE;
+ }
+ else { print OUTFILE $line } # write to file
+ }
+ }
+ }
+ }
+
+ close INFILE;
+ if ( $cmdoptions->{'m'} )
+ {
+ open OUTFILE, '>', $cmdoptions->{'m'} or
+ mcdie( $errors{OME}, $cmdoptions->{'m'}, $cwd );
+
+ for my $key ( keys %components )
+ {
+ if ( $key eq "b" ) { print OUTFILE "\\def\\bodylayoutlist{%\n" }
+ elsif ( $key eq "h" ) { print OUTFILE "\\def\\headerlayoutlist{%\n" }
+ elsif ( $key eq "f" ) { print OUTFILE "\\def\\footerlayoutlist{%\n" }
+
+ my @info; my $cnt=0; my $fname='';
+ while ( $components{$key}[$cnt] )
+ {
+ @info = split(/$sep/, $components{$key}[$cnt]);
+ $cnt++;
+
+ $fname=$info[1];
+ if ( !$cmdoptions->{'e'} ){ $fname =~ s{\.[^.]+$}{} }
+ if ( $info[1] ){ chomp($fname); print OUTFILE " $fname@" }
+ if ( $info[3] ){ chomp($info[3]); print OUTFILE ":$info[3]" }
+ print OUTFILE ",\n";
+ }
+ print OUTFILE "}\n";
+ }
+ close OUTFILE;
+ }
+}
+
+
+##
+## MAIN
+##
+
+fileprocess( processCommandLine() );
+% \iffalse
+%</mycv-split-contents.pl>
+% \fi
+%
+% \Finale
+\endinput