Developer Docs

LaTeX Template Guide (Docs)

Technical documentation for Vitae LaTeX templates: fork workflow, .tex and .sty roles, placeholders, and safe iteration.

LaTeX template mode is for teams that need strict output control. If you are new to LaTeX, follow the fork-first workflow below instead of starting from blank files.

Plan requirement

Full LaTeX and .sty editing requires Enterprise access.

Noob-safe workflow: always fork first

  1. Choose an existing template close to your target style.
  2. Fork it to create a safe editable copy.
  3. Edit incrementally and preview after each change.

.tex vs .sty explained simply

  • .tex: layout skeleton and placeholder placement.
  • .sty: rendering commands/macros and low-level styling behavior.

Variable and placeholder reference

All placeholders

FieldTypeRequiredDefaultConstraintsNotes
%%firstname%% / %%lastname%%stringNoCandidate identity fields.
%%professionaltitle%%stringNoRole title in header.
%%email%%stringNoCandidate email address.
%%phone%%stringNoCandidate phone number.
%%location%%stringNoConstructed as "City, Country" from candidate address fields.
%%nationality%%stringNoCandidate nationality.
%%linkedin%%stringNoLinkedIn profile URL (URL-escaped for LaTeX \href safety).
%%summary%%stringNoConcatenates personal.summary + personal.motivation with a double-newline separator. Omitted entirely when both are empty.
%%experience_block%%blockNoRendered experience entries. Derived from projects when available; falls back to cv.experience only when no projects exist.
%%education_block%%blockNoRendered education entries.
%%skills_block%%blockNoRendered skills groups. When %%languages_block%% is present in the template, spoken/written languages are excluded from skills to avoid duplication.
%%certifications_block%%blockNoRendered certifications as a LaTeX itemize list.
%%projects_block%%blockNoEmployer-grouped project entries with sub-projects and optional employer logos.
%%languages_block%%blockNoStandalone language table with spoken/written proficiency columns.
%%companylogo%%stringNoEmits \companylogo{filename} when show_logo=True and a logo file exists; otherwise empty string.
%%primary_color_hex%%stringNoAccent color hex value (without #). Defaults to 2563EB (blue) when not set.
%%sections%%structuralNoConfig-driven assembled sections (Pro-tier only). Requires a StructureConfig attached to the template. Replaces individual block placeholders with a single ordered output.

Behavioral notes

  • %%summary%% concatenates personal.summary and personal.motivation with a double-newline separator. If both are empty, the placeholder resolves to an empty string.
  • %%experience_block%% is derived from projects (not cv.experience). It only falls back to cv.experience when no projects exist for the candidate.
  • %%skills_block%% conditionally excludes spoken/written languages when %%languages_block%% is present in the same template, preventing duplication.
  • %%primary_color_hex%% defaults to 2563EB (blue) when no color is configured on the template.
  • %%companylogo%% emits \companylogo{filename} only when show_logo=True and a logo file exists. Otherwise it outputs an empty string.
  • %%sections%% requires a StructureConfig attached to the template and is only available on Pro tier and above. When present, it replaces individual block placeholders with a single config-driven ordered output.

Logo and branding behavior

Logo rendering depends on both template placeholders and runtime configuration. For logo output, ensure %%companylogo%% is present and show_logo is enabled.

First working template pattern

\begin{center}
%%companylogo%%
{\LARGE\bfseries %%firstname%% %%lastname%%}\\
{\large %%professionaltitle%%}
\end{center}

\section*{Experience}
%%experience_block%%

Troubleshooting

Preview compile fails

Undo last change and re-apply in smaller edits.

Data not rendering

Check placeholder spelling exactly (no custom variants).

Logo not visible

Confirm logo upload, show_logo enabled, and placeholder present in template.

Pre-publish checklist

  • Validate short and long profile outputs
  • Verify logo and color rendering
  • Confirm no malformed placeholders remain
  • Document intended use-case for this template version