如何写一个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 ...
随机推荐
- Lucene TF-IDF 相关性算分公式
转自: http://lutaf.com/210.htm Lucene在进行关键词查询的时候,默认用TF-IDF算法来计算关键词和文档的相关性,用这个数据排序 TF:词频,IDF:逆向文档频率,TF- ...
- Sqoop-问题
1.权限问题 // :: INFO mapreduce.Job: Job job_1555064328415_0328 failed with state FAILED due to: Job set ...
- 【GAN】GAN的原理及推导
把GAN的论文看完了, 也确实蛮厉害的懒得写笔记了,转一些较好的笔记,前面先贴一些 原论文里推理部分,进行备忘. GAN的解释 算法流程 GAN的理论推理 转自:https://zhuanlan.zh ...
- kubernetes dashboard 二次开发
Kubernetes Dashboard 二次开发 官方源码:https://github.com/kubernetes/dashboard 开发文档:https://github.com/kuber ...
- Sql索引
1.为什么要给表加上主键?建表的时候都会为表加上主键, 在某些关系数据库中, 如果建表时不指定主键,数据库会拒绝建表的语句执行. 一个没加主键的表,并不能被称之为「表」.一个没加主键的表,它的数据无序 ...
- LM3S之boot loader学习笔记-2
LM3S之boot loader学习笔记-2 彭会锋 () 上一篇中介绍了bootloader的基础知识,对于bootloader的作用和如何编写bootloader也有了大概的了解了,这一篇主要讲解 ...
- Python之坐标轴刻度细化、坐标轴设置、标题图例添加
学习python中matplotlib绘图设置坐标轴刻度.文本 http://www.jb51.net/article/134638.htm Python绘图 https://www.cnblogs. ...
- mysql中一个字段根据另一字段的值分割为不同列
1.数据结构如下: vehicleId mileage_type mileage 11AM6897 0 120 11AM6897 1 60 13AY9180 0 ...
- Log4j详细设置说明
1. 动态的改变记录级别和策略,即修改log4j.properties,不需要重启Web应用,这需要在web.xml中设置一下.2. 把log文件定在 /WEB-INF/logs/ 而不需要写绝对路径 ...
- 三重Des对称加密在Android、Ios 和Java 平台的实现
引言 如今手机app五彩缤纷,确保手机用户的数据安全是开发人员必须掌握的技巧,下面通过实例介绍DES在android.ios.java平台的使用方法: DES加密是目前最常用的对称加密方式, ...