现在的位置: 首页 > 综合 > 正文

利用moderncv自定制简历样式

2014年02月24日 ⁄ 综合 ⁄ 共 2903字 ⁄ 字号 评论关闭

最近想用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编辑简历。

抱歉!评论已关闭.