← Back to Blog

LaTeX Resume Template for Software Engineer: Why It Parses Better

Published ยท Finch Team

Updated

If you've ever wondered why your Google Docs resume looks fine but gets garbled by applicant tracking systems, the answer is usually the PDF export. A LaTeX resume template for software engineer roles solves this problem at the source. LaTeX produces cleaner PDFs with better text encoding, and ATS parsers handle them more reliably than what Google Docs or Word spit out.

This isn't some elitist take about LaTeX being "more professional." It's a practical observation: pdflatex generates PDFs where every character has a proper Unicode mapping, fonts are embedded correctly, and the text layer matches what you see visually. Google Docs PDFs sometimes produce invisible characters, broken ligatures, or text that copies as gibberish. If the ATS can't read your text, your keywords don't exist.

Why LaTeX PDFs Parse Better Than Google Docs

Here's the technical reason. When pdflatex compiles your .tex file, it generates a PDF with a proper ToUnicode CMap. This map tells PDF readers (and ATS parsers) exactly what Unicode character each glyph represents. The command \pdfgentounicode=1 in your preamble enables this explicitly.

Google Docs takes a different approach. It renders your document visually and then exports a PDF that's essentially a print capture. The text extraction layer is an afterthought. This leads to real problems:

  • The "fi" and "fl" ligatures in words like "profile" or "workflow" sometimes export as single unrecognizable glyphs. An ATS searching for "profile" won't find it if the PDF encoded "pro" + [ligature glyph] + "le."
  • Custom fonts might not embed their full character maps, causing substitution issues.
  • Tables and columns can confuse the reading order, making your experience section parse as interleaved garbage.

Word is better than Google Docs but still has quirks with complex formatting. LaTeX gives you full control over the output, which is why most CS students at top programs use it.

Does this mean Google Docs resumes always fail? No. Most of the time they're fine. But when they fail, they fail silently. You never know your resume got mangled. LaTeX eliminates that uncertainty.

For a broader look at how ATS parsing works and how to optimize for it, read our ATS resume tips for software engineers.

The Template: Jake Gutierrez's Resume

The most popular LaTeX resume template in CS circles is Jake Gutierrez's. It's MIT licensed, actively maintained, and used by thousands of students. It's also the template we used when we built Finch's resume generator.

You can find it on GitHub by searching "jake gutierrez resume template" or on Overleaf's template gallery. Here's why it works:

Clean, single-column layout. No multi-column tricks that confuse ATS parsers. Everything reads top to bottom, left to right. This is the format ATS systems expect.

Sensible defaults. Letter paper, 11pt font, 0.5-inch margins. These are tight enough to fit content but loose enough to be readable. Some students go to 0.25-inch margins and 9pt font. Don't do that. Your resume shouldn't need a magnifying glass.

Proper pdflatex compatibility. The template compiles with pdflatex (not XeLaTeX or LuaLaTeX), which means it works on Overleaf out of the box, in most CI pipelines, and on any machine with a standard TeX distribution.

ATS-friendly encoding. The preamble includes \pdfgentounicode=1 and uses \input{glyphtounicode} to ensure every character maps correctly. This is the single most important thing for ATS parsing and it's built in.

Setting Up

If you've never used LaTeX, don't panic. The easiest way to get started is Overleaf, which is basically Google Docs for LaTeX. No local installation needed.

Option 1: Overleaf (recommended for beginners)

  1. Go to Overleaf, create a free account
  2. Search their template gallery for "Jake's Resume" or create a new project and paste the template code
  3. Hit compile. You'll see your PDF on the right side
  4. Edit the .tex file on the left. Every time you save, it recompiles

Option 2: Local setup

If you want to work locally (faster compilation, version control with Git), install a TeX distribution:

  • macOS: MacTeX
  • Linux: texlive-full (or texlive-latex-extra for a lighter install)
  • Windows: MiKTeX

Then compile with: pdflatex resume.tex

The template structure looks like this:

\documentclass[letterpaper,11pt]{article}
\input{glyphtounicode}
\pdfgentounicode=1

% ... package imports and formatting commands ...

\begin{document}

\begin{center}
  \textbf{\Huge Your Name} \\
  email@example.com $|$ linkedin.com/in/you $|$ github.com/you
\end{center}

\section{Education}
% ...

\section{Experience}
% ...

\section{Projects}
% ...

\section{Technical Skills}
% ...

\end{document}

Each section uses \resumeSubheading for entries and \resumeItem for bullet points. The formatting is handled by the preamble so you just fill in content.

Customizing Without Breaking ATS Compatibility

Here's where people get into trouble. They find the template, love it, and then start "improving" it with columns, icons, color bars, and skill-level progress bars. Every one of those changes risks breaking ATS parsing.

