Files
resume-ng/resume.cls
2025-12-30 21:10:16 +08:00

174 lines
3.4 KiB
TeX

\RequirePackage{expl3,l3keys2e}
\ProvidesExplClass{resume}
{2022-12-26}{0.1.0}{Another Resume Class by Feng Kaiyu}
% Keep Quiet
\PassOptionsToPackage{quiet}{xeCJK}
\ProcessOptions\relax
\LoadClass[zihao=5,autoindent=0.5em]{ctexart}
% Define paper size.
\RequirePackage{geometry}
% Remove the default header and footer.
\RequirePackage{fancyhdr}
% Redefine list style.
\RequirePackage{enumitem}
% Align all footnotes in a row.
\RequirePackage[para]{footmisc}
\RequirePackage[colorlinks=false,hidelinks,]{hyperref}
% For the usage of `\CJKunderline`.
\RequirePackage{xeCJKfntef}
% Provide colors.
\RequirePackage{xcolor}
% Clean pagestyle.
\pagestyle{empty}
% Adopt A4 style but with smaller margins.
\geometry{a4paper,margin=1cm, bottom=0.5cm}
%%% Global Variables %%%
% Store all contacts info.
\seq_new:N \g__resume_contacts_seq
% Store title name.
\tl_new:N \g__resume_title_name_tl
%%% Global Settings %%%
% No page number.
\pagenumbering{gobble}
% Set the style of section title.
\ctexset{
section = {
nameformat = {},
number = {},
format = \noindent \zihao{4} \heiti \__resume_section_title_format:n,
indent = -1em,
afterskip = 0.5em,
beforeskip = 0.2em,
},
}
% Set the style of list.
\setlist{
labelsep=2pt,
labelwidth=5pt,
leftmargin=1.3em,
itemsep=0em,
parsep=0.20em,
topsep=0em,
}
% Set the line spacing.
\linespread{1.15}
% New counter for bookmarks.
\newcounter{resumebookmark}
%%% User Commands %%%
% Predefined commands.
\cs_new:Npn \__resume_append_concat:n #1
{
\seq_put_right:Nn \g__resume_contacts_seq {#1}
}
% Predefined commands.
\cs_new:Npn \__resume_section_title_format:n #1
{#1 \vspace{3pt} \hrule}
% Add a contant info.
\NewDocumentCommand{\ResumeContact}{m}
{
\__resume_append_concat:n {#1}
}
% Add multiple contant info.
% ```
% \ResumeContacts{ itemA, itemB, itemC }
% ```
\NewDocumentCommand{\ResumeContacts}{m}
{
\seq_set_from_clist:Nn \l__input_seq:N {#1}
\seq_map_inline:Nn \l__input_seq:N
{
\__resume_append_concat:n {##1}
}
}
% Add your resume title, which generally is your name.
\NewDocumentCommand{\ResumeName}{m}
{
\tl_set:Nn \g__resume_title_name_tl {#1}
}
% Render the title.
\NewDocumentCommand{\ResumeTitle}{}
{
\begin{center}
\zihao{-2} \heiti \g__resume_title_name_tl
\end{center}
% Reduce the space.
\vspace{-1.4em}
\begin{center}
\seq_use:Nnnn \g__resume_contacts_seq {~|~} {~|~} {~|~}
\end{center}
}
% Render the section title.
% #1(optional): This content will be used as the bookmark in PDF.
% #2: The title of the section.
% #3(optional): The additional information of the section.
% #4(optional): The right-aligned content, which normally will be the date range.
\NewDocumentCommand{\ResumeItem}{omoo}
{
{
\zihao{-4}
\par
\noindent
{
\heiti
#2
\IfValueTF{#1}
{
\pdfbookmark[2]{#1}{subsec:\arabic{resumebookmark}}
}
{
\pdfbookmark[2]{#2}{subsec:\arabic{resumebookmark}}
}
\stepcounter{resumebookmark}
}
\IfValueT{#3}{
\tl_if_empty:nF {#3} {
\ |
\textit{
#3
}
}
}
\hfill
\IfValueT{#4}{
#4
}
\par
}
}
% Gray out the content.
\NewDocumentCommand{\GrayText}{m}
{
\textcolor{gray}{#1}
}
% Render content with a hyperlink, marked with underline.
\NewDocumentCommand{\ResumeUrl}{mm}
{
\href{#1}{\CJKunderline{#2}}
}
\endinput