如何使用 moderncv 提高 LaTeX 创建的简历的机器可读性?

如何使用 moderncv 提高 LaTeX 创建的简历的机器可读性?

一些背景故事。我最近将我的简历发送给一个免费的在线评估机构。回复显示,虽然文档看起来很吸引人,但对 ATS(申请人跟踪系统)来说却很糟糕。这些软件包将简历的内容与工作机会相匹配,并根据此筛选大多数申请人。事实证明,LaTeX 的 PDF 输出对此非常糟糕。评估建议以 .doc Word 文件形式提交简历。

经过一番研究,我设法解决了大多数问题(连字、编码等)。我基本上在我的简历中使用这种格式:

编辑:添加了一些额外的命令和部分解决方案

\documentclass[10pt,letterpaper,sans]{moderncv}

%% ModernCV themes
\moderncvstyle{classic}
\moderncvcolor{black}
\moderncvicons{awesome}

%% Character encoding
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}

%% Improve text-only output
\usepackage{xpatch}
\input{glyphtounicode}
\pdfgentounicode=1
\def\labelitemi{--} % Bullet list with a dash
% EDIT: modify cventry to add invisible colons (:) between year and content
\xpatchcmd{\cventry}{#2}{#2{\makebox[0pt]{\transparent{0}:}}}
{}{\typeout{===>Failure in patching \\cventry}}
% EDIT: redefined \social to add some description with transparency
\RenewDocumentCommand{\social}{O{}O{}m}{%
  \ifthenelse{\equal{#2}{}}%
    {%
      \ifthenelse{\equal{#1}{linkedin}}{\collectionadd[linkedin]{socials}{%
\protect\makebox[0pt]{\protect\texttransparent{0}{www.linkedin.com/in/}}
\protect\httplink[#3]{www.linkedin.com/in/#3}}}{}%
      \ifthenelse{\equal{#1}{twitter}} {\collectionadd[twitter]{socials} {%
\protect\makebox[0pt]{\protect\texttransparent{0}{www.twitter.com/}}
\protect\httplink[#3]{www.twitter.com/#3}}}    {}%
      \ifthenelse{\equal{#1}{github}}  {\collectionadd[github]{socials}  {%
\protect\makebox[0pt]{\protect\texttransparent{0}{www.github.com/}}
\protect\httplink[#3]{www.github.com/#3}}}     {}%
    }
    {\collectionadd[#1]{socials}{\protect\httplink[#3]{#2}}}}
%EDIT: Change the Linkedin symbol
\renewcommand*{\linkedinsocialsymbol}{{\small\faLinkedinSquare}~}

%% Adjust the page margins
\usepackage[margin=1.75cm]{geometry}

%% Personal data
\firstname{Mickey}
\familyname{Mouse}
\phone{+1~(555)~123~4567}
\email{[email protected]}
\social[twitter]{mickeymouse}

\begin{document}

% CURRICULUM VITAE
\newpage
\makecvtitle
\onehalfspacing

\section{\texorpdfstring{\faStar~Professional Summary}{Professional Summary}}
\cvlistitem{I'm a talking mouse, please hire me.}

\section{\texorpdfstring{\faIndustry~Experience}{Experience}}
\cventry{1940-present}{Cartoon character}{Walt Disney Company}{Animation Division}{}{}
\cvlistitem{Many films, please hire me.}
\cventry{1950-present}{Company Mascot}{Walt Disney}{Worldwide}{}{I Hate the Pixar Lamp}

\section{\texorpdfstring{\faGraduationCap~Education}{Education}}
\cvlistitem{I can talk, please hire me.}

\section{\texorpdfstring{\faWrench~Skills}{Skills}}
\cvlistitem{I can talk, please hire me.}

\section{\texorpdfstring{\faTrophy~Awards}{Awards}}
\cvlistitem{Many Oscars, please hire me.}

\end{document}

抱歉,这个例子又长又俗气。我使用位\texorpdfstring来避免将符号放在 PDF 书签中的部分名称之前。但是,这些符号是文本字符,当我使用时,它们会被解析到 pdf 文本中,pdftotext也会解析到 ATS 软件中(我假设它使用类似的pdftotext)。所以我现在的目标是改进的输出pdftotext,使其完全可读,并尽可能多地使用“格式”(基本上是部分之间的段落间距)。

这些行\input{glyphtounicode}\pdfgentounicode=1从输出中删除了一些字形,但不是全部,而且在电话号码、电子邮件和 linkedin URL 前面仍然会出现不正确的符号。\def\labelitemi{--}修复了标准项目符号的问题moderncv(注释此行,编译文档并传递 pdfpdftotext以查看我在说什么)。如您所见,删除我在章节标题中放入的额外符号并不能完全解决我的问题。

我希望将所有这些内容排版moderncvicons为图像(如果可能),或者以其他方式排版,以便它们在 pdf 中可见,但不能作为文本pdftotext或手动复制粘贴读取。此外,我想添加一些隐藏文本,这些文本在 pdf 中不可见,但可以访问pdftotext,以便相应地标记电话号码和电子邮件地址,最好显示 linkedin/twitter 个人资料的完整 URL 地址。为了实现这一点,我不介意调整命令moderncv,或者从头开始创建新的命令。

我认为第三层复杂度是在\cventry条目之间添加额外的垂直空间(一行额外的空间)以及年份和其余内容之间的分隔符,但仅限于纯文本输出。我希望 PDF 保持大致相同。

这可行吗?还是我应该改用 .doc Word 文件?

提前感谢任何帮助、建议、评论、批评、笑话等。

赏金:

我还需要一些东西来解决这个问题

  1. 我需要一种方法来隐藏纯文本版本中的字符,但仍可在 pdf 上看到。基本上,与相反transparent。我需要应用这种尚不为人所知的方法来隐藏 Twitter 符号、电子邮件符号和电话符号,以及每个部分开头的符号。

  2. 我需要正确格式化字符的输出transparent,因为它们似乎被添加到单独的行中(检查输出pdftotext

答案1

我终于找到了一个或多或少能满足我要求的东西。我最终使用了accsupp 根据建议

我还必须切换lualatex到 来pdflatex编译文件.texlualatex似乎可以更好地处理 中的字形编码和替换fontawesome,并且 的输出中没有错误pdftotext。 您需要确保fontawesome可以读取字体。 在 Linux 中,我在系统字体目录中创建了指向安装中和的相关文件的lualatex符号链接,并更新了系统字体缓存。.tfm.otffontawesometexlive

使用lualatex还意味着放弃transparent包装,而是在accsupp各处使用。

这是最新版本:

\documentclass[10pt,letterpaper,sans]{moderncv}

%% Adjust the page margins
\usepackage[margin=1.75cm]{geometry}
\usepackage{setspace}

%% ModernCV themes
\moderncvstyle[right]{classic}
\moderncvcolor{black}
\moderncvicons{awesome}

%% Character encoding
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}

%% Improve text-only output
\def\labelitemi{--} % Bullet list with a dash
\usepackage{xpatch}
\usepackage{accsupp}

% Patch cventry - Add linebreak before and separator: after
\xpatchcmd{\cventry}{#2}{%
  \protect\BeginAccSupp{%
    method=pdfstringdef=true,ActualText=\unichar{"000A}#2:}%
    #2\protect\EndAccSupp{}}%
{\typeout{===>Success in patching \\cventry}}
{\typeout{===>Failure in patching \\cventry}}

% Remove glyphs from text version and add description
\renewcommand*{\linkedinsocialsymbol}{%
\protect\BeginAccSupp{ActualText=}%
{{\small\faLinkedinSquare}~}%
\protect\EndAccSupp{}}%

\renewcommand*{\fixedphonesymbol}{%
\protect\BeginAccSupp{ActualText=Telephone:}%
{{\faPhone}~}%
\protect\EndAccSupp{}}%

\renewcommand*{\emailsymbol}{%
\protect\BeginAccSupp{ActualText=Email:}%
{{\small\faEnvelopeO}~}%
\protect\EndAccSupp{}}%

% Define mySection, which removes symbols from text version
\newcommand{\mySection}[2]{%
\BeginAccSupp{method=pdfstringdef,ActualText=\unichar{'000A}#2:}%
    \section{\texorpdfstring{#1~#2}{#2}}%
\EndAccSupp{}%
}

\newcommand{\mycvitem}[1]{%
  \BeginAccSupp{method=pdfstringdef,ActualText={\unichar{"000A}#1:}}%
    \cvitem{}{\textbf{#1}}%
  \EndAccSupp{}}

%Redefine socials to add full link into text-version
\RenewDocumentCommand{\social}{O{}O{}m}{%
\ifthenelse{\equal{#2}{}}{%
  \ifthenelse{\equal{#1}{linkedin}}{\collectionadd[linkedin]{socials}%
    {\protect\BeginAccSupp{method=pdfstringdef,
    ActualText={\protect\unichar{"000A}http://www.linkedin.com/in/#3%
    \protect\unichar{"000A}}}%
    \protect\httplink[#3]{www.linkedin.com/in/#3}\protect\EndAccSupp{}}}{}%
  \ifthenelse{\equal{#1}{twitter}} {\collectionadd[twitter]{socials}%
    {\protect\BeginAccSupp{method=pdfstringdef,
    ActualText=\protect\unichar{"000A}www.twitter.com/#3%
    \protect\unichar{"000A}}}%
    \protect\httplink[#3]{www.twitter.com/#3}\protect\EndAccSupp}}{}%
  \ifthenelse{\equal{#1}{github}}  {\collectionadd[github]{socials}%
    {\protect\BeginAccSupp{method=pdfstingdef,
    ActualText=\protect\unichar{"000A}www.github.com/#3%
    \protect\unichar{"000A}}%
    \protect\httplink[#3]{www.github.com/#3}\protect\EndAccSupp}}{}%
}
{\collectionadd[#1]{socials}{\protect\httplink[#3]{#2}}}}

%% Personal data
\firstname{John}
\familyname{Doe}
\phone{+1~(555)~123~4567}
\email{[email protected]}
\social[linkedin]{mickeymouse}

\begin{document}

% CURRICULUM VITAE
\newpage
\makecvtitle
\onehalfspacing

\mySection{\faStar}{Professional Summary}
\cvlistitem{I'm a talking mouse, please hire me.}

\mySection{\faIndustry}{Experience}
\cventry{1940-present}{Cartoon character}{Walt Disney Company}{Animation Division}{}{}
\cvlistitem{Many films, please hire me.}
\cventry{1950-present}{Company Mascot}{Walt Disney}{Worldwide}{}{I Hate the Pixar Lamp}

\mySection{\faGraduationCap}{Education}
\cvlistitem{I can talk, please hire me.}

\mySection{\faWrench}{Skills}
\mycvitem{Languages}
\cvlistitem{I can talk, please hire me.}

\mySection{\faTrophy}{Awards}
\cvlistitem{Many Oscars, please hire me.}

\end{document}

我知道这很乱。但它确实有效(至少在我这边)。修补实际cvitem可能会产生不良结果,因为此命令在 的定义中使用cvlistitem。这就是我定义 的原因mycvitem。希望这至少能帮助到某些人。

一如既往,感谢社区

答案2

为什么你的 PDF 无法正确搜索?答案是两个极端之一。要么你有一个可搜索的 PDF,但你的简历内容却因搜索引擎试图找到的内容而变得糟糕或者您的简历内容丰富,但您的 PDF 编码不正确,无法作为标准 PDF 进行搜索。前一个问题无法通过切换到 Word 来解决。您必须花时间用适当的关键字和措辞来构建您的简历。后一个问题可以通过切换到 Word 来解决。

如果您遇到第二个问题并且仍然想使用 LaTeX,我建议您在编码中避免使用所有图标、项目符号、线条和颜色。同时删除所有非 PDF 标准字体。坚持基本的最低限度。例如,在 Adob​​e 中打开您的 PDF 并检查字体是否符合 14 标准。

相关内容