如何写一个LaTeX类文件,并设计你自己的简历
2017/8/29 20:26:03
每个人都想要一个看起来专业的简历,内置的LaTeX模板也没有什么缺点。但是你要是想自己定制一个简历,就得像我一样。这意味着你需要根据自己的想法定制一个样式。众所周知,这挺难的。在这个系列的博文中,我希望能够指导你创造自己风格的类文件,并告诉你按照你的想法定制你自己的简历其实很简单。我们将把目光聚焦于简历样式,但是其中的方法确实通用的。
什么是类文件?
当你在你的LaTex文件里写\documentclass{article}的时候,你就引用了一个类文件article.cls。这个类文件,定义了所有像\section和\title的命令,这些命令使你的文档变得结构化。这些命令如何影响格式和页面布局,也是由它控制的。
建立你自己的类文件
定制一个文档格式最方便的方法就是将所有的格式信息放在一个私人类文件中。这样能将文章的内容和格式清楚地分开,并能方便地进行复用。请建立一个cv.tex文件,并添加如下内容:
\documentclass{my_cv}
\begin{document}
\section{Education}
\subsection{University of Nowhere}
\section{Work}
\subsection{ABC Limited.}
\end{document}
这个将尝试加载类文件my_cv.cls,但现在它还不存在。在cv.tex的同一个目录下,建立文件my_cv.cls,添加如下内容:
\LoadClass{article}
如果现在你编译你的文档,你应该会看到一切都还是默认的文章样式。
那么现在发生了什么呢?类文件需要包含很多格式信息和内部设置,以使得LaTeX正常工作,但是我们并不想人工地输入所有的东西。相反地,我们的类文件可以基于article.cls。我们使用LoadClass来引用article.cls并且加载其中定义的所有的命令和格式 。需要注意的是,我们并没有使用通常的\documentclass命令来引用article.cls,因为\documentclass仅在你的LaTeX文档的开头使用。
告诉LaTeX你的类一些事情
所有的类文件在文件的起始部分,都应该包含与下面类似的两行。现在把这些添加到my_cv.cls的顶端吧。
\NeedsTeXFormat{LaTeX2e}
\ProvideClass{my_cv}[2011/03/06 My custom CV class]
命令\NeedsTeXFormat告诉编译器这个宏包是属于LaTeX的哪个版本的。当前LaTeX的版本是LaTeX2e,几乎所有的发行版本都是用这个。
命令\ProvidesClass告诉编译器你的宏包一些信息。第一个参数应该与这个类的文件名一致,描述了这个宏包的名称。第二个参数是可选的,这个将出现在日志或者其他地方。这个描述必须以上述格式的日期开始,这个日期应该是这个宏包最近修改的日期。这将在检查是否有新的版本的时候用到。例如,如果你使用\documentclass{my_cv}[2012/01/01]的时候,由于这个日期比宏包中的日期要晚,于是一个警告会被抛出,表明这个类已经过时了。
修改section标题
标准的文章的section的标题并不适合简历,因此我们使用一些更优雅的东西代替它们。为了达到这个目的,我们重新定义\section命令,来输出一个自定义的标题。
幸运的是,有一个很棒的的宏包,叫做titlesec,提供了一个简单的方法去自定义我们的标题风格。在你的类文件中添加如下语句
\RequirePackge{titlesec}
需要注意的是,我们应该使用\RequirePackage而不是通常的\usepackage命令,因为这是在一个类文件中。即使在其他宏包使用同样的命令,\RequirePackage确保每个宏包被加载一次。
titlesec宏包提供了titleformat命令,能让我们自定义我们的section标题。在my_cv.cls的末尾添加吐下内容以自定义标题的样式:
\titleformat{\section} % Customise the \section command
{\Large\scshape\raggedright} % Make the \section headers large (\Large),
% small capitals (\scshape) and left aligned (\raggedright)
{}{0em} % Can be used to give a prefix to all sections, like 'Section ...'
{} % Can be used to insert code before the heading
[\titlerule] % Inserts a horizontal line after the heading
如果我们现在编译cv.tex,我们将看到一级标题更适合一个简历:

我们也能自定义\subsection标题:
\titleformat{\subsection}
{\large\scshape\raggedright}
{}{0em}
{}
二级标题现在也是同样的样式:

