A modular, data-driven LaTeX resume framework designed to make customization simple.
Most LaTeX resume templates are difficult to customize.
Content, layout, and formatting are often tightly coupled, so making even simple changes—like reordering sections, adding a new project, or updating contact information—means digging through large blocks of LaTeX and hoping you don't break the layout.
ResumeTeX was built to solve that problem.
Instead of editing the document structure directly, you define your resume using simple data commands, while the template takes care of the presentation.
- Content and layout are separated. Update your resume data without touching the formatting.
- Reorder sections effortlessly. Change the order of your resume by simply rearranging the
\Print...commands. - Reusable data commands. Add experiences, projects, education, and skills through clean, self-contained commands.
- Layout-focused customization. Modify the appearance without rewriting your resume content.
- Overleaf-friendly. Open the template directly in Overleaf or compile it locally with any standard LaTeX distribution.
ResumeTeX treats your resume like a small application:
- Data → Your personal information, experience, projects, and education.
- Layout → How that information is presented.
- Rendering → The template combines both to generate your PDF.
This separation makes the template easier to understand, easier to maintain, and much easier to customize than traditional LaTeX resumes.
ResumeTeX separates your resume into two parts:
- Data — the content of your resume.
- Layout — the order and structure used to render that content.
You primarily work with the data commands. The template handles the formatting for you.
Use \SetContact to define your name and contact information.
\SetContact
{John Doe}
{\href{mailto:john@example.com}{john@example.com}}
{+1 416-555-1234}
{Toronto, Canada}
Arguments:
| Argument | Description |
|---|---|
#1 |
Name |
#2 |
|
#3 |
Phone number |
#4 |
Location |
The contact information is rendered automatically at the top of the resume.
Use \SetProfessionalSummary to define your professional summary.
\SetProfessionalSummary{
Software Engineer specializing in Python, backend development, and building scalable applications.
}The argument can contain normal LaTeX commands, so you can use formatting such as:
\SetProfessionalSummary{
\textbf{Software Engineer} specializing in Python and \textbf{backend development}.
}Add skills using \AddSkill.
\AddSkill
{Programming Languages}
{Python, Java, C++, TypeScript}
\AddSkill
{Frameworks}
{Django, Flask, React, Node.js}
\AddSkill
{Tools}
{Git, Docker, AWS}Arguments:
| Argument | Description |
|---|---|
#1 |
Skill category |
#2 |
Comma-separated skills |
Each call creates one row in the Skills section.
You can add as many skill categories as needed.
Use \AddExperience to add a work experience entry.
\AddExperience
{Software Engineer}
{Example Company}
{Toronto, Canada}
{Jan 2024}
{Present}
{
\item[--] Built backend services using Python and Django.
\item[--] Improved application performance by 35\%.
\item[--] Designed automated deployment workflows.
}Arguments:
| Argument | Description |
|---|---|
#1 |
Job title |
#2 |
Company |
#3 |
Location |
#4 |
Start date |
#5 |
End date |
#6 |
Accomplishments |
Accomplishments use standard \item commands:
{
\item[--] First accomplishment.
\item[--] Second accomplishment.
\item[--] Third accomplishment.
}The starred version forces the entry to begin on a new page:
\AddExperience*
{Software Engineer}
{Example Company}
{Toronto, Canada}
{Jan 2024}
{Present}
{
\item[--] Built backend services.
\item[--] Improved application performance.
}The * works independently for each entry, so you can decide exactly where a page break should occur.
Use \AddProject to add a project entry.
\AddProject
{My Awesome Project}
{Jan 2024}
{Mar 2024}
{
\item[--] Built a real-time data processing pipeline.
\item[--] Processed more than 1 million records.
\item[--] Added automated testing and deployment.
}Arguments:
| Argument | Description |
|---|---|
#1 |
Project name |
#2 |
Start date |
#3 |
End date |
#4 |
Accomplishments |
#5 |
Additional information (optional) |
The optional fifth argument can be used for a project link, technology list, company name, or other short information.
For example:
\AddProject
{Flux}
{Jan 2024}
{Feb 2024}
{
\item[--] Built a real-time particle-flowfield visualization.
\item[--] Supported 15,000 particles at 30 FPS.
}
[Python, NumPy, DearPyGui]Or use it for a link:
\AddProject
{My Portfolio}
{Jan 2024}
{Mar 2024}
{
\item[--] Built a personal portfolio website.
}
[\href{https://example.com}{Project Link}]Like Experience, the starred version starts the project on a new page:
\AddProject*
{My Project}
{Jan 2024}
{Mar 2024}
{
\item[--] Built something interesting.
}Use \AddEducation to add an education entry.
\AddEducation
{Master of Science in Computer Science}
{University of Example}
{Toronto, Canada}
{2022}
{2024}Arguments:
| Argument | Description |
|---|---|
#1 |
Degree |
#2 |
University / School |
#3 |
Location |
#4 |
Start date |
#5 |
End date |
#6 |
Course work (optional) |
Course work can be added as an optional argument:
\AddEducation
{Master of Science in Computer Science}
{University of Example}
{Toronto, Canada}
{2022}
{2024}
[Algorithms, Distributed Systems, Machine Learning, Databases]When course work is provided, it is rendered underneath the education entry.
The starred version starts the entry on a new page:
\AddEducation*
{Master of Science in Computer Science}
{University of Example}
{Toronto, Canada}
{2022}
{2024}Use \AddCertification to add a certification entry
\AddCertification
{AWS Certified Developer}
{Amazon Web Services}
{Mar 2025}Arguments:
| Argument | Description |
|---|---|
#1 |
Certification name |
#2 |
Issuing organization |
#3 |
Date earned |
Multiple certifications can be added by calling the command repeatedly:
\AddCertification
{AWS Certified Developer}
{Amazon Web Services}
{Mar 2025}
\AddCertification
{Professional Scrum Master}
{Scrum.org}
{Jan 2025}Use the starred version to start a certification on a new page:
\AddCertification*
{AWS Certified Developer}
{Amazon Web Services}
{Mar 2025}The order of sections is controlled by the \Print... commands near the end of the document.
For example:
\begin{document}
\PrintContact
\PrintSummary
\PrintSkills
\PrintExperiences
\PrintProjects
\PrintEducation
\PrintCertifications
\end{document}To put Education before Projects, simply change the order:
\begin{document}
\PrintContact
\PrintSummary
\PrintSkills
\PrintExperiences
\PrintEducation
\PrintProjects
\PrintCertifications
\end{document}You do not need to modify the section definitions or any of the data commands.
There is no separate list to maintain. Simply call the appropriate command once for each entry.
\AddExperience
{Software Engineer}
{Company A}
{Toronto, Canada}
{2024}
{Present}
{
\item[--] Built software.
}
\AddExperience
{Junior Developer}
{Company B}
{Toronto, Canada}
{2022}
{2024}
{
\item[--] Developed applications.
}ResumeTeX automatically combines the entries into the corresponding section.
| Command | Purpose |
|---|---|
\SetContact{...} |
Set contact information |
\SetProfessionalSummary{...} |
Set professional summary |
\AddSkill{...}{...} |
Add a skill category |
\AddExperience{...} |
Add work experience |
\AddExperience*{...} |
Add experience with a page break |
\AddProject{...} |
Add a project |
\AddProject*{...} |
Add project with a page break |
\AddEducation{...} |
Add education |
\AddEducation*{...} |
Add education with a page break |
\AddCertification{...} |
Add certification |
\AddCertification*{...} |
Add certification with a page break |
\PrintContact |
Render contact information |
\PrintSummary |
Render summary |
\PrintSkills |
Render skills |
\PrintExperiences |
Render experience |
\PrintProjects |
Render projects |
\PrintEducation |
Render education |
\PrintCertifications |
Render certifications |
For normal resume editing, you only need to modify the Data section:
% Contact
\SetContact{...}
% Summary
\SetProfessionalSummary{...}
% Skills
\AddSkill{...}{...}
% Experience
\AddExperience{...}
% Projects
\AddProject{...}
% Education
\AddEducation{...}
% Certifications
\AddCertification{...}The layout and rendering logic can remain unchanged.
