mirror of
https://github.com/MadsLorentzen/ai-job-search.git
synced 2026-09-17 16:46:24 +00:00
`normalize_text()` folded whitespace only, so `--contains` compared what a
user types against what LaTeX renders. The stock CV compiled with the
documented lualatex command turns `'` into U+2019 and `--` into U+2013, so
`--contains "Master's degree"` and `--contains "2016-2024"` both reported
the keyword missing from a document that plainly contains it, through both
extractors. The documented remedy for a missing keyword is to add it, which
is the one thing the ATS section forbids.
Fold both sides at comparison time: NFC, then curly apostrophes and quotes
to ASCII, en/em dashes to `-`, no-break space to space. `--dump-text` still
writes the raw layer - that is what an ATS parses, and the date-range rule
in 05-cv-templates.md needs the raw en-dash visible there.
Separately, pdflatex without T1 font encoding stores accents decomposed
(`e` + U+0300). NFC repairs the pdftotext side of that, but pypdf reads the
same layer as `Z¨ urich` with a spacing accent, which no fold recovers.
moderncv 2.5 loads T1 itself under pdflatex; the apt-packaged 2.3.1 does
not - reproduced by compiling the template against moderncv v2.3.1 with
pdflatex (before: U+0308/U+0300 in pdftotext, `Z¨ urich` in pypdf; after:
U+00FC/U+00E8 in both). The template and the guide's preamble gain
`\ifpdftex\usepackage[T1]{fontenc}\fi`; the lualatex text layer is
byte-identical before and after.
Tests: ten new cases in test_verify_pdf.py (the fold-through and
normalize_text ones fail on the whitespace-only code) and a
test_latex_guidance.py guard that the fontenc line exists and stays inside
the pdflatex branch. framework_version 1.4.3 -> 1.4.4 on 05-cv-templates.md.
Reported and diagnosed by 9scorp4 in Discussions #385 and #384.
191 lines
6.8 KiB
TeX
191 lines
6.8 KiB
TeX
%% Example CV - [YOUR_NAME]
|
|
%% Comprehensive overview of all competencies, experience, and achievements.
|
|
%% Use as a master reference when tailoring role-specific CVs.
|
|
%%
|
|
%% SETUP: Run /setup to populate this with your actual information.
|
|
%% Compile with: lualatex main_example.tex
|
|
%% (pdflatex often fails on modern MiKTeX with fontawesome5 font-expansion errors.)
|
|
|
|
\documentclass[11pt,a4paper,sans]{moderncv}
|
|
\moderncvstyle{banking}
|
|
\moderncvcolor{blue}
|
|
|
|
% Force the name and section headings to render in moderncv blue (color1).
|
|
% Default banking leaves them black: moderncvstylebanking.sty's \colorlet
|
|
% copies (not aliases) the pre-scheme accent colour, so the name colours are
|
|
% frozen before \moderncvcolor runs. Re-let them after. \namefont is the hook
|
|
% every name-style macro routes through, so this also works on moderncv 2.3.1
|
|
% (Debian/Ubuntu apt), which has no \firstnamestyle/\lastnamestyle at all.
|
|
\renewcommand*{\namefont}{\fontsize{34}{36}\bfseries\upshape}
|
|
\colorlet{firstnamecolor}{color1}
|
|
\colorlet{lastnamecolor}{color1}
|
|
\colorlet{namecolor}{color1}
|
|
\renewcommand*{\sectionstyle}[1]{{\sectionfont\color{color1}#1}}
|
|
|
|
\usepackage[utf8]{inputenc}
|
|
% pdflatex fallback only (the documented engine is lualatex, which skips this
|
|
% branch). Without T1 font encoding pdflatex builds accented letters with
|
|
% \accent, and the PDF text layer stores them decomposed - `e` + U+0300 rather
|
|
% than U+00E8 - so an ATS keyword match on "Genève" fails while the page looks
|
|
% right. moderncv 2.5 loads T1 itself under pdflatex; 2.3.1 (Debian/Ubuntu apt)
|
|
% does not. \ifpdftex comes from iftex, which every moderncv version loads.
|
|
\ifpdftex\usepackage[T1]{fontenc}\fi
|
|
% moderncv loads hyperref itself in an \AtEndPreamble hook, so \hypersetup
|
|
% must go in an \AtEndPreamble of our own: on moderncv < 2.4 a top-level
|
|
% \usepackage{hyperref} clashes with the class's own
|
|
% \RequirePackage[unicode]{hyperref}. From 2.4.0 the class passes its options
|
|
% through \PassOptionsToPackage instead, which is what removes that clash.
|
|
\AtEndPreamble{\hypersetup{
|
|
colorlinks=true,
|
|
linkcolor=blue,
|
|
filecolor=magenta,
|
|
urlcolor=blue,
|
|
pdftitle={[YOUR_NAME] - CV},
|
|
% Keep pdfpagemode=UseNone: this block runs after moderncv's own
|
|
% \AtEndPreamble (moderncv.cls sets pdfpagemode there), so a FullScreen
|
|
% value here would win and open every CV in fullscreen presentation mode.
|
|
pdfpagemode=UseNone,
|
|
}}
|
|
\usepackage[scale=0.80]{geometry}
|
|
\usepackage{import}
|
|
|
|
% personal data
|
|
\name{[First]}{[Last]}
|
|
% If you have no address to list, DELETE this whole line. \address{}{}{} fails
|
|
% with "There's no line here to end" on every moderncv version.
|
|
\address{[Your Address, City, Country]}{}{}
|
|
\phone[mobile]{[+XX XXXXXXXXXX]}
|
|
\email{[your.email@example.com]}
|
|
\extrainfo{\href{[https://linkedin.com/in/your-profile]}{LinkedIn}, \href{[https://github.com/your-username]}{GitHub}}
|
|
|
|
\begin{document}
|
|
|
|
\makecvtitle
|
|
|
|
% ============================================================
|
|
% PROFILE STATEMENT
|
|
% ============================================================
|
|
|
|
\vspace{6pt}
|
|
\small{[Write a 3-5 line profile statement tailored to the role you're applying for. Focus on what makes you uniquely qualified. Example: "Data scientist with a PhD in [field] and X years of industry experience. Combines deep domain expertise in [domain] with strong applied machine learning and Python development skills. Experienced in developing end-to-end ML pipelines, from data ingestion to stakeholder-facing dashboards."]}
|
|
|
|
% ============================================================
|
|
% CORE COMPETENCIES
|
|
% ============================================================
|
|
|
|
\section{Core Competencies}
|
|
\vspace{1pt}
|
|
\begin{itemize}
|
|
|
|
\item \textbf{[Skill Category 1]}: [Specific skills, frameworks, tools. Be concrete.]
|
|
|
|
\item \textbf{[Skill Category 2]}: [Specific skills, frameworks, tools.]
|
|
|
|
\item \textbf{[Skill Category 3]}: [Specific skills, frameworks, tools.]
|
|
|
|
\item \textbf{[Skill Category 4]}: [Domain expertise, methods, approaches.]
|
|
|
|
\item \textbf{[Skill Category 5]}: [Tools, platforms, software.]
|
|
|
|
\end{itemize}
|
|
|
|
% ============================================================
|
|
% PROFESSIONAL EXPERIENCE
|
|
% ============================================================
|
|
|
|
\section{Professional Experience}
|
|
\vspace{3pt}
|
|
\begin{itemize}
|
|
|
|
% --- Most Recent Role ---
|
|
\item{\cventry{[YYYY-Present]}{[Job Title]}{[Company]}{[City, Country]}{}{\vspace{1pt}
|
|
\begin{itemize}
|
|
\item {[Achievement or responsibility 1 - be specific, use numbers where possible]}
|
|
\item {[Achievement or responsibility 2]}
|
|
\item {[Achievement or responsibility 3]}
|
|
\item {[Achievement or responsibility 4]}
|
|
\end{itemize}}}
|
|
|
|
\vspace{3pt}
|
|
|
|
% --- Previous Role ---
|
|
\item{\cventry{[YYYY-YYYY]}{[Job Title]}{[Company]}{[City, Country]}{}{\vspace{1pt}
|
|
\begin{itemize}
|
|
\item {[Achievement or responsibility 1]}
|
|
\item {[Achievement or responsibility 2]}
|
|
\item {[Achievement or responsibility 3]}
|
|
\end{itemize}}}
|
|
|
|
\vspace{3pt}
|
|
|
|
% --- Earlier Role ---
|
|
\item{\cventry{[YYYY-YYYY]}{[Job Title]}{[Company]}{[City, Country]}{}{\vspace{1pt}
|
|
\begin{itemize}
|
|
\item {[Achievement or responsibility 1]}
|
|
\item {[Achievement or responsibility 2]}
|
|
\end{itemize}}}
|
|
|
|
\end{itemize}
|
|
|
|
% ============================================================
|
|
% EDUCATION
|
|
% ============================================================
|
|
|
|
\section{Education}
|
|
\vspace{1pt}
|
|
\begin{itemize}
|
|
|
|
\item{\cventry{[YYYY-YYYY]}{[Degree] in [Field]}{[Institution]}{[City, Country]}{}{\vspace{1pt}
|
|
Thesis: ``[Thesis Title].'' [Brief description of research focus.]
|
|
}}
|
|
|
|
\vspace{3pt}
|
|
|
|
\item{\cventry{[YYYY-YYYY]}{[Degree] in [Field]}{[Institution]}{[City, Country]}{}{\vspace{1pt}
|
|
[Brief description or key topics.]
|
|
}}
|
|
|
|
\end{itemize}
|
|
|
|
% ============================================================
|
|
% LANGUAGES
|
|
% ============================================================
|
|
|
|
\section{Languages}
|
|
\vspace{1pt}
|
|
\begin{itemize}
|
|
\item {[Language 1] (native), [Language 2] (fluent), [Language 3] (intermediate).}
|
|
\end{itemize}
|
|
|
|
% ============================================================
|
|
% PUBLICATIONS (optional)
|
|
% ============================================================
|
|
|
|
\section{Publications}
|
|
\vspace{1pt}
|
|
\begin{itemize}
|
|
\item {[Author(s)] ([Year]). [Title]. [Journal/Conference]. \href{[DOI_URL]}{DOI link}}
|
|
\end{itemize}
|
|
|
|
% ============================================================
|
|
% HONORS AND AWARDS (optional)
|
|
% ============================================================
|
|
|
|
\section{Honors and Awards}
|
|
\vspace{1pt}
|
|
\begin{itemize}
|
|
\item{\textbf{[Award Name]} -- [Event/Organization] ([Year]).}
|
|
\end{itemize}
|
|
|
|
% ============================================================
|
|
% REFERENCES
|
|
% ============================================================
|
|
|
|
\section{References}
|
|
\vspace{1pt}
|
|
\begin{itemize}
|
|
\item{Available upon request.}
|
|
\end{itemize}
|
|
|
|
\end{document}
|