moderncv 的笔记(支持中文)

大多数人的 CV 都是使用 Microsoft Word 之类的所见即所得的软件制作的。但作为一个 TeXer,CV 显然得用 TeX 制作。TeX 中有很多文档类、宏包可以用来制作 CV(另见 Writing the curriculum vitae with LaTeX);但我一直钟情于 moderncv 文档类。

六年前,看到 moderncv 文档类的第一眼,我就完全被她吸引了,简洁又不失华丽。打那之后,自用的同时,一直竭力向身边的朋友推荐。

第一个接受我推荐的是一个师弟。那还是在五年前,我用 moderncv 文档类给他写中文 CV。当时比较流行的中文处理方法还是 CJK 宏包,而 moderncv 与 CJK 在兼容性方面有一些 bug;这也导致当时写得很辛苦。第二个接受我推荐的是一个哥们。因为是英文 CV,所以处理起来相当方便。之后接受我推荐的人越来越多,但我基本再未捉刀代笔过了。

去年,出于找工作的目的,我使用 moderncv 制作了自己的 CV;中间或多或少遇到了一些麻烦,但最后都处理得不错。身边的一些伸手党看到之后,也想使用;由于 moderncv 文档类没有说明文档,也希望我能简单描述一下如何使用。

moderncv 最早发布于 2006 年 03 月 01 日,当前最新版本为 version 1.3.0 version 1.5.1 version 2.0.0,发布于 2013 年 02 月 09 日 2013 年 04 月 29 日 2015 年 07 月 28 日。

安装

对于 MiKTeXTeX Live 完全安装的同学,moderncv 已经安装好了;不是完全安装的,请通过相关组件检查并安装;对于其它 TeX 发行版,请自行检查。当然,手动安装也是可以的,可以在 CTAN 下载,放入对应目录,并刷新 FNDB。

使用

下面我将结合 moderncv 文档类中自带的 template.tex 文件来具体分析下如果快速上手。另外,对于需要制作中文 CV 的朋友,可能会对 template-zh.tex 感兴趣,我劝您最好别看它,里面使用的 CJK 那个古董早该退出历史舞台了。

设置文档类

\documentclass[10pt,a4paper,roman]{moderncv}

  • 10pt 是字体大小,其余可选项有 11pt、12pt。字体的大小总该懂吧;也就三个选择,不明白的每个都去试一下。
  • a4paper 是纸张大小,其余可选项有 letterpaper(美洲常用标准,比 A4 短、宽)、a5paper、legalpaper(美洲常用标准,比 A4 长、宽)、executivepaper(比 A4 短、窄)、landscape(横向);需要的话请移步维基百科相关页面
  • roman 是字体族,其余可选项有 sans,分别代表衬线字体、无衬线字体。我总觉得字体族默认选择 sans 有些不妥,毕竟整个 CV,文字可能很多,全部使用无衬线字体很影响阅读。
设置 CV 样式

% moderncv themes
\moderncvstyle{classic}
\moderncvcolor{blue}
%\renewcommand{\familydefault}{\sfdefault}
%\nopagenumbers{}

  • classic 是整体样式,其余可选项有 casual、oldstyle、banking、empty。具体的样子可以参见 moderncv 宏包中的例子。个人比较喜欢 classic,尤其喜欢每个 Section 前的短横线;当然 banking 样式下个人信息的排版很不错。
  • blue 是颜色样式,其余可选项有 orange、green、red、purple、grey、black、burgundy(2.0.0 新增加的颜色)。具体的样子可以参见 moderncv 宏包中的例子。要严肃的话推荐 black,其余随意。
  • 第三行代码用来选择默认字体,我一般把它注释掉。由于现在有了 XeTeX 等强大的引擎,可以用 fontspec 直接加载西文字体,当然,前提是你得有字体的 otf 或者 ttf 等文件。我一般喜好使用衬线字体 Minion Pro 配合无衬线字体 Myriad Pro,待会我会提到如何使用新的字体。
  • 最后一行代码用来控制是否显示页码。CV 超过一页的话,建议显示页码,即注释掉这个代码。当然,我已经习惯自己定义页眉页脚,也不需要这个选项了。
设置编码方式

% character encoding
%\usepackage[utf8]{inputenc}
%\usepackage{CJKutf8}

  • 因为会使用 XeTeX 引擎,代码最好是 UTF-8 字符,因此指定 inputenc 参数完全是多余的,第一行代码直接注释掉。
  • 处理中文可以直接使用 XeTeX + fontspec + xeCJK,所以这行代码完全多余,直接注释掉。
调整页面边距

% adjust the page margins
\usepackage[scale=0.75]{geometry}
%\setlength{\hintscolumnwidth}{3cm}
%\setlength{\makecvtitlenamewidth}{10cm}

  • TeX 用户应该都知道大名鼎鼎的 geometry 宏包吧,在此不再赘述。
  • 修改“显示时间的列的宽度”;直观点说,如果使用的是 classic 样式,那么调整的就是 Section 前面的短横线的长度。一般不作修改,注释掉。
  • 有的时候姓名比较长,使用 classic 样式的时候,因为要在右上角显示个人信息,可能姓名会出现换行的情况。第三行代码可以设置姓名所占空间的宽度。一般不作修改,注释掉。
多语言环境设置

