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 日更新。

13 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

Leave a Reply

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

ERROR: si-captcha.php plugin: GD image support not detected in PHP!

Contact your web host and ask them to enable GD image support for PHP.

ERROR: si-captcha.php plugin: imagepng function not detected in PHP!

Contact your web host and ask them to enable imagepng for PHP.

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