最近想用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} \fi2)在.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编辑简历。