如何写一个LaTeX类文件,并设计你自己的简历

2017/8/29 20:26:03

原文地址
https://www.sharelatex.com/blog/2011/03/27/how-to-write-a-latex-class-file-and-design-your-own-cv.html

每个人都想要一个看起来专业的简历,内置的LaTeX模板也没有什么缺点。但是你要是想自己定制一个简历,就得像我一样。这意味着你需要根据自己的想法定制一个样式。众所周知,这挺难的。在这个系列的博文中,我希望能够指导你创造自己风格的类文件,并告诉你按照你的想法定制你自己的简历其实很简单。我们将把目光聚焦于简历样式,但是其中的方法确实通用的。

什么是类文件?

当你在你的LaTex文件里写documentclass{article}的时候,你就引用了一个类文件article.cls。这个类文件,定义了所有像section itle的命令,这些命令使你的文档变得结构化。这些命令如何影响格式和页面布局,也是由它控制的。

建立你自己的类文件

定制一个文档格式最方便的方法就是将所有的格式信息放在一个私人类文件中。这样能将文章的内容和格式清楚地分开,并能方便地进行复用。请建立一个cv.tex文件,并添加如下内容:

documentclass{my_cv}

egin{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的末尾添加吐下内容以自定义标题的样式:

	itleformat{section}         % Customise the section command 
  {Largescshape
aggedright} % Make the section headers large (Large),
                               % small capitals (scshape) and left aligned (
aggedright)
  {}{0em}                      % Can be used to give a prefix to all sections, like 'Section ...'
  {}                           % Can be used to insert code before the heading
  [	itlerule]                 % Inserts a horizontal line after the heading

如果我们现在编译cv.tex,我们将看到一级标题更适合一个简历:

我们也能自定义subsection标题:

	itleformat{subsection}
  {largescshape
aggedright}
  {}{0em}
  {}

二级标题现在也是同样的样式:

你应该尝试一些可行的格式选项进行选择:

  • fit —— 标题加粗或斜体
  • scshape —— 小型大写字母
  • small ormalsizelargeLargeLARGEhugeHuge —— 设置字体大小
  • mfamilysffamily tfamily —— 相应地设置字体为 serifed, san serifed or typewriter

添加日期到section标题上

我们能定义一些新的命令,使得我们在section标题上添加日期。在你的类文件中添加如下内容:


ewcommand{datedsection}[2]{%
  section[#1]{#1 hfill #2}%
}

ewcommand{datedsubsection}[2]{%
  subsection[#1]{#1 hfill #2}%
}

这定义了两个新的命令datedsectiondatedsubsection,它们有两个参数:之前的section名字和在页面右侧的日期。hfill命令告诉LaTeX尽可能多地填充空间以使得第二个参数(#2)位于页面的右侧。修改cv.tex来使用这些命令:

documentclass{my_cv}

egin{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} ​

我们的简历现在包含了日期:

总结

以上就是我们指南第一部分的全部了,但是幸好覆盖了足够多的内容让你们开始制作有用的类文件。这个简历模板看起来已经比较合理,它并没有使用很多命令,但对于其他我们能够自定义的部分,我们仅是刚刚开始。在这个指南的下面几节,我将讲述宏包的参数传递,创造一个精致的标题和如何设置通用的布局选项。

感谢你的阅读!

原文地址:https://www.cnblogs.com/super-zhang-828/p/7450133.html