利用moderncv自定制简历样式

来源:互联网 发布:js中定义数组 编辑:程序博客网 时间:2024/05/01 01:04

最近想用mordencv做个中文latex简历,moderncv本来是个英文的模板,网上可以找到很多让其支持中文的方法(见“1. 让moderncv模板支持中文”)。

不过后来发现英文版的简历上方会有大量的留白,改成中文后看起来很不紧凑,网上搜了半天也没有个统一的解决方法。于是自己研究了一下模板代码,找到了一些修改模板样式的方式,简单总结(见“2. 修改moderncv模板样式”)。(注:时间仓促,以下不详述具体细节,只介绍方法)

1. 让moderncv模板支持中文

本部分内容是参考网上的方法,由于很多是普遍通用的,因此不引用出处)

1)将mordencv.cls中的

% hyperrefs\RequirePackage{url}\ifpdf  \RequirePackage[pdftex,]{hyperref}\else  \RequirePackage[dvips]{hyperref}\fi
修改为

\RequirePackage{ifxetex}\ifpdf  \RequirePackage[pdftex,]{hyperref}\else\ifxetex  \RequirePackage[xetex]{hyperref}    \else    \RequirePackage[dvips]{hyperref}    \fi
2)在.tex文件中加入中文字体的设置,比如

\usepackage[slantfont,boldfont,CJKnumber,CJKtextspaces]{xeCJK}\setCJKmainfont[BoldFont={SimHei}, ItalicFont={KaiTi}]{SimSun}\setCJKsansfont{KaiTi}\setCJKmonofont{STFangsong}
3)编译时使用xelatex命令

2. 修改moderncv模板样式

moderncv模板主要包括三部分:moderncv.cls文件、.sty文件和.tex文件,分别负责不同的功能。

1)moderncv.cls文件。主要定义了一些structure command,例如firstname和lastname:

\newcommand*{\firstname}[1]{\def\@firstname{#1}}\newcommand*{\familyname}[1]{\def\@familyname{#1}}
这些command被进一步在.sty文件中声明和定义了其在整个页面中出现的位置,然后就可以在.tex文件中对其引用。我们也可以模仿这种样式自定义自己所需要的command->在.sty文件中定义其位置->在.tex文件中引用,最终让其最终出现在简历页面中。

2).sty文件。包括两种:moderncvthemeclassic.sty和moderncvthemecasual.sty,分别对应不同的模板样式(主要是简历头部样式),在.tex文件中可以通过\moderncvtheme[blue]{classic} 声明使用哪种样式(包括模板的颜色)。我们要解决的问题是将简历头部变紧凑,而头部结构的定义出现在.sty文件中的这一部分:

\renewcommand*{\maketitle}{%  % name and title  \begin{minipage}[b]{\maketitlenamewidth}%    \firstnamestyle{\@firstname~}\familynamestyle{\@familyname}%    \ifthenelse{\equal{\@title}{}}{}{\\[1.25em]\titlestyle{\@title}}%  \end{minipage}%  % optional data  \begin{minipage}[b]{\maketitledetailswidth}%    \raggedleft\addressfont\color{addresscolor}%    \ifthenelse{\isundefined{\@addressstreet}}{}{%      \maketitledetailsnewline%      \addresssymbol~\@addressstreet%      \ifthenelse{\isundefined{\@addresscity}}{}{\\\@addresscity}}%    \ifthenelse{\isundefined{\@mobile}}{}{\maketitledetailsnewline\mobilesymbol~\@mobile}%    \ifthenelse{\isundefined{\@phone}}{}{\maketitledetailsnewline\phonesymbol~\@phone}%    \ifthenelse{\isundefined{\@fax}}{}{\maketitledetailsnewline\faxsymbol~\@fax}%    \ifthenelse{\isundefined{\@email}}{}{\maketitledetailsnewline\emailsymbol~\emaillink{\@email}}%    \ifthenelse{\isundefined{\@extrainfo}}{}{\maketitledetailsnewline\@extrainfo}%  \end{minipage}%  % optional photo  \ifthenelse{\isundefined{\@photo}}%    {}%    {\hspace*{\separatorcolumnwidth}\color{firstnamecolor}\framebox{\includegraphics[width=\maketitlepicturewidth]{\@photo}}}\\[3em]%  % optional quote  \ifthenelse{\isundefined{\@quote}}%    {}%    {\centering{\begin{minipage}{\quotewidth}\centering\quotestyle{\@quote}\end{minipage}}\\[2.5em]}%  }

其中定义了头像位置、联系方式等信息,可以轻松改变这些排版模式(如果懂latex命令的话,minipage是一个很好用的工具~)。需要注意的是这里一些长度字段的定义,比如\,maketitlepicturewidth,本质上都是一些变量,变量值要么引用了其他地方的长度声明,要么就是简单的赋值。一般可以从.sty文件的起始部分找到这些变量的声明和赋值,比如:

\newlength{\maketitlepicturewidth}//声明\setlength{\maketitlepicturewidth}{\@photowidth}//应用.tex文件中的长度声明
3).tex文件。主文件,基于上述对.cls和.sty两个文件的设置,我们可以方便的在该文件中引用structure command编辑简历。



原创粉丝点击