如何寫一個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\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} ​

我們的簡歷現在包含了日期:

總結

以上就是我們指南第一部分的全部了,但是幸好覆蓋了足夠多的內容讓你們開始制作有用的類文件。這個簡歷模板看起來已經比較合理,它並沒有使用很多命令,但對於其他我們能夠自定義的部分,我們僅是剛剛開始。在這個指南的下面幾節,我將講述宏包的參數傳遞,創造一個精致的標題和如何設置通用的布局選項。

感謝你的閱讀!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM