% \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