Replies: 1 comment
|
Confirmed - |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Idea:
verify_pdf.py --containscan't see LaTeX's typographic substitutionsTL;DR:
normalize_text()folds whitespace only, so--containscompares what a usertypes against what LaTeX renders.
--contains "Master's degree"fails on a CV thatplainly contains it, and
--contains "2016-2024"fails on the en-dash the template itselfproduces — the exact failure mode
05-cv-templates.mdalready documents as a confirmedWorkday import failure. Reproduces on
lualatex, stock template, currentmaster.Asking before building, per CONTRIBUTING's "an Idea thread costs nothing".
Reproduction
cv/main_example.texat79cd383, placeholders filled with ordinary CV content:Compiled with the documented command (
lualatex, 2 pages, clean), then:The text layer is correct; the comparison isn't:
Both substitutions are LaTeX behaving correctly.
normalize_text()is" ".join(text.split()), so nothing folds them back before theintest.Why this is worth more than it looks
1. It produces a false negative on exactly the check the docs steer users toward.
The ATS Parseability section says to verify "posting keywords covered or honestly absent"
and warns never to stuff. A user checking
Master's degree— one of the most common ATSkeywords there is — gets FAIL on a CV that contains it, and the documented remedy for a
missing keyword is to add it. The tool nudges toward the one thing the docs forbid.
2. The tool can't detect the failure the docs already confirmed.
05-cv-templates.md(§ "Date fields must be ASCII ranges") documents2016--2024reaching the text layer as
2016<U+2013>2024, a real Workday import that dropped an enddate and every education entry, and instructs: "after extracting the text layer, confirm
every experience entry shows a start and an end separated by an ASCII hyphen."
There is no tooling for that. The natural invocation,
--contains "2016-2024", returnsFAIL — but it returns FAIL identically when the dates are simply absent. The result can't
distinguish "present but en-dashed" (the documented bug) from "missing". The check the
docs call for is currently un-automatable with the tool that exists to automate it.
3. CI passes today only by accident of vocabulary.
.github/workflows/ci.ymluses--containsfor the LaTeX smoke test with'Professional Experience','Achievement','Dear [Hiring Manager / Team]'— noapostrophes, no dashes. Add one possessive to a placeholder and the smoke test breaks for
a reason no one would guess from the diff.
The design tension, which is the actual question
Folding is not uniformly correct, which is why I'm asking rather than sending a patch:
curly quotes, and the question being asked is "does this term appear".
--contains "2016-2024"starts passing against an en-dash, the tool now hides the Workday failure instead of
merely failing to detect it. That is worse than today.
So one flag can't serve both, and the useful version is probably two behaviours.
What I'd build, if wanted
normalize_text()before comparison —U+2018/U+2019to
',U+201C/U+201Dto",U+2013/U+2014to-,U+00A0to space, plusunicodedata.normalize("NFC", ...). Applies to--contains, the coverage use case.--ascii-dates, asserting every\d{4}[^\d]\d{4}run in the text layer is separated byU+002D. This is the one that makes the documented Workday guidance executable.above can't recur.
Roughly one function and one new flag. Happy to split into two PRs, since (1) is a fix
and (2) is a feature and CONTRIBUTING is clear about one concern per PR.
Alternatives I'd equally accept: fold in
normalize_text()and do nothing else,leaving the date rule manual; or document the gotcha in the ATS section and change no code.
Smaller, separate observation
Unrelated mechanism, mentioning it only so it isn't a second thread: under pdflatex
without
\usepackage[T1]{fontenc}, the text layer stores accents decomposed (NFD), so--contains "Genève"fails there too. Measured: 0/5 accented keywords matched without T1,5/5 with it; both extractor backends agree. This does not affect
lualatexeither way,so it only concerns users whose lualatex is broken and who fall back — which is how I found
all of this. A one-line
fontencaddition would cover it, but it's off the documented pathand I'd drop it if you'd rather not carry defensive lines for unsupported engines.
Environment: TeX Live 2023 (Debian), LuaHBTeX 1.17.0, Poppler
pdftotext24.02.0,pypdf6.16.2, Linux, upstream79cd383.All reactions