\usepackage{fontspec}
\usepackage{xunicode}
\usepackage{xeCJK}
\setmainfont{Minion Pro}
\setsansfont{Myriad Pro}
\setmonofont{Courier New}
\setCJKmainfont{SimSun}
\setCJKsansfont{KaiTi}
\setCJKmonofont{SimHei}
%\setCJKmathfont{}

  • 第一行代码中的 fontspec 宏包用来处理加载一般西文字体。第二行代码中的 xunicode 宏包用来指明代码是 unicode 编码。其实这两个宏包可以用 xltxtra 代替。
  • 第三行代码中的 xeCJK 宏包用来处理加载中文字体。
  • 第四、五、六行代码分别用来设置西文字体的正文衬线族、正文无衬线族、正文等宽族。第七、八、九行代码分别用来设置中文字体的正文衬线族、正文无衬线族、正文等宽族。最后一行用来设置数学公式中的中文字体族。xeCJK 宏包功能很强大,可参见其说明文档。
  • 有了上述设置,可以随便写中文了。
个人信息设置

% personal data
\name{John}{Doe}
\title{Resumé title} % optional
\address{street and number}{postcode city}{country}% optional
\phone[mobile]{+1~(234)~567~890} % optional
\phone[fixed]{+2~(345)~678~901} % optional
\phone[fax]{+3~(456)~789~012} % optional
\email{john@doe.org} % optional
\homepage{www.johndoe.com} % optional
\social[linkedin]{john.doe} % optional
\social[twitter]{jdoe} % optional
\social[github]{jdoe} % optional
\extrainfo{additional information} % optional
\photo[64pt][0.4pt]{picture} % optional
\quote{Some quote} % optional

  • 姓名较长,使用 classic 样式的时候,可能需要调整姓名所占的空间的宽度。
  • \address 改进了,之前只能填写 2 行地址,现在最多可以 3 行,灵活了不少。
  • 有的时候在个人信息里需要放两个 E-mail 地址、两个电话等等,实现办法可以参考这里这里
  • 我在使用 \homepage 的时候遇到了一个与 hyperref 宏包相关的 bug。我之前的个人主页中有字符"~",直接输入

     

    \homepage{graduate.math.nus.edu.sg/~g0800878/}

    输出的 PDF 文件中看不到"~"。如果输入

    \homepage{graduate.math.nus.edu.sg/\textasciitilde g0800878/}

    输出的 PDF 文件中可以看见"~"了;但同时出现了另一个问题,在 PDF 文件中点击 homepage 这个链接,Adobe Acrobat 9.5 Pro 直接报错

    The Web Capture operation you have requested has failed because of an error

    最后我用了一个“野蛮”的办法绕过去了,直接在 \extrainfo 中输入

    \extrainfo{\homepagesymbol http://graduate.math.nus.edu.sg/\textasciitilde g0800878/}

    以上的问题可以按照下面的方法解决,在“moderncv.cls”文件中删除“baseurl=http://,”,或者在导言区的末尾加上

    \AfterPreamble{\hypersetup{baseurl={}}}

    感谢 Xi Zhang 提供解决办法。

  • 一般每份 CV 都需要注明更新时间,我一般直接借用 \quote 来实现。

     

    {\footnotesize Last updated: \today}

  • 有的同学可能需要更多的组件,比如 Linkedin 的信息等,实现办法可以参考这里
列表样式

关于这个,我真不用多费口舌了,直接在 template 上修改就好了,一边用一边就会了。

编译

  • 如果仅使用英文,保证 TeX 系统是最新的,然后直接编译即可,PDFLaTeX、XeLaTeX 都可以。
  • 如果有使用中文,保证 TeX 系统是最新的同时,还需要:保证 XeTeX 版本高于 0.9995.0 (2009 年 06 月 29 日)的版本;安装有 l3kernel 宏包和 l3packages 宏包;安装有 fontspec 宏包和 xeCJK 宏包;安装有想用的字体。一切都搞定之后使用 XeLaTeX 编译即可。

一些特殊要求的实现

  • 修改链接的颜色:在导言区加入

     

    \AtBeginDocument{ \hypersetup{colorlinks,urlcolor=red} }

    具体可以参考这里

最后是个伸手党的福利——我自己 CV 的 tex 源文件

欢迎 E-mail 与我联系,欢迎批评指正。

以上,2013 年 02 月 17 日。2015 年 09 月 18 日更新。

16 thoughts on “moderncv 的笔记(支持中文)

  1. Pingback: LaTeX技巧739:moderncv笔记 | LaTeX工作室

  2. Ziwei Wang

    Hello Professor Sun,

     

    There might be a typo in your moderncv notes.

    –"我总觉得字体族默认选择 sans 有些不妥,毕竟整个 CV,文字可能很多,全部使用衬线字体很影响阅读。"

    You may prefer to say "全部使用无衬线字体很影响阅读".

    Thank you again for sharing.

     

    Best,

    Ziwei

    Reply
  3. Pingback: 用Latex写中英文简历,CV | ZHANG RONG

    1. X. Sun Post author

      很抱歉,现在才看到。我不是很清楚你的意思,如果可以请 email 给我你的 tex 文件以及生成的 pdf 文件。

      Reply
        1. X. Sun Post author

          在 \makecvtitle 之后加上这句命令 \vspace*{-90pt},其中的 -90pt 可以自己调整。

          Reply
  4. free

    font minion pro not found

    下了一个minion.ttf,不知道放哪里,而且放了之后好像还有map之类的。。网上东西太乱太杂,不知道该怎么解决

    Reply
  5. 秦慧慧

    写得非常清楚,请问是否有关于该模板下的cls,sty等文件是缺一不可吗?即使有这些文件,也显示编辑错误。不知道是否可以通过编译cls,sty等文件更改?谢谢

    Reply
  6. Pingback: Linux下的经典软件 – Blog for xiaoshuilan 10001

  7. Min

    老师您好!想尝试写moderncv模板的简历,发现老师您CV的Tex源文件的链接失效了,可否抽空更新一下呢?感谢!

    Reply
  8. Pingback: Linux下的经典软件(史上最全) - 算法网

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.