Safe customizations:

  • Adjusting margins slightly (stay between 0.4in and 0.6in)
  • Changing section order (put Projects above Experience if you're light on work history)
  • Adding or removing sections
  • Tweaking font size (10pt to 12pt range)
  • Adding hyperlinks with \href{url}{text} (ATS ignores links but humans clicking the PDF can follow them)

Risky customizations:

  • Adding a sidebar or second column. ATS parsers read linearly. A two-column layout means your skills section might interleave with your experience section in the parsed output.
  • Adding icons (phone icon, email icon, LinkedIn icon). These render as unknown glyphs in text extraction. Use plain text labels.
  • Color-coded sections. Some ATS systems strip color information during parsing. If your section headers are only distinguished by color, they might disappear.
  • Skill bars or rating graphics. An ATS cannot read that you rated yourself 4/5 in Python from a colored bar. Use plain text.

The safest rule: if it wouldn't survive being copied and pasted as plain text, don't add it to an ATS-targeted resume.

The Overflow Problem: "It Doesn't Fit on One Page"

This is the #1 complaint with LaTeX resumes. You fill in all your content, compile, and the PDF is 1.3 pages. Now what?

Most people start randomly deleting bullets or shrinking the font. That's a bad approach because you're making content decisions based on space pressure, not relevance.

Here's a structured approach to trimming:

Tier 1: Full content. Start here. Everything you want to include, properly formatted.

Tier 2: Reduce scope. Cap yourself at 4 experience entries with 2 bullets each. Cut the least relevant position entirely.

Tier 3: Tighten bullets. Limit each bullet to 24 words. This forces you to cut filler. "Responsible for designing and implementing" becomes "Designed." "Successfully managed to reduce" becomes "Reduced."

Tier 4: Minimize. 3 experience entries, 1 bullet each, 20-word max per bullet. If you're still over a page at this point, you probably have too many sections.

Tier 5: Bare bones. 2 experience entries, drop the projects section entirely, 18-word bullets. This is the nuclear option. If you're a student, you shouldn't need to go here unless you're listing way too many things.

The key insight: trim proportionally across sections rather than gutting one section to save another. A resume with 4 experience bullets and 0 project bullets looks worse than one with 2 of each.

We wrote a whole guide on the one-page resume constraint for tech roles if you want more strategies.

LaTeX Resume Template for Software Engineer Roles: Section-by-Section

Let me walk through what each section should look like in the template.

Header. Name big and centered. Contact info on one line below: email, phone (optional), LinkedIn, GitHub. All plain text, no icons.

Education. University name, degree, expected graduation, GPA if above 3.5. Relevant coursework optional. Only include it if you're a freshman/sophomore with thin projects and experience.

Experience. Company, role, dates, location. 2-3 bullets per entry using the XYZ formula. Lead with strong verbs. Include tech stack naturally in the bullet, not as a separate line.

Projects. Project name, tech stack on the same line. 2-3 bullets per project. This is where CS students differentiate themselves. For detailed advice, check our guide on building a CS student resume.

Technical Skills. One section, organized by category: Languages, Frameworks, Tools, Platforms. Comma-separated, no rating systems. This is your keyword safety net: anything the ATS needs to find should appear here.

Common Mistakes and How We Used This LaTeX Resume Template for Software Engineer Resumes

Before I get into how we ran this template at scale, here are the mistakes I see most often:

Compiling with XeLaTeX when the template expects pdflatex. The font handling and Unicode mapping differ between engines. Jake's template is designed for pdflatex. If you switch engines, test that text extraction still works (copy-paste from the PDF and check for garbled characters).

Forgetting \pdfgentounicode=1. Without this line, your PDF might look perfect visually but extract as garbage. Always include it.

Over-engineering the preamble. Some people add 200 lines of custom commands for marginal formatting tweaks. Every custom command is a potential point of failure. The default preamble works. Use it.

Not testing the PDF output. After compiling, open the PDF and try selecting all text, then pasting into a plain text editor. Does it come out readable? Are the bullets in the right order? Are there any weird characters? This 30-second test catches most ATS issues.

Our generator compiled Jake Gutierrez's template with pdflatex for every resume it made, and its steps work just as well by hand:

  1. Pick the best-fit content from your experience for each job
  2. Fill the LaTeX template with bullets written for that job
  3. Compile the .tex file into a PDF with pdflatex
  4. If the content overflows one page, work down the tiers above until it fits
  5. If the result fills less than 75% of the page, add detail back to use the space well
  6. Run the copy-paste test on the final PDF

Steps 4 and 5 are what kept every generated resume at exactly one page, never 1.3 pages and never half empty.

Get Started

If you want to use Jake's LaTeX resume template for software engineer applications, grab it from Overleaf or GitHub, fill in your content, and compile with pdflatex. Test the output by copy-pasting the text. Keep the layout single-column and skip the visual flourishes.

Once it compiles cleanly, put it to work. Each week Finch picks the 3 internships or new-grad roles that fit your major best, and its board lists more open roles, newest first. It's free. Start with your major.