使用 ShareLatex 简历模板编译中文简历:小白教程与体验分享

admin 2024-07-19 416 0

一、概述

本文记录了使用ShareLatex上的简历模板编写自己的中文简历的经历。ShareLatex是一个非常高效的在线Latex编辑网站,与OverLeaf合并后,用户可以非常方便地使用该网站创建各种项目。简历(Résumé-CV)只是其中的一部分,如果以后需要使用其他功能,可以进一步了解。

由于之前没有使用过Latex的经验,所以本文算是一篇“新手”教程:也就是从零开始弄一个适合自己的简历模板。其实读完本文,大家应该都有能力自己编一些简单的简历模板了。这里的简单可以理解为“纯文本”,不包括进度条或者图标等相对复杂的功能。擅长Latex的大神们别笑我哦~

以下是 ShareLatex 网站的一些概述:

图 1. ShareLatex 上有很多简历模板可供参考

2. 如何使用中文?

这里就不介绍相关的编写细节了。因为很多和我一样打开这个网站的朋友都是为了寻找一个合适又独特的简历模板。大家第一个问题肯定是:如何在ShareLatex上编辑中文?这里我就给大家说说我自己的解决方案。

之前在网上搜索过很多解决办法,但可能是因为打开方式不对,所以一直没解决。第一次用ShareLatex上的简历,是直接下载简历模板,用PDFelement编辑的。但直接编辑PDF还是比较痛苦的,至少行距和字体两个问题就够我烦的了。更别说有时候还会出现莫名其妙的乱码。所以,哪怕先在线编辑文本,然后留下一些格式化的工作通过离线编辑来完成,也不失为一种解决问题的方法。

首先,我的灵感来自于一篇豆瓣帖子

图 2. 解决方案来源

我试了一下,确实有效。只需要点击左上角的Menu,将下面的Compiler选项改为XeLaTex,然后改一下源代码前的两行代码:

%首先加一行:
\usepackage{ctex}
%然后找到documentclass,把中括号里面的类型改成UTF8
%\documentclass[letterpaper]{twentysecondcv} % a4paper for A4
\documentclass[UTF8]{twentysecondcv} 

[更新] 注意这里的第二个更改是可选的。只需添加 ctex 包即可。但是,一个选项是将 letterpaper 更改为 a4paper,否则编译后的 PDF 将不是标准的 A4 纸张大小。

这样就可以编译中文了。如果你只需要将一份简单的简历上的英文描述改成中文,那么完成这一步你的任务就完成了一半!如果你想了解整个 ctex 是如何工作的,请继续阅读。

3.让我们更深入一点——从一个简单的例子开始:

首先打开一个简单的例子:在 Overleaf 平台上使用 CTEX(如果你还没有注册,可能需要先注册),然后点击 Open as Template。进入之后可以在左侧看到源代码,在右侧看到对应的编译结果,也就是当前的 PDF 状态。这个模板基本没有什么复杂的结构,除了由 \begin{itemize}----\end{itemize} 组成的几个文本块,以及其所包含的几个 item。这是很常见的用法。在 PDF 中我们可能会遇到各种各样的代码块,有的很简单,比如上面说的基本用法,有的则稍微复杂一些:大括号里的 itemize 和块中的 \item 可能会被用户定义的模块替换,但一般都符合这个结构。另外 \item 的用法也比较简单,在块中使用 item 可以自动缩进,并在句首生成‘·’标记。

图 3. 开始-结束结构可视为文本块

至于其他夹杂在文本中的看似复杂的语法,比如\textsf、'\ttfamily等,大多都是用来指定文本格式的。比如加粗、斜体等。我们回到上面的代码,这里的代码除了\documentclass等固定语法外,就是一些类似于导入第三方库的\usepackage或者\RequiredPackage语句,用到的时候直接添加就行,暂时不用管。

相信你已经学会了编写简单的 Latex 文本,并尝试使用不同的字体和简单的强调符号将文本组织成段落。但是,如果你对一些更“花哨”的简历模板感兴趣,你可能会发现其中许多模板往往对应多个 tex 文件。例如,下面的 twentysecondcv 模板有一个非常重要的 cls 文件。请参考第 4 部分

4. 简历模板深度修改

现在我们打开一个更复杂,更有代表性的latex项目:twentysecondscv。这个好像是一个比较有名的简历模板。

图 4. 二十秒简历模板

上面提到了,当你打开这个项目的时候,你会发现除了 template.tex 之外,还有一个 cls 文件。这个 cls 文件感觉很像一个 cpp 的头文件,后面会讲到。当你打开 .tex 文件的时候,你会发现里面的内容很简单,基本上简历上直接就能找到。然后你按照第 2 步介绍的方法进行修改。当你尝试将英文改成中文的时候,你会发现一些问题:

我在这里卡了一阵子,因为在template.tex文件中,ctrl+f确实能找到不少带有“skills”这个关键字的命令。既然不懂Latex语法,可能跟我一样随便找个地方,替换成自己想要的标题,然后开始编译就行了。这是理所当然的做法,但是试了几次之后,还是不行。我开始怀疑这里的标题是不是在“头文件”中定义的?(因为潜意识里觉得.tex文件类似主程序,.cls文件类似头文件,头文件应该定义和用户交互的界面;但是标题内容在形式上看起来就像和用户交互的内容)。打开头文件搜索之后,发现“skills”这个关键字还比较多……不过一个很明显的规律是,About Me模块和Skill模块应该是两个组织方式相同的模块。简单尝试之后,我找到了直接对应标题文字的部分——\profilesection{}括号内的内容。 至于其他出现多次的关键字,我们不用改,直接用就可以了。这里的 skills 和 aboutme 看起来有点像函数名。可以观察一下这两个模块:

图5. aboutme模块和skill模块

如上图,我把两个模块的标题都改了,下面是两个子模块的profilesection,它们的属性定义在63行左右,请特别注意代码段开头的ifthenelse语句:我们先来看一个介绍:

图 6. Ifthenelse 和 Latex 中的比较

这个例子有点复杂,还涉及到一些其他的知识。\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 部分设置名称和对应的浮点值)。

图 6. 技能模块中定义的滑动条

其他一些子模块如\twentyitem定义了一些格式输出,例如图4中出版物中的每一行都是一个twentyitem。

看来这个项目(或者说大多数简历模板)的组织方式是先在 cls 文件中定义一些大模块(比如 profilepic、aboutme)和小模块(skills、twentyitem)。然后在主程序 tex 文件中,先调用大模块名构建组件,然后在各个组件中再使用小模块添加具体的内容。

5.修改外观

这部分相对不重要,主要对简历模板的外观做一些修改,比如颜色、图标等。

5.1 主题颜色

找到 \definecolor 部分,这里定义了很多颜色,可以在最后一个括号里修改颜色,颜色和 HTML 值的具体对应关系可以在这里找到。

图 7. HTML 中的颜色对应表

5.2 图标

一些简单的个人信息可以用图标的形式展示出来,fontawesome和marvosym包中定义了很多图标,使用起来非常方便。在twentysecondCV中,修改图标只需要在下面的语句中更改每个图标后面的内容即可。然后在.tex文件中修改对应的文本即可。

图7. 修改后的图标位置

效果如下图所示:

图 8. 自定义您自己的图标

非常感谢你的阅读! VI. 参考文献