一、概述
本文记录了一次使用ShareLatex
上的简历模板来编译自己的中文简历的体验过程。ShareLatex是一款非常高效的在线Latex编辑网站,其和OverLeaf合并之后,用户可以非常方便地使用该网站创建各种项目。简历(Résumé-CV)只是其中的一个部分。以后如果需要用到其他功能,可能还会进一步了解。
由于本人之前没有使用Latex的经验,因此本文可以算作一个“小白”教程:即从零开始获取一份适合自己的简历模板。其实看了本文之后,大家应该就已经具备自己编译一些简单的简历模板的能力。这里的简单可以理解为“plain text”,不包括相对复杂的功能如progress bar
或者图标等等。擅长Latex的大神请不要嘲笑~
下面是ShareLatex网站的一些概览:
二、如何使用中文?
这里先不介绍相关的编译细节。因为很多和我一样打开这个网站的朋友都是为了寻找一份合适而且独特的简历模板。大家的首要问题肯定是:如何在ShareLatex上编辑中文? 这里我先给出一个自己的解决方法。
之前在网上也找了不少解决方案,可能是打开方式不对吧,一直也没解决。第一次使用ShareLatex上的简历时,是直接把简历模板下载下来然后用PDFelement
在上面编辑的。然而直接编辑PDF是一件相当痛苦的事情,至少行距和字体这两个问题就够困扰了。更别说有时候还会出现莫名其妙的乱码。因此即便是先在线编辑好文字,然后留一些格式上的工作通过离线编辑来完成,也不失为一种解决问题的方法。
首先我的启示来源于一个豆瓣的帖子
试了下,果然很有效。只需要点击左上角的Menue
,然后将下面Compiler
选项改为XeLaTex
,然后在源代码前面改动两行代码:
%首先加一行:
\usepackage{ctex}
%然后找到documentclass,把中括号里面的类型改成UTF8
%\documentclass[letterpaper]{twentysecondcv} % a4paper for A4
\documentclass[UTF8]{twentysecondcv}
[Update]注意这里的第二个改动可以不做。只需要加ctex这个包就够了。不过一个选择是把letterpaper
换成a4paper
,否则编译出来的pdf不是标准A4纸的尺寸。
这样就可以编译中文字符了~ 如果你只需要在一个简单的简历上将英文改成中文描述,那么这步之后你的任务就完成一半啦!如果你想更了解整个ctex的运作方式,请继续往下看~
三、稍微深入一些——从简单的例子说起:
首先打开一个简单的例子: 在Overleaf平台上使用CTEX(没注册的可能要先注册下),然后点Open as Template
。进入之后可以看到左边是源码,右边是对应的编译结果,即当前的pdf状态。这个模板基本上没有任何复杂的结构,除了几个\begin{itemize}----\end{itemize}
构成的文本块,及其包含的几条item
。这是一种很常见的用法,在pdf中我们可能遇到各种不同的代码块,有的非常简单,比如上述的基础用法,有的稍微复杂些:大括号里面的itemize
以及块中的\item
可能会被换成用户自定义的模块,但是大体上都符合这个结构。另外\item
用法也比较简单,在一个块内用item可以自动缩进并在句首生成一个'·'标记。
至于其他看似复杂的,混杂在文字中间的语法,如\textsf
,'\ttfamily
等,大都是用来指定文字格式的。比如黑体,斜体等等。我们回到代码上方。这里的代码除了\documentclass
等固定语法,就是一些\usepackage
或者\RequiredPackage
之类的类似导入第三方库的语句,用到的时候直接添加,可以暂时不用理会。
看到这里相信大家已经足以编写一个简单的Latex文本,并且尝试使用不同的字体和简单的强调符合,来组织成段落的文字了。然而如果你感兴趣的是一些更“花哨”的简历模板,你可能会发现很多这种模板对应的工程往往不止一个tex文件。比如下面的twentysecondcv
模板就有一个非常重要的cls文件。请参考第四部分
四、深入修改简历模板
现在让我们打开一个更加复杂,也更具代表性的latex项目:twentysecondscv。这好像是一个比较有名的简历模板了
如上面所述,打开这个工程你会发现除了template.tex之外,还有一个cls文件。这个cls文件感觉上非常类似一个cpp的头文件,这点后面再说。打开.tex文件你会发现里面的内容非常非常简单,基本上都是简历上直接可以找到的。然后你按照步骤二中介绍的方法进行修改,试图把英文改为中文时,你会发现一些问题:
- 有的地方文字可以修改,但是有的地方就修改不了,你换成中文,甚至换成其他单词,再compile发现它会报错...比如上图中的
Skills
和About me
两个标题。
我当时在这里还卡了一会儿,因为在template.tex文件下ctrl+f
确实能找到一大堆带有"skills"关键词的命令,由于不了解Latex语法,你可能像我一样随便找到一个地方,把他替换成自己想要的标题,然后就开始编译。这是很自然的做法,然而尝试了好几次,都没有达到效果。我开始怀疑这个地方标题总不会是定义在“头文件”中吧?(因为潜意识里感觉.tex文件类似主程序,.cls文件类似头文件,头文件应该是定义和用户的交互接口;然而标题内容从形式上看很像是与用户的交互内容)。打开头文件之后查找了下,发现"skills"的关键词更多...不过一个明显规律就是About Me模块和Skill模块应该是两个一样的模块,具有相同的组织方式。简单的尝试了下,找到了标题文字直接对应的部分——\profilesection{}
括号中的内容。而其他出现很多次的关键词,我们并不需要改动,直接拿着使用就行,看起来这里的skills和aboutme有点类似函数名。可以观察下这两个模块:
见上图,我已经把两个模块的标题修改了。这里展示了两个子模块profilesection,其属性定义在63行附近。请特别注意代码段开头处的ifthenelse
语句:我们先看看一个介绍:
这个例子有点复杂,涉及到一些其他的知识。\string
好像是用来将latex控制流转成字符的命令,然后#1
类似索引。简单地说,如果匹配到了某个给定模式,就执行倒数第二个括号的内容;否则执行倒数第一个括号的内容。即
\ifthenelse{\equal{PATTERN}}{分支一}{分支二}
回到我们的工程,显然这里PATTERN是{\aboutme}{}}
。这句命令就很清楚了:当用户写的是\aboutme{}时,整个profilesection(研究方向模块)就不会出现在pdf中。如果用户写的是其他,如\aboutme{xxx},括号内为文字,则该profilesection会在标题下面显示出用户输入的文字(通过flushleft
命令)。
总结一下就是:ifthenelse给了我们一种非常灵活的方法来定义一个模块的接口,使我们既可以修改标题和内容,也可以干脆整个去除该模块。
第二个profilesection更高级一些,其中又嵌套了一些子模块,如\skills和\skilltext(技能条下面的一段小字,没啥用)。\scriptsize好像是个简单的属性名,不是子模块名。
skills就是定义滑动条的部分。涉及\foreach
,\draw
,\node
等多个命令,详细了解查阅相关API就行。这段代码看起来很简单,实际上功能还是很丰富的:我们可以直接在简历上随意添加、删除、重命名技能条(.tet文件中\skills部分自己设置名称和对应float值即可)。
其他一些子模块比如\twentyitem
定义了一些格式输出,比如Fig. 4.中的publications里面每一行是一个twentyitem。
这样看起来,该工程(或者大部分简历模板)的组织方式,就是先在cls文件中定义一些大的模块(如profilepic, aboutme)和小的模块(skills, twentyitem)。然后在主程序tex文件中先调用大模块名构建出部件,再在各个部件中用小的模块来添加具体内容。
五、修改外观
这一部分相对来说不那么重要,主要是对简历模板的外观,如颜色和图标等进行一些修改。
5.1 主题颜色
找到\definecolor
部分,定义了很多颜色,可以修改最后一个括号中的颜色。具体颜色和HTML数值对应关系见这里。
5.2 icon
一些简单的个人信息可以通过icon的形式展示。fontawesome以及marvosym两个package定义了很多icon,使用起来非常方便。在twentysecondCV中只需要改下面语句每一项icon后面的内容即可修改图标。然后在.tex文件上修改对应文字即可。
效果见下方:
非常感谢大家的阅读!
六、参考文献
https://www.overleaf.com/latex/examples/using-the-ctex-package-on-overleaf-zai-overleafping-tai-shang-shi-yong-ctex/gndvpvsmjcqx
https://www.douban.com/note/264288981/
https://www.overleaf.com/latex/templates/twenty-seconds-resume-slash-cv/mhyfwrmwjkbc
https://www.htmlcsscolor.com/
https://tex.stackexchange.com/questions/338657/how-to-include-socials-icons-like-github-and-linkedin-in-moderncv
更多slidebar: https://tex.stackexchange.com/questions/396615/side-bar-in-latex-20-seconds-smart-cv-template-not-extending-to-second-page