你应该尝试一些可行的格式选项进行选择:
\bf,\it—— 标题加粗或斜体\scshape—— 小型大写字母\small,\normalsize,\large,\Large,\LARGE,\huge,\Huge—— 设置字体大小\rmfamily,\sffamily,\ttfamily—— 相应地设置字体为 serifed, san serifed or typewriter
添加日期到section标题上
我们能定义一些新的命令,使得我们在section标题上添加日期。在你的类文件中添加如下内容:
\newcommand{\datedsection}[2]{%
\section[#1]{#1 \hfill #2}%
}
\newcommand{\datedsubsection}[2]{%
\subsection[#1]{#1 \hfill #2}%
}
这定义了两个新的命令\datedsection和\datedsubsection,它们有两个参数:之前的section名字和在页面右侧的日期。\hfill命令告诉LaTeX尽可能多地填充空间以使得第二个参数(#2)位于页面的右侧。修改cv.tex来使用这些命令:
\documentclass{my_cv}
\begin{document}
\section{Education}
\datedsubsection{University of Nowhere}{2004--2008}
I attended the University of Nowhere from 2004 to 2008.
\section{Work}
\datedsubsection{ABC Limited.}{2008--Now}
I have worked at ABC Limited from 2008 onwards.
\end{document}
我们的简历现在包含了日期:

总结
以上就是我们指南第一部分的全部了,但是幸好覆盖了足够多的内容让你们开始制作有用的类文件。这个简历模板看起来已经比较合理,它并没有使用很多命令,但对于其他我们能够自定义的部分,我们仅是刚刚开始。在这个指南的下面几节,我将讲述宏包的参数传递,创造一个精致的标题和如何设置通用的布局选项。
感谢你的阅读!
如何写一个LaTeX类文件,并设计你自己的简历的更多相关文章
- Java基础-继承-编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight。小车类Car是Vehicle的子类,其中包含的属性有载人数 loader。卡车类Truck是Car类的子类,其中包含的属性有载重量payload。每个 类都有构造方法和输出相关数据的方法。最后,写一个测试类来测试这些类的功 能。
#29.编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight.小车类Car是Vehicle的子类,其中包含的属性有载人数 loader.卡车类T ...
- [Vue]写一个简单的文件上传控件
这篇将介绍如何写一个简单的基于Vue+Element的文件上传控件. 控件将具有 1. 上传队列的列表,显示文件名称,大小等信息,可以显示上传进度实时刷新 2. 取消上传 使用Element的u ...
- 缓存原理,自己写一个缓存类(c#版)
.net中的MemoryCache是通过内部封装一个静态Dictionary 自己写一个缓存,来看看内部怎么实现的 public class CustomerCache : ICache { priv ...
- 29.编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight。小车类Car是Vehicle的子类,其中包含的属性有载人数 loader。卡车类Truck是Car类的子类,其中包含的属性有载重量payload。每个 类都有构造方法和输出相关数据的方法。最后,写一个测试类来测试这些类的功 能。
//Vehicle类 package d922A; public class Vehicle { private int wheels; private double weight; Vehicle( ...
- 编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight。小车类Car是Vehicle的子类,其中包含的属性有载人数 loader。卡车类Truck是Car类的子类,其中包含的属性有载重量payload。每个 类都有构造方法和输出相关数据的方法。最后,写一个测试类来测试这些类的功 能。
package car; public class Vehicle { //定义成员变量 private int wheels; private double weight; public int g ...
- 写一个操作 .ini文件的类
class IniHelp { private string iniPath; [DllImport("kernel32")] private static extern long ...
- 用python写一个简单的文件上传
用Pycharm创建一个django项目.目录如下: <!DOCTYPE html> <html lang="en"> <head> <m ...
- 根据python上下文管理,写一个在读文件内容前后自动打开关闭文件的程序
利用上下文管理实现读f文件前后自动打开关闭文件#在本目录创建f文件,内容写monkey代码如下 import contextlib #导入模块1 @contextlib.contextmanager# ...
- 随便写一个c++类
为了让代码更贴合实际项目需要,我们分别用xxx.h文件,xxx.cpp文件来包含类的定义,类的声明和类的调用部分,实验平台vs2010 mycoach.h文件 #pragma once #includ ...
随机推荐
- linux ssh认证(公钥机)配置
一.产生背景 在实际工作中,linux集群需要自动化的管理,市面上较常见的自动化运维工具诸如ansible,puppet,saltstack:轻量级的有pssh系列,这其中大多数工具使用的前提就是集群 ...
- Docker 推送镜像到 阿里Docker镜像
登录 阿里云Docker镜像 https://cr.console.aliyun.com 创建一个镜像 成功之后点击 “管理” 阿里有详细的 使用说明 PS : 注意的地方是 sudo docker ...
- CDN专业一站式解决方案
调度,弱网加速,动态防御,无限节点(重)新技术
- cocos2d-x入门三 分层设计框架
helloworld就是一个完整的框架,大致分为四个层次如下: 导演-------场景------图层-----精灵 Director-----Scene----Layer----Sprite 导演类 ...
- CentOS7下Firewall常用命令
安装它,只需 yum install firewalld 如果需要图形界面的话,则再安装 yum install firewall-config 一.介绍 防火墙守护 firewalld 服务引入了一 ...
- MVVM模式的3种command总结[2]--RelayCommand
MVVM模式的3种command总结[2]--RelayCommand RelayCommand本来是WPF下面用的一种自定义的command,主要是它用到了事件管理函数,这个SL下面是没有的.不过这 ...
- 微信小程序------联动选择器
picker 从底部弹起的滚动选择器,现支持五种选择器,通过mode来区分,分别是普通选择器,多列选择器,时间选择器,日期选择器,省市区选择器,默认是普通选择器. 先来看看效果图: 1:普通选择器 m ...
- LM3S之boot loader学习笔记-1
LM3S之boot loader学习笔记-1 彭会锋 (首先声明,此系列文章编写参考了很多资料,其中一些内容是原版内容的引用和整理,并加入了一些自己的见解,我已经尽量标明引用部分,如有未全部标注部分, ...
- java之JDBC多条语句执行
在开发过程中,有时我们需要执行多条SQL语句,那如何处理才能解决这样的问题? 1,多条语句执行错误 原因:试图用一个PreparedStatement对象,执行多次SQL操作.程序会提示一下错误: O ...
- hdu 6092 Rikka with Subset(逆向01背包+思维)
Rikka with Subset Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...