Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .github/workflows/ctan.yml
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
name: CTAN package

# Builds the archive to upload to CTAN and checks it against the CTAN
# rules. When a tag such as v2026.10.14 is pushed, the archive is also
# rules. When a tag such as 2026.10.19 is pushed, the archive is also
# attached to a GitHub release, ready for https://ctan.org/upload.

on:
push:
branches: ['**']
tags: ['v*']
tags: ['[0-9]*', 'v*']
pull_request:
workflow_dispatch:

Expand All @@ -29,7 +29,7 @@ jobs:

- name: Check version information
env:
TAG: ${{ startsWith(github.ref, 'refs/tags/v') && github.ref_name || '' }}
TAG: ${{ startsWith(github.ref, 'refs/tags/') && github.ref_name || '' }}
run: sh tests/version.sh $TAG

- name: Create the CTAN archive
Expand All @@ -50,7 +50,7 @@ jobs:

release:
needs: package
if: startsWith(github.ref, 'refs/tags/v')
if: startsWith(github.ref, 'refs/tags/')
runs-on: ubuntu-latest
permissions:
contents: write
Expand Down
16 changes: 13 additions & 3 deletions CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,17 @@
Changelog for package europecv
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

2026.10.14
----------
2026.10.19
----------
* New class europecv2020, implementing the single-column layout of the Europass CV introduced in 2020 (#37): header with picture, name, personal data and logo, section titles followed by a rule, \ecventry for dates/place/title/organisation, language self-assessment grid, customizable colours. It accepts the commands and options of europecv, so that existing CVs can be converted by changing the name of the class
* New templates cv_template_2020_en.tex and cv_template_2020_it.tex
* Fix the rule that opens the europecv environment, which could be left alone at the bottom of a page (#39)
* The first line of the class, language and example files no longer starts with "%!", which made the "file" utility recognise them as PostScript (#35)
* The footer of europecv uses the default font family (\textup instead of \textrm), so that it follows \familydefault (#34)
* New documentation on XeLaTeX, LuaLaTeX and fontspec (#34)
* The code shared by the two classes (language and encoding options, personal data and cross-referencing commands) has been moved to europecv-common.def
* Translations of the new labels "Other language(s)" and "Levels" in English, French, German, Italian, Portuguese and Spanish
* The GitHub release workflow is triggered by tags without the "v" prefix (e.g. 2026.10.19), as used in the repository
* Fix the input encoding options (latin1, cp1250, koi8-r, ...), which failed with "Undefined control sequence \inputencoding": they now load the inputenc package. The obsolete utf8x option is now the same as utf8 (the ucs package is no longer needed)
* Fix the dutch, slovenian and maltese options, which stopped the compilation because of typos in ecvnl.def, ecvsl.def and ecvmt.def
* Maltese: the letters h and H with stroke now work with pdfLaTeX (they are taken from the maltese package if loaded, and drawn otherwise); updated the Maltese example for XeLaTeX/LuaLaTeX
Expand All @@ -18,7 +27,8 @@ Changelog for package europecv
* Fix the biber template (renamed to cv_template_en_biber.tex, missing photo, configuration file not matching the bib file names)
* Removed generated files (*-eps-converted-to.pdf) from the package; added a Makefile to build the documentation and the CTAN archive, a smoke test for all languages and a GitHub workflow
* Updated documentation: dead links, dependencies, encodings, Maltese, typos; rewritten README for CTAN
* Contributors: Giuseppe Silano
* Improved French translation (#45)
* Contributors: tytyvillus, rodolfo-medina, callegar, Giuseppe Silano

2025.05.14
----------
Expand Down
5 changes: 4 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
PKG = europecv
LATEX = pdflatex -interaction=nonstopmode -halt-on-error
EXAMPLES = minimal europass-cv bulgarian-utf8 bulgarian-koi8-r greek-utf8
TEMPLATES = cv_template_en cv_template_academic_en
TEMPLATES = cv_template_en cv_template_academic_en cv_template_2020_en cv_template_2020_it

.PHONY: all doc examples templates check ctan ctancheck clean

Expand Down Expand Up @@ -44,6 +44,9 @@ check: doc examples templates
sh tests/languages.sh pdflatex
sh tests/languages.sh xelatex
sh tests/languages.sh lualatex
sh tests/languages.sh pdflatex europecv2020
sh tests/languages.sh xelatex europecv2020
sh tests/languages.sh lualatex europecv2020

ctan:
rm -rf build
Expand Down
36 changes: 31 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,21 @@

# europecv – An unofficial LaTeX class for European curricula vitae

Version 2026.10.14 (2026-10-14)
Version 2026.10.19 (2026-10-19)

`europecv` is an unofficial LaTeX implementation of the standard model for
curricula vitae (the *Europass CV*) as recommended by the European Commission.
Although primarily intended for users in the European Union, the class can be
used for any kind of curriculum vitae (possibly with the options `notitle`,
`nobranding` and `nologo`).

The package also contains the `europecv2020` class, which implements the
single-column layout of the CVs created with the Europass online editor since
2020 (header with picture and personal data, section titles followed by a
rule, entries with dates, title and organisation, language self-assessment
grid). It shares most commands with `europecv`, so an existing CV can usually
be converted by just changing the name of the class.

The class supports 27 languages (Bulgarian, Catalan, Czech, Danish, Dutch,
English, Estonian, Finnish, French, Galician, German, Greek, Hungarian,
Icelandic, Italian, Latvian, Lithuanian, Maltese, Norwegian, Polish,
Expand Down Expand Up @@ -40,20 +47,38 @@ A minimal curriculum vitae:
\end{document}
```

With the 2020 layout:

```latex
\documentclass[english,a4paper]{europecv2020}
\usepackage[T1]{fontenc}
\usepackage[scaled=.92]{helvet}
\ecvname{Name Surname}
\ecvemail{name.surname@email.com}
\begin{document}
\ecvpersonalinfo
\section{Work experience}
\ecventry{01/09/2020 -- Current}{Milan, Italy}{Engineer}{Company}
Description of the activities.
\end{document}
```

The full documentation is in `europecv.pdf`. Ready-to-use templates are in the
`templates` folder and further examples in the `examples` folder.

## Contents of the package

| File(s) | Description |
|---------------------------------|------------------------------------------------------|
| `europecv.cls` | The document class |
| `europecv.cls` | The document class (original Europass layout) |
| `europecv2020.cls` | The document class for the 2020 Europass layout |
| `europecv-common.def` | Code shared by the two classes |
| `ecv*.def` | Language definition files (`ecven.def` is English, `ecvit.def` Italian, ...) |
| `europasslogo.{eps,pdf}` | Europass logo (unofficial vector version) |
| `EuropeFlag*.{eps,pdf}` | Flags of the European Union |
| `europecv.tex`, `europecv.pdf` | Documentation (source and PDF) |
| `examples/` | Examples (minimal CV, Bulgarian, Greek, Maltese, ...) |
| `templates/` | Templates (standard, academic, and with biblatex/biber) |
| `templates/` | Templates (standard, academic, with biblatex/biber, and 2020 layout in English and Italian) |
| `CHANGELOG.rst` | History of changes |
| `CONTRIBUTING.md` | How to contribute |
| `LICENSE` | The LaTeX Project Public License, version 1.3c |
Expand All @@ -63,7 +88,8 @@ The full documentation is in `europecv.pdf`. Ready-to-use templates are in the
`europecv` is part of TeX Live and MiKTeX: use the package manager of your TeX
distribution to install or update it.

To install it manually, copy `europecv.cls`, the `ecv*.def` files, and the
To install it manually, copy `europecv.cls`, `europecv2020.cls`, the
`europecv-common.def` and `ecv*.def` files, and the
logo and flag images (`europasslogo.*` and `EuropeFlag*.*`) into a directory
searched by TeX, e.g. `TEXMFHOME/tex/latex/europecv/`, and the documentation
into `TEXMFHOME/doc/latex/europecv/`. Alternatively, simply put these files in
Expand Down Expand Up @@ -131,7 +157,7 @@ The GitHub workflows in `.github/workflows` run automatically:
- `build.yml` compiles the documentation, the examples, the templates and all
the language options on every push and pull request;
- `ctan.yml` builds and checks the CTAN archive (including CTAN's `pkgcheck`);
pushing a tag named after the version (e.g. `v2026.10.14`) also creates a
pushing a tag named after the version (e.g. `2026.10.19`) also creates a
GitHub release with `europecv.zip` attached, ready for the CTAN upload;
- `links.yml` looks for dead links in the documentation once a month;
- `stale.yml` and `welcome.yml` manage stale issues and greet new contributors.
Expand Down
2 changes: 1 addition & 1 deletion ecvbg.def
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
%!TEX encoding = UTF-8 Unicode
% !TEX encoding = UTF-8 Unicode
%
% Translation completed, 01/03/2020
\ProvidesFile{ecvbg.def}[2026/10/14 europecv Bulgarian definitions]
Expand Down
2 changes: 1 addition & 1 deletion ecvca.def
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
%!TEX encoding = UTF-8 Unicode
% !TEX encoding = UTF-8 Unicode
%
% Translation completed, 01/03/2020
\ProvidesFile{ecvca.def}[2026/10/14 europecv Catalan definitions]
Expand Down
2 changes: 1 addition & 1 deletion ecvcs.def
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
%!TEX encoding = UTF-8 Unicode
% !TEX encoding = UTF-8 Unicode
%
% Translation finished, 01/03/2020
\ProvidesFile{ecvcs.def}[2026/10/14 europecv Czech definitions]
Expand Down
2 changes: 1 addition & 1 deletion ecvda.def
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
%!TEX encoding = UTF-8 Unicode
% !TEX encoding = UTF-8 Unicode
%
% Translation finished, 01/03/2020
\ProvidesFile{ecvda.def}[2026/10/14 europecv Danish definitions]
Expand Down
7 changes: 5 additions & 2 deletions ecvde.def
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
%!TEX encoding = UTF-8 Unicode
% !TEX encoding = UTF-8 Unicode
%
% Translation completed on 01/03/2020
\ProvidesFile{ecvde.def}[2026/10/14 europecv German definitions]
\ProvidesFile{ecvde.def}[2026/10/19 europecv German definitions]
% Personal information
\def\ecv@infosectionkey{\ecv@utf{Angaben zur Person}}
\def\ecv@datekey{\ecv@utf{Aktualisiert am}}
Expand Down Expand Up @@ -39,6 +39,9 @@
\def\ecv@cefbasickey{\ecv@utf{Elementare Sprachverwendung}}
\def\ecv@cefindepkey{\ecv@utf{Selbst\"andige Sprachverwendung}}
\def\ecv@cefprofkey{\ecv@utf{Kompetente Sprachverwendung}}
% Used by the europecv2020 class
\def\ecv@otherlangkey{\ecv@utf{Weitere Sprache(n)}}
\def\ecv@levelskey{\ecv@utf{Niveaus}}

\renewcommand*{\ecvbranding}{\ecv@utf{\Large\textbf{E\ecv@kern u\ecv@kern
r\ecv@kern o\ecv@kern p\ecv@kern a\ecv@kern s\ecv@kern s}\\[5pt]}}
Expand Down
7 changes: 5 additions & 2 deletions ecven.def
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
%!TEX encoding = UTF-8 Unicode
% !TEX encoding = UTF-8 Unicode
%
% Translation completed on 01/03/2020
\ProvidesFile{ecven.def}[2026/10/14 europecv English definitions]
\ProvidesFile{ecven.def}[2026/10/19 europecv English definitions]
% Personal information
\def\ecv@infosectionkey{\ecv@utf{Personal information}}
\def\ecv@datekey{\ecv@utf{Updated \\}}
Expand Down Expand Up @@ -39,6 +39,9 @@
\def\ecv@cefbasickey{\ecv@utf{Basic user}}
\def\ecv@cefindepkey{\ecv@utf{Independent user}}
\def\ecv@cefprofkey{\ecv@utf{Proficient user}}
% Used by the europecv2020 class
\def\ecv@otherlangkey{\ecv@utf{Other language(s)}}
\def\ecv@levelskey{\ecv@utf{Levels}}
Comment thread
coderabbitai[bot] marked this conversation as resolved.

\providecommand*{\ecvbranding}{\ecv@utf{\Large\textbf{E\ecv@kern u\ecv@kern
r\ecv@kern o\ecv@kern p\ecv@kern a\ecv@kern s\ecv@kern s}\\[5pt]}}
Expand Down
7 changes: 5 additions & 2 deletions ecves.def
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
%!TEX encoding = UTF-8 Unicode
% !TEX encoding = UTF-8 Unicode
%
% Translation completed on 01/02/2024
\ProvidesFile{ecves.def}[2026/10/14 europecv Spanish definitions]
\ProvidesFile{ecves.def}[2026/10/19 europecv Spanish definitions]
% Personal information
\def\ecv@infosectionkey{\ecv@utf{Informaci\'on personal}}
\def\ecv@datekey{\ecv@utf{Actualizado el\\}}
Expand Down Expand Up @@ -39,6 +39,9 @@
\def\ecv@cefbasickey{\ecv@utf{Usuario b\'asico}}
\def\ecv@cefindepkey{\ecv@utf{Usuario independiente}}
\def\ecv@cefprofkey{\ecv@utf{Usuario competente}}
% Used by the europecv2020 class
\def\ecv@otherlangkey{\ecv@utf{Otro(s) idioma(s)}}
\def\ecv@levelskey{\ecv@utf{Niveles}}

\renewcommand*{\ecvbranding}{\\[5pt]\ecv@utf{\Large\textbf{E\ecv@kern u\ecv@kern
r\ecv@kern o\ecv@kern p\ecv@kern a\ecv@kern s\ecv@kern s}}}
Expand Down
2 changes: 1 addition & 1 deletion ecvet.def
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
%!TEX encoding = UTF-8 Unicode
% !TEX encoding = UTF-8 Unicode
%
% Translation completed on 01/03/2020
\ProvidesFile{ecvet.def}[2026/10/14 europecv Estonian definitions]
Expand Down
2 changes: 1 addition & 1 deletion ecvfi.def
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
%!TEX encoding = UTF-8 Unicode
% !TEX encoding = UTF-8 Unicode
%
% Translation completed on 01/03/2020
\ProvidesFile{ecvfi.def}[2026/10/14 europecv Finnish definitions]
Expand Down
7 changes: 5 additions & 2 deletions ecvfr.def
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
%!TEX encoding = UTF-8 Unicode
% !TEX encoding = UTF-8 Unicode
%
% Translation completed on 01/03/2020
\ProvidesFile{ecvfr.def}[2026/10/14 europecv French definitions]
\ProvidesFile{ecvfr.def}[2026/10/19 europecv French definitions]
% Informations personnelles
\def\ecv@infosectionkey{\ecv@utf{Informations personnelles}}
\def\ecv@datekey{\ecv@utf{Mis à jour le }}
Expand Down Expand Up @@ -39,6 +39,9 @@
\def\ecv@cefbasickey{\ecv@utf{Utilisateur \'el\'ementaire}}
\def\ecv@cefindepkey{\ecv@utf{Utilisateur Ind\'ependant}}
\def\ecv@cefprofkey{\ecv@utf{Utilisateur exp\'eriment\'e}}
% Used by the europecv2020 class
\def\ecv@otherlangkey{\ecv@utf{Autre(s) langue(s)}}
\def\ecv@levelskey{\ecv@utf{Niveaux}}

\renewcommand*{\ecvbranding}{\\[5pt]\ecv@utf{\Large\textbf{E\ecv@kern u\ecv@kern
r\ecv@kern o\ecv@kern p\ecv@kern a\ecv@kern s\ecv@kern s}}}
Expand Down
2 changes: 1 addition & 1 deletion ecvgl.def
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
%!TEX encoding = UTF-8 Unicode
% !TEX encoding = UTF-8 Unicode
%
% Translation completed on 01/03/2020
\ProvidesFile{ecvgl.def}[2026/10/14 europecv Galician definitions]
Expand Down
2 changes: 1 addition & 1 deletion ecvgr.def
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
%!TEX encoding = UTF-8 Unicode
% !TEX encoding = UTF-8 Unicode
%
% WARNING: Requires the babel package loaded with options
% [english,greek] (at least) for \foreignlanguage
Expand Down
2 changes: 1 addition & 1 deletion ecvhu.def
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
%!TEX encoding = UTF-8 Unicode
% !TEX encoding = UTF-8 Unicode
%
% Translation finished, 01/03/2020
\ProvidesFile{ecvhu.def}[2026/10/14 europecv Hungarian definitions]
Expand Down
2 changes: 1 addition & 1 deletion ecvis.def
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
%!TEX encoding = UTF-8 Unicode
% !TEX encoding = UTF-8 Unicode
%
% Translation completed, 01/03/2020
\ProvidesFile{ecvis.def}[2026/10/14 europecv Icelandic definitions]
Expand Down
7 changes: 5 additions & 2 deletions ecvit.def
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
%!TEX encoding = UTF-8 Unicode
% !TEX encoding = UTF-8 Unicode
%
% Translation completed on 01/03/2020
\ProvidesFile{ecvit.def}[2026/10/14 europecv Italian definitions]
\ProvidesFile{ecvit.def}[2026/10/19 europecv Italian definitions]
% Personal information
\def\ecv@infosectionkey{\ecv@utf{Informazioni personali}}
\def\ecv@datekey{\ecv@utf{Aggiornato al }}
Expand Down Expand Up @@ -39,6 +39,9 @@
\def\ecv@cefbasickey{\ecv@utf{Livello elementare}}
\def\ecv@cefindepkey{\ecv@utf{Livello intermedio}}
\def\ecv@cefprofkey{\ecv@utf{Livello avanzato}}
% Used by the europecv2020 class
\def\ecv@otherlangkey{\ecv@utf{Altre lingue}}
\def\ecv@levelskey{\ecv@utf{Livelli}}



Expand Down
2 changes: 1 addition & 1 deletion ecvlt.def
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
%!TEX encoding = UTF-8 Unicode
% !TEX encoding = UTF-8 Unicode
%
% Translation completed, 01/03/2020
\ProvidesFile{ecvlt.def}[2026/10/14 europecv Lithuanian definitions]
Expand Down
2 changes: 1 addition & 1 deletion ecvlv.def
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
%!TEX encoding = UTF-8 Unicode
% !TEX encoding = UTF-8 Unicode
%
% Translation completed on 01/03/2020
\ProvidesFile{ecvlv.def}[2026/10/14 europecv Latvian definitions]
Expand Down
2 changes: 1 addition & 1 deletion ecvmt.def
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
%!TEX encoding = UTF-8 Unicode
% !TEX encoding = UTF-8 Unicode
%
% Translation completed on 01/03/2020
\ProvidesFile{ecvmt.def}[2026/10/14 europecv Maltese definitions]
Expand Down
2 changes: 1 addition & 1 deletion ecvnl.def
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
%!TEX encoding = UTF-8 Unicode
% !TEX encoding = UTF-8 Unicode
%
% Translation completed on 01/03/2020
\ProvidesFile{ecvnl.def}[2026/10/14 europecv Dutch definitions]
Expand Down
2 changes: 1 addition & 1 deletion ecvno.def
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
%!TEX encoding = UTF-8 Unicode
% !TEX encoding = UTF-8 Unicode
%
% Translation completed on 01/03/2020
\ProvidesFile{ecvno.def}[2026/10/14 europecv Norwegian definitions]
Expand Down
2 changes: 1 addition & 1 deletion ecvpl.def
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
%!TEX encoding = UTF-8 Unicode
% !TEX encoding = UTF-8 Unicode
%
% Translation completed on 01/03/2020
\ProvidesFile{ecvpl.def}[2026/10/14 europecv Polish definitions]
Expand Down
7 changes: 5 additions & 2 deletions ecvpt.def
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
%!TEX encoding = UTF-8 Unicode
% !TEX encoding = UTF-8 Unicode
%
% Translation completed on 04/02/2021
\ProvidesFile{ecvpt.def}[2026/10/14 europecv Portuguese definitions]
\ProvidesFile{ecvpt.def}[2026/10/19 europecv Portuguese definitions]
% Personal information
\def\ecv@infosectionkey{\ecv@utf{Informa\c{c}\~ao pessoal}}
\def\ecv@datekey{\ecv@utf{Atualizado a}}
Expand Down Expand Up @@ -39,6 +39,9 @@
\def\ecv@cefbasickey{\ecv@utf{Utilizador elementar}}
\def\ecv@cefindepkey{\ecv@utf{Utilizador independente}}
\def\ecv@cefprofkey{\ecv@utf{Utilizador experiente}}
% Used by the europecv2020 class
\def\ecv@otherlangkey{\ecv@utf{Outra(s) l\'{\i}ngua(s)}}
\def\ecv@levelskey{\ecv@utf{N\'{\i}veis}}

\renewcommand*{\ecvbranding}{\\[5pt]\ecv@utf{\Large\textbf{E\ecv@kern u\ecv@kern r\ecv@kern o\ecv@kern p\ecv@kern a\ecv@kern s\ecv@kern s}}}
\renewcommand*{\ecvtitle}{\ecv@utf{\Large\textbf{C\ecv@kern u\ecv@kern r\ecv@kern r\ecv@kern i\ecv@kern c\ecv@kern u\ecv@kern l\ecv@kern u\ecv@kern m \ecv@kern v\ecv@kern i\ecv@kern t\ecv@kern a\ecv@kern e}}\ecvbranding}
2 changes: 1 addition & 1 deletion ecvro.def
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
%!TEX encoding = UTF-8 Unicode
% !TEX encoding = UTF-8 Unicode
%
% Translation completed on 13/03/2022
\ProvidesFile{ecvro.def}[2026/10/14 europecv Romanian definitions]
Expand Down
2 changes: 1 addition & 1 deletion ecvsk.def
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
%!TEX encoding = UTF-8 Unicode
% !TEX encoding = UTF-8 Unicode
%
% Translation completed on 01/03/2020
\ProvidesFile{ecvsk.def}[2026/10/14 europecv Slovak definitions]
Expand Down
2 changes: 1 addition & 1 deletion ecvsl.def
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
%!TEX encoding = UTF-8 Unicode
% !TEX encoding = UTF-8 Unicode
%
% Translation completed on 01/03/2020
\ProvidesFile{ecvsl.def}[2026/10/14 europecv Slovenian definitions]
Expand Down
Loading
Loading