Upgrade to v2 (#271)

* prepare the base for typst

* rename theme folders

* rename themes

* rename themes

* update testdata with new theme names

* rename themes

* fix docs issues

* fundamentals

* fundamental renames

* generalize `create_a_latex_file`

* generalize render_a_pdf_from_latex

* make latex optional dependency, and add typst as dependency

* first tests with typst

* finish `markdown_to_typst`

* fix `markdown_to_latex`

* finish `markdown_to_typst`

* first steps towards Typst RenderCV themes

* first draft of classic theme

* start working on new design options

* work on new design options

* make default theme: "classic"

* start integrating design options with templates

* rename typst variables

* start working on connections integration

* polish connections

* polish design options and themes

* fix spelling mistakes and improve typst themes

* use ms instead of s in printer

* improve templates

* fix typos

* use ms instead of s in printer

* improve typst templates

* improve

* improve

* improve

* improve

* make PyMuPDF optional

* rename last_updated_date_style to last_updated_date_template

* revert changelog

* progress

* improve

* exclude gifs from sdist

* update tests

* improve templates

* improve templater

* data: update `sample_content.yaml`

* improve

* remove latex support

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* remove testdata

* remove latex

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* rename `locale_catalog` to `locale`

* docs: update developer guide faq

* add new input, rendercv_settings.date

* add show_time_span_in

* create a new function, parse_validation_errors

* improve templates

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* improve

* update templates

* fix experience entry

* improve

* finish templates

* update tests

* update testdata

* remove time_machine

* update sample content

* improve

* add sb2nov theme

* update options

* update theme.options

* update theme.options

* update theme options

* create engineeringresumes templates

* add engineering resumes

* format

* update templates

* add new theme

* fix a typo in sample content

* update templating system

* update options

* add photo support

* update workflows

* improve templates

* improve parse_validation_errors

* create a new interface for web

* fix summary

* improve

* resolve typing issues

* update mkdocs.yaml

* update pyproject.toml

* update docs scripts

* update testdata

* update tests

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* rename column template fields

* update

* update test data

* add moderncv

* fix problems

* moderncv

* create moderncv

* fix tests

* update

* update

* update templates

* update

* use optional dependencies

* fix

* improve

* aa

* a

* update

* update

* update

* update

* rename

* update

* update

* update

* improve

* update

* update

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* update

* update

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* format

* update changelog

* update examples

* update entry figures

* update schema

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
Sina Atalay
2025-01-07 01:30:40 +03:00
committed by GitHub
parent 9b3e43ce82
commit 4331110c55
433 changed files with 101985 additions and 23075 deletions

View File

@@ -6,6 +6,9 @@ on:
types:
- published
permissions:
contents: write
jobs:
call_tests_workflow:
name: Test
@@ -41,6 +44,13 @@ jobs:
- name: Upload package to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
- name: Upload wheel and source distribution
uses: softprops/action-gh-release@v2
with:
files: |
dist/*.whl
dist/*.tar.gz
call_update_files_workflow:
name: Update files
needs:

View File

@@ -23,8 +23,8 @@ jobs:
- name: Set Git credentials
run: |
git config --global user.name "${{ github.actor }}"
git config --global user.email "${{ github.actor }}@users.noreply.github.com"
git config --local user.email "github-actions[bot]@users.noreply.github.com"
git config --local user.name "GitHub Actions [Bot]"
- name: Update schema.json
continue-on-error: true

13
.gitignore vendored
View File

@@ -162,27 +162,18 @@ cython_debug/
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/
# LaTeX intermediate files
*.aux
*.log
*.fdb_latexmk
*.fls
*.out
*.synctex.gz
*.pdf
# VSCode
.vscode/
# Personal CVs
*_CV.yaml
*_cv.py
*_CV.tex
*_CV.typ
rendercv_output/
# Include reference files
!/tests/testdata/**/*.pdf
!/tests/testdata/**/*.tex
!/tests/testdata/**/*.typ
!/tests/testdata/**/*.md
!/tests/testdata/**/*.html
!/tests/testdata/**/*.yaml

View File

@@ -2,7 +2,7 @@
FROM python:3.13-slim
# Install RenderCV:
RUN pip install rendercv
RUN pip install "rendercv[full]"
# Create a directory for the app
WORKDIR /rendercv

View File

@@ -11,13 +11,13 @@ _The engine of the [RenderCV App](https://rendercv.com)_
</div>
RenderCV engine is a Python package with a command-line interface (CLI) that allows you to version-control your CV as source code.
RenderCV engine is a Typst-based Python package with a command-line interface (CLI) that allows you to version-control your CV/resume as source code. It reads a CV written in a YAML file with Markdown syntax, converts it into a [Typst](https://typst.app) code, and generates a PDF.
RenderCV engine's focus is to provide these three features:
- **Content-first approach:** CV writers should be able to focus on the content instead of worrying about the formatting.
- **A mechanism to version-control a CV's content and design separately:** The content and design are version-controlled as a source code completely separately.
- **Robustness:** A robust system that always delivers a PDF if there aren't any errors. If there are errors, it provides clear explanations and solutions.
- **Content-first approach:** Users should be able to focus on the content instead of worrying about the formatting.
- **A mechanism to version-control a CV's content and design separately:** The content and design of a CV are separate issues and they should be treated separately.
- **Robustness:** A PDF should be delivered if there aren't any errors. If errors exist, they should be clearly explained along with solutions.
It takes a YAML file that looks like this:
@@ -49,23 +49,24 @@ cv:
experience: ...
```
Then, it produces one of these PDFs with its corresponding $\LaTeX$ code, Markdown file, HTML file, and images as PNGs. Click on the images below to preview PDF files.
Then, it produces one of these PDFs with its corresponding Typst file, Markdown file, HTML file, and images as PNGs. Click on the images below to preview PDF files.
| [![Classic Theme Example of RenderCV](https://raw.githubusercontent.com/rendercv/rendercv/main/docs/assets/images/classic.png)](https://github.com/rendercv/rendercv/blob/main/examples/John_Doe_ClassicTheme_CV.pdf) | [![Sb2nov Theme Example of RenderCV](https://raw.githubusercontent.com/rendercv/rendercv/main/docs/assets/images/sb2nov.png)](https://github.com/rendercv/rendercv/blob/main/examples/John_Doe_Sb2novTheme_CV.pdf) |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| [![Moderncv Theme Example of RenderCV](https://raw.githubusercontent.com/rendercv/rendercv/main/docs/assets/images/moderncv.png)](https://github.com/rendercv/rendercv/blob/main/examples/John_Doe_ModerncvTheme_CV.pdf) | [![Engineeringresumes Theme Example of RenderCV](https://raw.githubusercontent.com/rendercv/rendercv/main/docs/assets/images/engineeringresumes.png)](https://github.com/rendercv/rendercv/blob/main/examples/John_Doe_EngineeringresumesTheme_CV.pdf) |
| [![Engineeringclassic Theme Example of RenderCV](https://raw.githubusercontent.com/rendercv/rendercv/main/docs/assets/images/engineeringclassic.png)](https://github.com/rendercv/rendercv/blob/main/examples/John_Doe_EngineeringclassicTheme_CV.pdf) | |
RenderCV comes with a JSON Schema so that the YAML input file can be filled out interactively.
![JSON Schema of RenderCV](https://raw.githubusercontent.com/rendercv/rendercv/main/docs/assets/images/schema.gif)
## Quick Start Guide
## Getting Started
RenderCV engine is very easy to install (`pip install rendercv`) and easy to use (`rendercv new "John Doe"`). Follow the [user guide](https://docs.rendercv.com/user_guide) to get started.
RenderCV engine is very easy to install (`pip install "rendercv[full]"`) and easy to use (`rendercv new "John Doe"`). Follow the [user guide](https://docs.rendercv.com/user_guide) to get started.
## Motivation
We are developing a purpose-built app for writing CVs and resumes that will be available on mobile and web. This Python project is the foundation of that app. Check out [our blog post](https://rendercv.com/rendercv-latex-cv-framework/) to learn more about why one would use such an app.
We are developing a [purpose-built app](https://rendercv.com) for writing CVs and resumes that will be available on mobile and web. This Python project is the foundation of that app. Check out [our blog post](https://rendercv.com/introducing-rendercv/) to learn more about why one would use such an app.
## Contributing

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 476 KiB

After

Width:  |  Height:  |  Size: 3.8 MiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 49 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

After

Width:  |  Height:  |  Size: 51 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 35 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 20 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 59 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 38 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 MiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 537 KiB

After

Width:  |  Height:  |  Size: 4.0 MiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 52 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 53 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 39 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 63 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 42 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 412 KiB

After

Width:  |  Height:  |  Size: 3.6 MiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 53 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 54 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 40 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 23 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 65 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 44 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 567 KiB

After

Width:  |  Height:  |  Size: 3.6 MiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 64 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 61 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 43 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 25 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

After

Width:  |  Height:  |  Size: 72 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 43 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

View File

@@ -17,6 +17,27 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
### Removed
-->
## [2.0] - January 7, 2025
> **Full Changelog**: [v1.18...v2.0]
RenderCV has transitioned from using $\LaTeX$ to Typst. RenderCV is now much faster and more powerful.
### Added
- RenderCV now supports Chineese, Japanese, and Korean characters by default ([#61](https://github.com/rendercv/rendercv/issues/61)).
- A new theme has been added: `engineeringclassics`.
- `summary` field has been added to `NormalEntry`, `ExperienceEntry`, and `EducationEntry` ([#210](https://github.com/rendercv/rendercv/issues/210)).
- `rendercv_settings.date` field has been added for time span calculations and last updated date text.
### Changed
- $\LaTeX$ has been replaced with Typst.
- The `design` field has been changed completely. See the [documentation](https://docs.rendercv.com/user_guide/structure_of_the_yaml_input_file/#design-field) for details.
- The `locale_catalog` field has been renamed to `locale` and some fields has been moved from `design` to `locale`. See the [documentation](https://docs.rendercv.com/user_guide/structure_of_the_yaml_input_file/#locale-field) for details.
- The `moderncv` theme's header has been changed.
## [1.18] - January 1, 2025
> **Full Changelog**: [v1.17...v1.18]
@@ -27,7 +48,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
### Fixed
- `locale_catalog` field has been fixed ([#282](https://github.com/rendercv/rendercv/issues/275)).
- `locale` field has been fixed ([#282](https://github.com/rendercv/rendercv/issues/275)).
## [1.17] - December 25, 2024
@@ -39,7 +60,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
- `markdown_to_latex` filter has been added to Jinja templates ([#269](https://github.com/rendercv/rendercv/pull/269)).
### Changed
- `design.last_updated_date_style` and `design.page_numbering_style` fields are moved to `locale_catalog.last_updated_date_style` and `locale_catalog.page_numbering_style` fields, respectively ([#270](https://github.com/rendercv/rendercv/pull/270)).
- `design.last_updated_date_style` and `design.page_numbering_style` fields are moved to `locale.last_updated_date_style` and `locale.page_numbering_style` fields, respectively ([#270](https://github.com/rendercv/rendercv/pull/270)).
## [1.16] - December 10, 2024
@@ -58,7 +79,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
- Four new options are added to the `rendercv render` command:
- `--watch` ([#170](https://github.com/rendercv/rendercv/pull/170)). It re-runs RenderCV automatically whenever the input file changes.
- `--design`, `--locale_catalog`, and `--rendercv_settings` ([#220](https://github.com/rendercv/rendercv/pull/220)). They take the `design`, `locale_catalog`, and `rendercv_settings` fields as separate YAML files.
- `--design`, `--locale`, and `--rendercv_settings` ([#220](https://github.com/rendercv/rendercv/pull/220)). They take the `design`, `locale`, and `rendercv_settings` fields as separate YAML files.
- The docker image of RenderCV is pushed to [Docker Hub](https://hub.docker.com/r/rendercv/rendercv) ([#222](https://github.com/rendercv/rendercv/issues/222)).
- Telegram has been added as a social network type ([#187](https://github.com/rendercv/rendercv/issues/187)).
- Math equations are now displayed in HTML with KaTeX ([#200](https://github.com/rendercv/rendercv/pull/200)).
@@ -97,7 +118,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
### Added
- Arbitrary keys are now allowed in the `cv` field. For details, see [here](../user_guide/structure_of_the_yaml_input_file.md#using-arbitrary-keys).
- Two new fields have been added to the `locale_catalog` field: `phone_number_format` and `date_style` ([#130](https://github.com/rendercv/rendercv/issues/130)). For details, see [here](../user_guide/structure_of_the_yaml_input_file.md#locale_catalog-field).
- Two new fields have been added to the `locale` field: `phone_number_format` and `date_style` ([#130](https://github.com/rendercv/rendercv/issues/130)). For details, see [here](../user_guide/structure_of_the_yaml_input_file.md#locale-field).
### Changed
@@ -116,7 +137,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
### Added
- Arbitrary keys are now allowed in entry types. Users can use these keys in their templates. For details, see the [documentation](../user_guide/structure_of_the_yaml_input_file.md#using-arbitrary-keys).
- The `locale_catalog.full_names_of_months` field has been added to the data model ([#111](https://github.com/rendercv/rendercv/issues/111)).
- The `locale.full_names_of_months` field has been added to the data model ([#111](https://github.com/rendercv/rendercv/issues/111)).
- The `TODAY` placeholder can be used in the `design.page_numbering_style` field now.
### Changed
@@ -125,7 +146,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
### Fixed
- The `TODAY` placeholder in `design.last_updated_style` field is localized with the new `locale_catalog.full_names_of_months` field ([#111](https://github.com/rendercv/rendercv/issues/111))
- The `TODAY` placeholder in `design.last_updated_style` field is localized with the new `locale.full_names_of_months` field ([#111](https://github.com/rendercv/rendercv/issues/111))
- Rendering Markdown links with special characters has been fixed ([#112](https://github.com/rendercv/rendercv/issues/112)).
## [1.11] - June 19, 2024
@@ -137,7 +158,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
- CLI options now have short versions. See the [CLI documentation](https://docs.rendercv.com/user_guide/cli/) for more information.
- CLI now notifies the user when a new version is available ([#89](https://github.com/rendercv/rendercv/issues/89)).
- `Google Scholar` has been added as a social network type ([#85](https://github.com/rendercv/rendercv/issues/85)).
- Two new design options have been added to the `classic`, `sb2nov`, and `engineeringresumes` themes: `seperator_between_connections` and `use_icons_for_connections`.
- Two new design options have been added to the `classic`, `sb2nov`, and `engineeringresumes` themes: `separator_between_connections` and `use_icons_for_connections`.
### Changed
@@ -179,7 +200,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
### Added
- RenderCV is now a multilingual tool. English strings can be overridden with `locale_catalog` section in the YAML input file ([#26](https://github.com/rendercv/rendercv/issues/26), [#20](https://github.com/rendercv/rendercv/pull/20)). See the [documentation](../user_guide/structure_of_the_yaml_input_file.md#locale_catalog-field) for more information.
- RenderCV is now a multilingual tool. English strings can be overridden with `locale` section in the YAML input file ([#26](https://github.com/rendercv/rendercv/issues/26), [#20](https://github.com/rendercv/rendercv/pull/20)). See the [documentation](../user_guide/structure_of_the_yaml_input_file.md#locale-field) for more information.
- PNG files for each page can be generated now ([#57](https://github.com/rendercv/rendercv/issues/57)).
- `rendercv new` command now generates Markdown and $\LaTeX$ source files in addition to the YAML input file so that the default templates can be modified easily.
- A new CLI command has been added, `rendercv create-theme`, to allow users to create their own themes easily.
@@ -245,7 +266,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
- The new theme, `engineeringresumes`, is ready to be used now.
- The `education_degree_width` design option has been added for the `classic` theme.
- `last_updated_date_style` design option has been added for all the themes except `moderncv`.
- `last_updated_date_template` design option has been added for all the themes except `moderncv`.
### Fixed
@@ -452,6 +473,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
The first release of RenderCV.
[v1.18...v2.0]: https://github.com/rendercv/rendercv/compare/v1.18...v2.0
[v1.17...v1.18]: https://github.com/rendercv/rendercv/compare/v1.17...v1.18
[v1.16...v1.17]: https://github.com/rendercv/rendercv/compare/v1.16...v1.17
[v1.15...v1.16]: https://github.com/rendercv/rendercv/compare/v1.15...v1.16
@@ -479,6 +501,7 @@ The first release of RenderCV.
[v0.3...v0.4]: https://github.com/rendercv/rendercv/compare/v0.3...v0.4
[v0.2...v0.3]: https://github.com/rendercv/rendercv/compare/v0.2...v0.3
[v0.1...v0.2]: https://github.com/rendercv/rendercv/compare/v0.1...v0.2
[2.0]: https://github.com/rendercv/rendercv/releases/tag/v2.0
[1.18]: https://github.com/rendercv/rendercv/releases/tag/v1.18
[1.17]: https://github.com/rendercv/rendercv/releases/tag/v1.17
[1.16]: https://github.com/rendercv/rendercv/releases/tag/v1.16

View File

@@ -8,7 +8,7 @@ To add a new social network to RenderCV, go to the `rendercv/data/models/curricu
1. Append the social network name (for example, "Facebook") to the `SocialNetworkName` type.
2. If necessary, implement its username validation in the `SocialNetwork.check_username` method.
3. Implement its URL generation using the `SocialNetwork.url` method. If the URL can be generated by appending the username to a hostname, only update `url_dictionary`.
4. Finally, include the $\LaTeX$ icon of the social network to the `icon_dictionary` in the `CurriculumVitae.connections` method. RenderCV uses the [`fontawesome5`](https://ctan.org/pkg/fontawesome5?lang=en) package. The available icons can be seen [here](https://fosszone.csd.auth.gr/CTAN/fonts/fontawesome5/doc/fontawesome5.pdf).
4. Finally, include the Typst icon of the social network to the `icon_dictionary` in the `CurriculumVitae.connections` method. RenderCV uses the [`fontawesome`](https://typst.app/universe/package/fontawesome/) package.
Then, the tests should be implemented for the new social network with the following steps:

View File

@@ -6,13 +6,13 @@
[![pypi-version](https://img.shields.io/pypi/v/rendercv?label=PyPI%20version&color=rgb(0%2C79%2C144))](https://pypi.python.org/pypi/rendercv)
[![pypi-downloads](https://img.shields.io/pepy/dt/rendercv?label=PyPI%20downloads&color=rgb(0%2C%2079%2C%20144))](https://pypistats.org/packages/rendercv)
RenderCV engine is a Python package with a command-line interface (CLI) that allows you to version-control your CV as source code.
RenderCV engine is a Typst-based Python package with a command-line interface (CLI) that allows you to version-control your CV/resume as source code. It reads a CV written in a YAML file with Markdown syntax, converts it into a [Typst](https://typst.app) code, and generates a PDF.
RenderCV engine's focus is to provide these three features:
- **Content-first approach:** CV writers should be able to focus on the content instead of worrying about the formatting.
- **A mechanism to version-control a CV's content and design separately:** The content and design are version-controlled as a source code completely separately.
- **Robustness:** A robust system that always delivers a PDF if there aren't any errors. If there are errors, it provides clear explanations and solutions.
- **Content-first approach:** Users should be able to focus on the content instead of worrying about the formatting.
- **A mechanism to version-control a CV's content and design separately:** The content and design of a CV are separate issues and they should be treated separately.
- **Robustness:** A PDF should be delivered if there aren't any errors. If errors exist, they should be clearly explained along with solutions.
It takes a YAML file that looks like this:
@@ -44,23 +44,24 @@ cv:
experience: ...
```
Then, it produces one of these PDFs with its corresponding $\LaTeX$ code, Markdown file, HTML file, and images as PNGs. Click on the images below to preview PDF files.
Then, it produces one of these PDFs with its corresponding Typst file, Markdown file, HTML file, and images as PNGs. Click on the images below to preview PDF files.
| [![Classic Theme Example of RenderCV](https://raw.githubusercontent.com/rendercv/rendercv/main/docs/assets/images/classic.png)](https://github.com/rendercv/rendercv/blob/main/examples/John_Doe_ClassicTheme_CV.pdf) | [![Sb2nov Theme Example of RenderCV](https://raw.githubusercontent.com/rendercv/rendercv/main/docs/assets/images/sb2nov.png)](https://github.com/rendercv/rendercv/blob/main/examples/John_Doe_Sb2novTheme_CV.pdf) |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| [![Moderncv Theme Example of RenderCV](https://raw.githubusercontent.com/rendercv/rendercv/main/docs/assets/images/moderncv.png)](https://github.com/rendercv/rendercv/blob/main/examples/John_Doe_ModerncvTheme_CV.pdf) | [![Engineeringresumes Theme Example of RenderCV](https://raw.githubusercontent.com/rendercv/rendercv/main/docs/assets/images/engineeringresumes.png)](https://github.com/rendercv/rendercv/blob/main/examples/John_Doe_EngineeringresumesTheme_CV.pdf) |
| [![Engineeringclassic Theme Example of RenderCV](https://raw.githubusercontent.com/rendercv/rendercv/main/docs/assets/images/engineeringclassic.png)](https://github.com/rendercv/rendercv/blob/main/examples/John_Doe_EngineeringclassicTheme_CV.pdf) | |
RenderCV comes with a JSON Schema so that the YAML input file can be filled out interactively.
![JSON Schema of RenderCV](https://raw.githubusercontent.com/rendercv/rendercv/main/docs/assets/images/schema.gif)
## Quick Start Guide
## Getting Started
RenderCV engine is very easy to install (`pip install rendercv`) and easy to use (`rendercv new "John Doe"`). Follow the [user guide](https://docs.rendercv.com/user_guide) to get started.
RenderCV engine is very easy to install (`pip install "rendercv[full]"`) and easy to use (`rendercv new "John Doe"`). Follow the [user guide](https://docs.rendercv.com/user_guide) to get started.
## Motivation
We are developing a purpose-built app for writing CVs and resumes that will be available on mobile and web. This Python project is the foundation of that app. Check out [our blog post](https://rendercv.com/rendercv-latex-cv-framework/) to learn more about why one would use such an app.
We are developing a [purpose-built app](https://rendercv.com) for writing CVs and resumes that will be available on mobile and web. This Python project is the foundation of that app. Check out [our blog post](https://rendercv.com/introducing-rendercv/) to learn more about why one would use such an app.
## Contributing

View File

@@ -0,0 +1,3 @@
# `rendercv.api.functions`
::: rendercv.api.functions

View File

@@ -0,0 +1,3 @@
# `rendercv.api`
::: rendercv.api

View File

@@ -0,0 +1,3 @@
# `rendercv.data.models.locale`
::: rendercv.data.models.locale

View File

@@ -1,3 +0,0 @@
# `rendercv.data.models.locale_catalog`
::: rendercv.data.models.locale_catalog

View File

@@ -5,7 +5,8 @@ hide:
# API Reference
::: rendercv
RenderCV is a Typst-based Python package with a command-line interface (CLI) that allows
you to version-control your CV/resume as source code.
In this section, you can find how RenderCV's components are structured and how they interact with each other. The flowchart below illustrates the general operations of RenderCV.
@@ -22,11 +23,13 @@ flowchart TD
AA --> E
subgraph rendercv.renderer
E[Markdown File] --markdown package--> K[HTML FIle]
D[LaTeX File] --TinyTeX--> L[PDF File]
L --PyMuPDF package--> Z[PNG Files]
D[Typst File] --typst package--> L[PDF File]
D --typst package--> Z[PNG Files]
end
```
- [`api`](api/index.md) package contains the functions to create a clean and simple API for RenderCV.
- [`functions.py`](api/functions.md) module contains the basic functions that are used to interact with RenderCV.
- [`cli`](cli/index.md) package contains the command-line interface (CLI) related code for RenderCV.
- [`commands.py`](cli/commands.md) module contains the CLI commands.
- [`printer.py`](cli/printer.md) module contains the functions and classes that are used to print nice-looking messages to the terminal.
@@ -38,16 +41,17 @@ flowchart TD
- [`entry_types.py`](data/models/entry_types.md) module contains the data models of the available entry types in RenderCV.
- [`curriculum_vitae.py`](data/models/curriculum_vitae.md) module contains the data model of the `cv` field of the input file.
- [`design.py`](data/models/design.md) module contains the data model of the `design` field of the input file.
- [`locale_catalog.py`](data/models/locale_catalog.md) module contains the data model of the `locale_catalog` field of the input file.
- [`locale.py`](data/models/locale.md) module contains the data model of the `locale` field of the input file.
- [`rendercv_data_model.py`](data/models/rendercv_data_model.md) module contains the `RenderCVDataModel` data model, which is the main data model that defines the whole input file structure.
- [`generator.py`](data/generator.md) module contains the functions for generating the JSON Schema of the input data format and a sample YAML input file.
- [`reader.py`](data/reader.md) module contains the functions that are used to read the input files.
- [`renderer`](renderer/index.md) package contains the necessary classes and functions for generating the output files from the `RenderCVDataModel` object.
- [`renderer.py`](renderer/renderer.md) module contains the necessary functions for rendering $\\LaTeX$, PDF, Markdown, HTML, and PNG files from the data model.
- [`templater.py`](renderer/templater.md) module contains the necessary classes and functions for templating the $\\LaTeX$ and Markdown files from the data model.
- [`renderer.py`](renderer/renderer.md) module contains the necessary functions for rendering Typst, PDF, Markdown, HTML, and PNG files from the data model.
- [`templater.py`](renderer/templater.md) module contains the necessary classes and functions for templating the Typst and Markdown files from the data model.
- [`themes`](themes/index.md) package contains the built-in themes of RenderCV.
- [`common_options.py`](themes/common_options.md) module contains some standard data models for design options.
- [`options.py`](themes/options.md) module contains the standard data models for built-in Typst themes' design options
- [`classic`](themes/classic.md) package contains the `classic` theme templates and data models for its design options.
- [`engineeringresumes`](themes/engineeringresumes.md) package contains the `engineeringresumes` theme templates and data models for its design options.
- [`sb2nov`](themes/sb2nov.md) package contains the `sb2nov` theme templates and data models for its design options.
- [`moderncv`](themes/moderncv.md) package contains the `moderncv` theme templates and data models for its design options.
- [`engineeringclassic`](themes/engineeringclassic.md) package contains the `engineeringclassic` theme templates and data models for its design options.

View File

@@ -7,8 +7,8 @@
{% for template_name, template in theme_templates["classic"].items() %}
### {{ template_name }}
```latex
```typst
{{ template }}
```
{% endfor %}
{% endfor %}

View File

@@ -1,3 +0,0 @@
# `rendercv.themes.common_options`
::: rendercv.themes.common_options

View File

@@ -0,0 +1,15 @@
# `rendercv.themes.engineeringclassic`
::: rendercv.themes.engineeringclassic
## Jinja Templates
{% for template_name, template in theme_templates["engineeringclassic"].items() %}
### {{ template_name }}
```typst
{{ template }}
```
{% endfor %}

View File

@@ -7,8 +7,8 @@
{% for template_name, template in theme_templates["engineeringresumes"].items() %}
### {{ template_name }}
```latex
```typst
{{ template }}
```
{% endfor %}
{% endfor %}

View File

@@ -7,8 +7,8 @@
{% for template_name, template in theme_templates["moderncv"].items() %}
### {{ template_name }}
```latex
```typst
{{ template }}
```
{% endfor %}
{% endfor %}

View File

@@ -0,0 +1,3 @@
# `rendercv.themes.options`
::: rendercv.themes.options

View File

@@ -7,8 +7,8 @@
{% for template_name, template in theme_templates["sb2nov"].items() %}
### {{ template_name }}
```latex
```typst
{{ template }}
```
{% endfor %}
{% endfor %}

View File

@@ -10,6 +10,7 @@ import pathlib
import shutil
import tempfile
import fitz
import pdfCropMargins
import pydantic
import ruamel.yaml
@@ -78,7 +79,7 @@ def define_env(env):
theme_templates = {}
for theme in data.available_themes:
theme_templates[theme] = {}
for theme_file in themes_path.glob(f"{theme}/*.tex"):
for theme_file in themes_path.glob(f"{theme}/*.typ"):
theme_templates[theme][theme_file.stem] = theme_file.read_text()
# Update ordering of theme templates
@@ -99,7 +100,7 @@ def define_env(env):
if theme != "markdown":
theme_templates[theme] = {
f"{key}.tex": value for key, value in theme_templates[theme].items()
f"{key}.typ": value for key, value in theme_templates[theme].items()
}
else:
theme_templates[theme] = {
@@ -119,6 +120,34 @@ def define_env(env):
env.variables["available_social_networks"] = ", ".join(social_networks)
def render_pngs_from_pdf(pdf_file_path: pathlib.Path) -> list[pathlib.Path]:
"""Render a PNG file for each page of the given PDF file.
Args:
pdf_file_path: The path to the PDF file.
Returns:
The paths to the rendered PNG files.
"""
# check if the file exists:
if not pdf_file_path.is_file():
message = f"The file {pdf_file_path} doesn't exist!"
raise FileNotFoundError(message)
# convert the PDF to PNG:
png_directory = pdf_file_path.parent
png_file_name = pdf_file_path.stem
png_files = []
pdf = fitz.open(pdf_file_path) # open the PDF file
for page in pdf: # iterate the pages
image = page.get_pixmap(dpi=300) # type: ignore
png_file_path = png_directory / f"{png_file_name}_{page.number + 1}.png" # type: ignore
image.save(png_file_path)
png_files.append(png_file_path)
return png_files
def generate_entry_figures():
"""Generate an image for each entry type and theme."""
# Generate PDF figures for each entry type and theme
@@ -134,13 +163,11 @@ def generate_entry_figures():
for theme in themes:
design_dictionary = {
"theme": theme,
"disable_page_numbering": True,
"disable_last_updated_date": True,
"page": {
"show_page_numbering": False,
"show_last_updated_date": False,
},
}
if theme == "moderncv":
# moderncv theme does not support these options
del design_dictionary["disable_page_numbering"]
del design_dictionary["disable_last_updated_date"]
entry_types = [
"education_entry",
@@ -161,10 +188,10 @@ def generate_entry_figures():
)
# Render
latex_file_path = renderer.create_a_latex_file_and_copy_theme_files(
typst_file_path = renderer.create_a_typst_file_and_copy_theme_files(
data_model, temporary_directory_path
)
pdf_file_path = renderer.render_a_pdf_from_latex(latex_file_path)
pdf_file_path = renderer.render_a_pdf_from_typst(typst_file_path)
# Prepare output directory and file path
output_directory = image_assets_directory / theme
@@ -195,7 +222,7 @@ def generate_entry_figures():
)
# Convert PDF to image
png_file_path = renderer.render_pngs_from_pdf(output_pdf_file_path)[0]
png_file_path = render_pngs_from_pdf(output_pdf_file_path)[0]
desired_png_file_path = output_pdf_file_path.with_suffix(".png")
# If image exists, remove it

View File

@@ -48,6 +48,9 @@ def generate_examples():
output_pdf_file = (
examples_directory_path / "rendercv_output" / "John_Doe_CV.pdf"
)
output_typst_file = (
examples_directory_path / "rendercv_output" / "John_Doe_CV.typ"
)
# Move PDF file to examples directory
new_pdf_file_path = examples_directory_path / f"{yaml_file_path.stem}.pdf"
@@ -55,13 +58,8 @@ def generate_examples():
new_pdf_file_path.unlink()
output_pdf_file.rename(new_pdf_file_path)
# Remove rendercv_output directory
rendercv_output_directory = examples_directory_path / "rendercv_output"
shutil.rmtree(rendercv_output_directory)
# Convert first page of PDF to image
png_file_paths = renderer.render_pngs_from_pdf(new_pdf_file_path)
png_file_paths = renderer.render_pngs_from_typst(output_typst_file)
firt_page_png_file_path = png_file_paths[0]
if len(png_file_paths) > 1:
# Remove other pages
@@ -77,6 +75,11 @@ def generate_examples():
# Move image to desired location
firt_page_png_file_path.rename(desired_png_file_path)
# Remove rendercv_output directory
rendercv_output_directory = examples_directory_path / "rendercv_output"
shutil.rmtree(rendercv_output_directory)
if __name__ == "__main__":
generate_examples()

View File

@@ -30,7 +30,7 @@ This page lists the available commands and options of the RenderCV CLI.
rendercv new "Full Name" --theme "THEME_NAME"
```
- `#!bash --dont-create-theme-source-files` or `#!bash -nolatex`
- `#!bash --dont-create-theme-source-files` or `#!bash -notypst`
Prevents the creation of the theme source files. By default, the theme source files are created.
@@ -65,14 +65,6 @@ This page lists the available commands and options of the RenderCV CLI.
rendercv render "Full_Name_CV.yaml" --watch
```
- `#!bash --use-local-latex-command "LATEX_COMMAND"` or `#!bash -use "LATEX_COMMAND"`
Generates the CV with the local $\LaTeX$ installation, i.e., runs `LATEX_COMMAND`. By default, RenderCV uses its own TinyTeX distribution.
```bash
rendercv render "Full_Name_CV.yaml" --use-local-latex-command "pdflatex"
```
- `#!bash --output-folder-name "OUTPUT_FOLDER_NAME"` or `#!bash -o "OUTPUT_FOLDER_NAME"`
Generates the output files in a folder with the given name. By default, the output folder name is `rendercv_output`. The output folder will be created in the current working directory.
@@ -81,12 +73,12 @@ This page lists the available commands and options of the RenderCV CLI.
rendercv render "Full_Name_CV.yaml" --output-folder-name "OUTPUT_FOLDER_NAME"
```
- `#!bash --latex-path "PATH"` or `#!bash -latex "PATH"`
- `#!bash --typst-path "PATH"` or `#!bash -typst "PATH"`
Copies the generated $\LaTeX$ source code from the output folder and pastes it to the specified path.
Copies the generated Typst source code from the output folder and pastes it to the specified path.
```bash
rendercv render "Full_Name_CV.yaml" --latex-path "PATH"
rendercv render "Full_Name_CV.yaml" --typst-path "PATH"
```
- `#!bash --pdf-path "PATH"` or `#!bash -pdf "PATH"`
@@ -152,12 +144,12 @@ This page lists the available commands and options of the RenderCV CLI.
rendercv render "Full_Name_CV.yaml" --design "design.yaml"
```
- `#!bash --locale-catalog locale_catalog.yaml`
- `#!bash --locale-catalog locale.yaml`
Uses the given locale catalog file for the `locale_catalog` field of the input YAML file.
Uses the given locale catalog file for the `locale` field of the input YAML file.
```bash
rendercv render "Full_Name_CV.yaml" --locale-catalog "locale_catalog.yaml"
rendercv render "Full_Name_CV.yaml" --locale-catalog "locale.yaml"
```
- `#!bash --rendercv-settings rendercv_settings.yaml`

View File

@@ -14,4 +14,108 @@ If you have Docker installed, you can use RenderCV without installing anything e
docker run -it -v ./rendercv:/rendercv docker.io/rendercv/rendercv:latest
```
Then, you can use RenderCV CLI as if it were installed on your machine. The files will be saved in the `rendercv` directory.
Then, you can use RenderCV CLI as if it were installed on your machine. The files will be saved in the `rendercv` directory.
## How to create a custom theme?
RenderCV is a general Typst-based CV framework. It allows you to use any Typst code to generate your CVs. To begin developing a custom theme, run the command below.
```bash
rendercv create-theme "mycustomtheme"
```
This command will create a directory called `mycustomtheme`, which contains the following files:
``` { .sh .no-copy }
├── mycustomtheme
│ ├── __init__.py
│ ├── Preamble.j2.typ
│ ├── Header.j2.typ
│ ├── EducationEntry.j2.typ
│ ├── ExperienceEntry.j2.typ
│ ├── NormalEntry.j2.typ
│ ├── OneLineEntry.j2.typ
│ ├── PublicationEntry.j2.typ
│ ├── TextEntry.j2.typ
│ ├── SectionBeginning.j2.typ
│ └── SectionEnding.j2.typ
└── Your_Full_Name_CV.yaml
```
The files are copied from the `classic` theme. You can update the contents of these files to create your custom theme.
To use your custom theme, update the `design.theme` field in the YAML input file as shown below.
```yaml
cv:
...
design:
theme: mycustomtheme
```
Then, run the `render` command to render your CV with `mycustomtheme`.
!!! note
Since JSON Schema will not recognize the name of the custom theme, it may show a warning in your IDE. This warning can be ignored.
Each of these `*.j2.typ` files is Typst code with some Python in it. These files allow RenderCV to create your CV out of the YAML input.
The best way to understand how they work is to look at the templates of the built-in themes:
- [templates of the `classic` theme](../reference/themes/classic.md#jinja-templates)
For example, the content of `ExperienceEntry.j2.typ` for the `classic` theme is shown below:
```typst
\cventry{
((* if design.show_only_years *))
<<entry.date_string_only_years>>
((* else *))
<<entry.date_string>>
((* endif *))
}{
<<entry.position>>
}{
<<entry.company>>
}{
<<entry.location>>
}{}{}
((* for item in entry.highlights *))
\cvline{}{\small <<item>>}
((* endfor *))
```
The values between `<<` and `>>` are the names of Python variables, allowing you to write a Typst CV without writing any content. They will be replaced with the values found in the YAML input. The values between `((*` and `*))` are Python blocks, allowing you to use loops and conditional statements.
The process of generating Typst files like this is called "templating," and it is achieved with a Python package called [Jinja](https://jinja.palletsprojects.com/en/3.1.x/).
The `__init__.py` file found in the theme directory defines the design options of the custom theme. You can define your custom design options in this file.
For example, an `__init__.py` file is shown below:
```python
from typing import Literal
import pydantic
class YourcustomthemeThemeOptions(pydantic.BaseModel):
theme: Literal["yourcustomtheme"]
option1: str
option2: str
option3: int
option4: bool
```
RenderCV will then parse your custom design options from the YAML input. You can use these variables inside your `*.j2.typ` files as shown below:
```typst
<<design.option1>>
<<design.option2>>
((* if design.option4 *))
<<design.option3>>
((* endif *))
```
!!! info
Refer [here](cli.md#rendercv-create-theme-command) for the complete list of CLI options available for the `create-theme` command.

View File

@@ -4,14 +4,12 @@ This page provides everything you need to know about the usage of RenderCV.
## Installation
> RenderCV doesn't require a $\LaTeX$ installation; it comes with it!
1. Install [Python](https://www.python.org/downloads/) (3.10 or newer).
2. Run the command below to install RenderCV.
```bash
pip install rendercv
pip install "rendercv[full]"
```
## Getting started
@@ -29,11 +27,14 @@ This command will create the following files:
- A directory called `classic`.
This directory contains the $\LaTeX$ templates of RenderCV's default built-in theme, `classic`. You can update its contents to tweak the appearance of the output PDF file.
This directory contains the Typst templates of RenderCV's default built-in theme, `classic`. You can update its contents to tweak the appearance of the output PDF file.
- A directory called `markdown`.
This directory contains the templates of RenderCV's default Markdown template. You can update its contents to tweak the Markdown and HTML output of the CV.
This directory contains the templates of RenderCV's default Markdown template. You can update its contents to tweak the Markdown and HTML output of the CV.
!!! note "A note about `classic` and `markdown` directories"
It's optional to have the `classic` and `markdown` directories. If you don't have them, RenderCV will use the built-in theme and Markdown templates.
!!! info
Refer to the [here](cli.md#rendercv-new-command) for the complete list of CLI options available for the `new` command.
@@ -49,11 +50,10 @@ rendercv render "Your_Name_CV.yaml"
This command will generate a directory called `rendercv_output`, which contains the following files:
- The CV in PDF format, `Your_Name_CV.pdf`.
- $\LaTeX$ source code of the PDF file, `Your_Name_CV.tex`.
- Typst source code of the PDF file, `Your_Name_CV.typ`.
- Images of each page of the PDF file in PNG format, `Your_Name_CV_1.png`, `Your_Name_CV_page_2.png`, etc.
- The CV in Markdown format, `Your_Name_CV.md`.
- The CV in HTML format, `Your_Name_CV.html`. You can open this file in a web browser and copy-paste the content to Grammarly for proofreading.
- Some log and auxiliary files related to the $\LaTeX$ compilation process.
!!! info
Refer to the [here](cli.md#rendercv-render-command) for the complete list of CLI options available for the `render` command.
@@ -66,116 +66,8 @@ For example, `ExperienceEntry` of the `classic` theme can be modified as shown b
``` { .sh .no-copy }
├── classic
│ └── ExperienceEntry.j2.tex # (1)!
│ └── ExperienceEntry.j2.typ # (1)!
└── Your_Full_Name_CV.yaml
```
1. This file will override the built-in `ExperienceEntry.j2.tex` template of the `classic` theme.
## Creating custom themes with the `create-theme` command
RenderCV is a general $\LaTeX$ CV framework. It allows you to use any $\LaTeX$ code to generate your CVs. To begin developing a custom theme, run the command below.
```bash
rendercv create-theme "mycustomtheme"
```
This command will create a directory called `mycustomtheme`, which contains the following files:
``` { .sh .no-copy }
├── mycustomtheme
│ ├── __init__.py
│ ├── Preamble.j2.tex
│ ├── Header.j2.tex
│ ├── EducationEntry.j2.tex
│ ├── ExperienceEntry.j2.tex
│ ├── NormalEntry.j2.tex
│ ├── OneLineEntry.j2.tex
│ ├── PublicationEntry.j2.tex
│ ├── TextEntry.j2.tex
│ ├── SectionBeginning.j2.tex
│ └── SectionEnding.j2.tex
└── Your_Full_Name_CV.yaml
```
The files are copied from the `classic` theme. You can update the contents of these files to create your custom theme.
To use your custom theme, update the `design.theme` field in the YAML input file as shown below.
```yaml
cv:
...
design:
theme: mycustomtheme
```
Then, run the `render` command to render your CV with `mycustomtheme`.
!!! note
Since JSON Schema will not recognize the name of the custom theme, it may show a warning in your IDE. This warning can be ignored.
Each of these `*.j2.tex` files is $\LaTeX$ code with some Python in it. These files allow RenderCV to create your CV out of the YAML input.
The best way to understand how they work is to look at the templates of the built-in themes:
- [templates of the `classic` theme](../reference/themes/classic.md#jinja-templates)
- [templates of the `engineeringresumes` theme](../reference/themes/engineeringresumes.md#jinja-templates)
- [templates of the `sb2nov` theme](../reference/themes/sb2nov.md#jinja-templates)
- [templates of the `moderncv` theme](../reference/themes/moderncv.md#jinja-templates)
For example, the content of `ExperienceEntry.j2.tex` for the `moderncv` theme is shown below:
```latex
\cventry{
((* if design.show_only_years *))
<<entry.date_string_only_years>>
((* else *))
<<entry.date_string>>
((* endif *))
}{
<<entry.position>>
}{
<<entry.company>>
}{
<<entry.location>>
}{}{}
((* for item in entry.highlights *))
\cvline{}{\small <<item>>}
((* endfor *))
```
The values between `<<` and `>>` are the names of Python variables, allowing you to write a $\\LaTeX$ CV without writing any content. They will be replaced with the values found in the YAML input. The values between `((*` and `*))` are Python blocks, allowing you to use loops and conditional statements.
The process of generating $\\LaTeX$ files like this is called "templating," and it is achieved with a Python package called [Jinja](https://jinja.palletsprojects.com/en/3.1.x/).
The `__init__.py` file found in the theme directory defines the design options of the custom theme. You can define your custom design options in this file.
For example, an `__init__.py` file is shown below:
```python
from typing import Literal
import pydantic
class YourcustomthemeThemeOptions(pydantic.BaseModel):
theme: Literal["yourcustomtheme"]
option1: str
option2: str
option3: int
option4: bool
```
RenderCV will then parse your custom design options from the YAML input. You can use these variables inside your `*.j2.tex` files as shown below:
```latex
<<design.option1>>
<<design.option2>>
((* if design.option4 *))
<<design.option3>>
((* endif *))
```
!!! info
Refer [here](cli.md#rendercv-create-theme-command) for the complete list of CLI options available for the `create-theme` command.
1. This file will override the built-in `ExperienceEntry.j2.typ` template of the `classic` theme.

View File

@@ -1,6 +1,6 @@
# Structure of the YAML Input File
RenderCV's input file consists of four parts: `cv`, `design`, `locale_catalog` and `rendercv_settings`.
RenderCV's input file consists of four parts: `cv`, `design`, `locale` and `rendercv_settings`.
```yaml title="Your_Name_CV.yaml"
cv:
@@ -11,7 +11,7 @@ design:
...
YOUR DESIGN
...
locale_catalog:
locale:
...
TRANSLATIONS TO YOUR LANGUAGE
...
@@ -23,10 +23,10 @@ rendercv_settings:
- The `cv` field is mandatory. It contains the **content of the CV**.
- The `design` field is optional. It contains the **design options of the CV**. If you don't provide a `design` field, RenderCV will use the default design options with the `classic` theme.
- The `locale_catalog` field is optional. You can provide translations for some of the strings used in the CV, for example, month abbreviations. RenderCV will use the default English strings if you don't provide a `locale_catalog` field.
- The `rendercv_settings` field is optional. It contains the **settings of RenderCV** (output paths, etc.). If you don't provide a `rendercv_settings` field, RenderCV will use the default settings.
- The `locale` field is optional. It contains all the strings that define the CV's language (like month names, etc.). If you don't provide a `locale` field, the default English strings will be used.
- The `rendercv_settings` field is optional. It contains the settings of RenderCV (output paths, keywords to make bold, etc.). If you don't provide a `rendercv_settings` field, the default settings will be used.
!!! tip
!!! tip "Tip: JSON Schema"
To maximize your productivity while editing the input YAML file, set up RenderCV's JSON Schema in your IDE. It will validate your inputs on the fly and give auto-complete suggestions.
=== "Visual Studio Code"
@@ -37,13 +37,13 @@ rendercv_settings:
=== "Other"
1. Ensure your editor of choice has support for JSON Schema.
2. Add the following line at the top of `Your_Name_CV.yaml`:
4. Ensure your editor of choice has support for JSON Schema.
5. Add the following line at the top of `Your_Name_CV.yaml`:
``` yaml
# yaml-language-server: $schema=https://github.com/rendercv/rendercv/blob/main/schema.json?raw=true
```
3. Press `Ctrl + Space` to see the auto-complete suggestions.
6. Press `Ctrl + Space` to see the auto-complete suggestions.
## "`cv`" field
@@ -64,7 +64,7 @@ cv:
...
```
1. If you want to change the phone number formatting in the output, see the `locale_catalog` field's `phone_number_format` key.
1. If you want to change the phone number formatting in the output, see the `locale` field's `phone_number_format` key.
2. The available social networks are: {{available_social_networks}}.
None of the values above are required. You can omit any or all of them, and RenderCV will adapt to your input. These generic fields are used in the header of the CV.
@@ -143,74 +143,77 @@ Each entry type is a different object (a dictionary). Below, you can find all th
**Optional Fields:**
- `degree`: The type of degree.
- `location`: The location.
- `start_date`: The start date in `YYYY-MM-DD`, `YYYY-MM`, or `YYYY` format.
- `end_date`: The end date in `YYYY-MM-DD`, `YYYY-MM`, or `YYYY` format or "present".
- `degree`: The type of degree (e.g., BS, MS, PhD)
- `location`: The location
- `start_date`: The start date in `YYYY-MM-DD`, `YYYY-MM`, or `YYYY` format
- `end_date`: The end date in `YYYY-MM-DD`, `YYYY-MM`, or `YYYY` format or "present"
- `date`: The date as a custom string or in `YYYY-MM-DD`, `YYYY-MM`, or `YYYY` format. This will override `start_date` and `end_date`.
- `highlights`: A list of bullet points.
- `highlights`: The list of bullet points
- `summary`: The summary
{% elif entry_name == "ExperienceEntry" %}
**Mandatory Fields:**
- `company`: The name of the company.
- `position`: Your position.
- `company`: The name of the company
- `position`: The position
**Optional Fields:**
- `location`: The location.
- `start_date`: The start date in `YYYY-MM-DD`, `YYYY-MM`, or `YYYY` format.
- `end_date`: The end date in `YYYY-MM-DD`, `YYYY-MM`, or `YYYY` format or "present".
- `location`: The location
- `start_date`: The start date in `YYYY-MM-DD`, `YYYY-MM`, or `YYYY` format
- `end_date`: The end date in `YYYY-MM-DD`, `YYYY-MM`, or `YYYY` format or "present"
- `date`: The date as a custom string or in `YYYY-MM-DD`, `YYYY-MM`, or `YYYY` format. This will override `start_date` and `end_date`.
- `highlights`: A list of bullet points.
- `highlights`: The list of bullet points
- `summary`: The summary
{% elif entry_name == "PublicationEntry" %}
**Mandatory Fields:**
- `title`: The title of the publication.
- `authors`: The authors of the publication.
- `title`: The title of the publication
- `authors`: The authors of the publication
**Optional Fields:**
- `doi`: The DOI of the publication.
- `journal`: The journal of the publication.
- `date`: The date as a custom string or in `YYYY-MM-DD`, `YYYY-MM`, or `YYYY` format.
- `doi`: The DOI of the publication
- `journal`: The journal of the publication
- `date`: The date as a custom string or in `YYYY-MM-DD`, `YYYY-MM`, or `YYYY` format
{% elif entry_name == "NormalEntry" %}
**Mandatory Fields:**
- `name`: The name of the entry.
- `name`: The name of the entry
**Optional Fields:**
- `location`: The location.
- `start_date`: The start date in `YYYY-MM-DD`, `YYYY-MM`, or `YYYY` format.
- `end_date`: The end date in `YYYY-MM-DD`, `YYYY-MM`, or `YYYY` format or "present".
- `location`: The location
- `start_date`: The start date in `YYYY-MM-DD`, `YYYY-MM`, or `YYYY` format
- `end_date`: The end date in `YYYY-MM-DD`, `YYYY-MM`, or `YYYY` format or "present"
- `date`: The date as a custom string or in `YYYY-MM-DD`, `YYYY-MM`, or `YYYY` format. This will override `start_date` and `end_date`.
- `highlights`: A list of bullet points.
- `highlights`: The list of bullet points
- `summary`: The summary
{% elif entry_name == "OneLineEntry" %}
**Mandatory Fields:**
- `label`: The label of the entry.
- `details`: The details of the entry.
- `label`: The label of the entry
- `details`: The details of the entry
{% elif entry_name == "BulletEntry" %}
**Mandatory Fields:**
- `bullet`: The bullet point.
- `bullet`: The bullet point
{% elif entry_name == "TextEntry" %}
**Mandatory Fields:**
- The text itself.
- The text itself
{% endif %}
@@ -251,19 +254,11 @@ highlights:
- Managed a team of **5** engineers.
```
By default, the `an_arbitrary_key` key will not affect the output as the built-in templates do not use it. However, you can use the `an_arbitrary_key` key in your custom templates. Further information on overriding the built-in templates with custom ones can be found [here](index.md#overriding-built-in-themes).
Also, you can use arbitrary keys in the `cv` field. You can use them anywhere in the templates, but generally, they are used in the header of the CV (`Header.j2.tex`).
```yaml hl_lines="3"
cv:
name: John Doe
label_as_an_arbitrary_key: Software Engineer
```
By default, the `an_arbitrary_key` key will not affect the output as the default design options do not use it. However, you can use the `an_arbitrary_key` key in your own design options (see `design.entry_types` field).
## "`design`" field
The `design` field contains your theme selection and its options. Currently, the available themes are: {{available_themes}}. However, custom themes can also be used (see [here](index.md#creating-custom-themes-with-the-create-theme-command)).
The `design` field contains your theme selection and its options. Currently, the available themes are: {{available_themes}}. The only difference between the themes are the `design` options. Their Typst templates are the same. Any theme can be obtained by playing with the `design` options. Custom themes can also be created (see [here](faq.md#how-to-create-a-custom-theme)).
```yaml
design:
@@ -271,74 +266,129 @@ design:
...
```
Each theme may have different options for design. `classic`, `sb2nov`, and `engineeringresumes` almost use identical options, but `moderncv` is slightly different. Please use an IDE that supports JSON schema to avoid missing any available options for the theme (see [above](#structure-of-the-yaml-input-file)).
Use an IDE that supports JSON schema to avoid missing any available options for the theme (see [above](#structure-of-the-yaml-input-file)).
An example `design` field for a `classic` theme is shown below:
```yaml
design:
theme: classic
color: blue
disable_external_link_icons: false
disable_last_updated_date: false
disable_page_numbering: false
font: Source Sans 3
font_size: 10pt
header_font_size: "30 pt"
page_size: a4paper
show_timespan_in:
- 'Experience'
text_alignment: justified
margins:
page:
bottom: 2 cm
left: 2 cm
right: 2 cm
top: 2 cm
section_title:
bottom: 0.2 cm
top: 0.3 cm
entry_area:
date_and_location_width: 4.5 cm
education_degree_width: 1 cm
left_and_right: 0.2 cm
vertical_between: 0.2 cm
highlights_area:
left: 0.4 cm
top: 0.10 cm
vertical_between_bullet_points: 0.10 cm
header:
bottom: 0.3 cm
horizontal_between_connections: 0.5 cm
vertical_between_name_and_connections: 0.3 cm
page:
size: us-letter
top_margin: 2cm
bottom_margin: 2cm
left_margin: 2cm
right_margin: 2cm
show_page_numbering: true
show_last_updated_date: true
colors:
text: black
name: '#004f90'
connections: '#004f90'
section_titles: '#004f90'
links: '#004f90'
last_updated_date_and_page_numbering: grey
text:
font_family: Source Sans 3
font_size: 10pt
leading: 0.6em
date_and_location_column_alignment: right
links:
underline: false
use_external_link_icon: true
header:
name_font_size: 30pt
name_bold: true
photo_width: 3.5cm
vertical_space_between_name_and_connections: 0.7cm
vertical_space_between_connections_and_first_section: 0.7cm
horizontal_space_between_connections: 0.5cm
separator_between_connections: ''
use_icons_for_connections: true
alignment: center
section_titles:
type: with-parial-line
font_size: 1.4em
bold: true
small_caps: false
line_thickness: 0.5pt
vertical_space_above: 0.5cm
vertical_space_below: 0.3cm
entries:
date_and_location_width: 4.15cm
left_and_right_margin: 0.2cm
horizontal_space_between_columns: 0.1cm
vertical_space_between_entries: 1.2em
allow_page_break_in_entries: true
short_second_row: false
show_time_spans_in: []
highlights:
bullet: •
top_margin: 0.25cm
left_margin: 0.4cm
vertical_space_between_highlights: 0.25cm
horizontal_space_between_bullet_and_highlight: 0.5em
summary_left_margin: 0cm
entry_types:
one_line_entry:
template: '**LABEL:** DETAILS'
education_entry:
main_column_first_row_template: '**INSTITUTION** \n AREA'
degree_column_template: '**DEGREE**'
degree_column_width: 1cm
main_column_second_row_template: "SUMMARY\nHIGHLIGHTS"
date_and_location_column_template: "LOCATION\nDATE"
normal_entry:
main_column_first_row_template: '**NAME**'
main_column_second_row_template: "SUMMARY\nHIGHLIGHTS"
date_and_location_column_template: "LOCATION\nDATE"
experience_entry:
main_column_first_row_template: '**COMPANY**, POSITION'
main_column_second_row_template: "SUMMARY\nHIGHLIGHTS"
date_and_location_column_template: "LOCATION\nDATE"
publication_entry:
main_column_second_row_template: "AUTHORS\nURL (JOURNAL)"
date_and_location_column_template: "LOCATION\nDATE"
main_column_first_row_template: '**TITLE**'
main_column_second_row_without_journal_template: "AUTHORS\n\
URL"
main_column_second_row_without_url_template: "AUTHORS\n\
JOURNAL"
```
## "`locale_catalog`" field
## "`locale`" field
This field is what makes RenderCV a multilingual tool. RenderCV uses some English strings to render PDFs. For example, it takes the dates in ISO format (`2020-01-01`) and converts them into human-friendly strings (`"Jan 2020"`). However, you can override these strings for your own language or needs with the `locale_catalog` field. Also, you can change the phone number formatting with the `phone_number_format` key.
This field is what makes RenderCV a multilingual tool. RenderCV uses some English strings to render PDFs. For example, it takes the dates in ISO format (`2020-01-01`) and converts them into human-friendly strings (`"Jan 2020"`). However, you can override these strings for your own language or needs with the `locale` field.
Here is an example:
```yaml
locale_catalog:
locale:
language: en
phone_number_format: national # (1)!
date_style: "MONTH_ABBREVIATION YEAR" # (2)!
last_updated_date_style: Last updated in TODAY # (3)!
page_numbering_style: NAME - Page PAGE_NUMBER of TOTAL_PAGES # (4)!
abbreviations_for_months:
page_numbering_template: NAME - Page PAGE_NUMBER of TOTAL_PAGES # (4)!
last_updated_date_template: Last updated in TODAY # (3)!
date_template: MONTH_ABBREVIATION YEAR # (2)!
month: month
months: months
year: year
years: years
present: present
to:
abbreviations_for_months:
- Jan
- Feb
- Mar
- Apr
- May
- Jun
- Jul
- June
- July
- Aug
- Sep
- Sept
- Oct
- Nov
- Dec
full_names_of_months:
full_names_of_months:
- January
- February
- March
@@ -351,28 +401,26 @@ locale_catalog:
- October
- November
- December
month: month
months: months
year: year
years: years
present: present
to: to
```
1. The available phone number formats are: `national`, `international`, and `E164`.
2. The `MONTH_ABBREVIATION` and `YEAR` are placeholders. The available placeholders are: `FULL_MONTH_NAME`, `MONTH_ABBREVIATION`, `MONTH`, `MONTH_IN_TWO_DIGITS`, `YEAR`, and `YEAR_IN_TWO_DIGITS`.
3. The available placeholders are: `TODAY`, which prints the today's date with `locale_catalog.date_style`.
3. The available placeholders are: `TODAY`, which prints the today's date with `locale.date_template`.
4. The available placeholders are: `NAME`, `PAGE_NUMBER`, `TOTAL_PAGES`, and `TODAY`.
## "`rendercv_settings`" field
The `rendercv_settings` field contains RenderCV settings. We plan to add more settings soon, such as the ability to bold specific words and disable sections. Currently, it only includes the `render_command` field, which contains all the CLI options of the [`rendercv render`](./cli.md#rendercv-render-command) command, as shown below. If CLI arguments are provided, they will override the values in the YAML file. All the fields are optional.
The `rendercv_settings` field contains RenderCV settings.
```yaml
rendercv_settings:
date: "2025-01-06" # (1)!
bold_keywords:
- Python # (2)!
render_command:
output_folder_name: rendercv_output
pdf_path: NAME_IN_SNAKE_CASE_CV.pdf # (1)!
latex_path: NAME_IN_LOWER_SNAKE_CASE_cv.tex
pdf_path: NAME_IN_SNAKE_CASE_CV.pdf # (3)!
typst_path: NAME_IN_LOWER_SNAKE_CASE_cv.typ
html_path: NAME_IN_KEBAB_CASE_CV.html
markdown_path: NAME.md
dont_generate_html: false
@@ -380,4 +428,6 @@ rendercv_settings:
dont_generate_png: false
```
1. `NAME_IN_SNAKE_CASE` is a placeholder. The available placeholders are: `NAME_IN_SNAKE_CASE`, `NAME_IN_LOWER_SNAKE_CASE`, `NAME_IN_UPPER_SNAKE_CASE`, `NAME_IN_KEBAB_CASE`, `NAME_IN_LOWER_KEBAB_CASE`, `NAME_IN_UPPER_KEBAB_CASE`, `NAME`, `FULL_MONTH_NAME`, `MONTH_ABBREVIATION`, `MONTH`, `MONTH_IN_TWO_DIGITS`, `YEAR`, and `YEAR_IN_TWO_DIGITS`.
1. This field is used for time span calculations and last updated date text.
2. The words in the list will be bolded in the output automatically.
3. `NAME_IN_SNAKE_CASE` is a placeholder. The available placeholders are: `NAME_IN_SNAKE_CASE`, `NAME_IN_LOWER_SNAKE_CASE`, `NAME_IN_UPPER_SNAKE_CASE`, `NAME_IN_KEBAB_CASE`, `NAME_IN_LOWER_KEBAB_CASE`, `NAME_IN_UPPER_KEBAB_CASE`, `NAME`, `FULL_MONTH_NAME`, `MONTH_ABBREVIATION`, `MONTH`, `MONTH_IN_TWO_DIGITS`, `YEAR`, and `YEAR_IN_TWO_DIGITS`.

View File

Binary file not shown.

View File

@@ -1,73 +1,90 @@
cv:
name: John Doe
location: Your Location
email: youremail@yourdomain.com
phone: tel:+90-541-999-99-99
website: https://yourwebsite.com/
location: Location
email: john.doe@example.com
phone: tel:+1-609-999-9995
social_networks:
- network: LinkedIn
username: yourusername
username: john.doe
- network: GitHub
username: yourusername
username: john.doe
sections:
welcome_to_RenderCV!:
- '[RenderCV](https://rendercv.com) is a LaTeX-based CV/resume
version-control and maintenance app. It allows you to
create a high-quality CV or resume as a PDF file from
a YAML file, with **Markdown syntax support** and **complete
control over the LaTeX code**.'
- The boilerplate content was inspired by [Gayle McDowell](https://github.com/dnl-blkv/mcdowell-cv).
quick_guide:
- bullet: Each section title is arbitrary and each section
contains a list of entries.
- bullet: 'There are 7 unique entry types: *BulletEntry*,
*TextEntry*, *EducationEntry*, *ExperienceEntry*, *NormalEntry*,
*PublicationEntry*, and *OneLineEntry*.'
- bullet: Select a section title, pick an entry type, and
start writing your section!
- bullet: '[Here](https://docs.rendercv.com/user_guide/),
you can find a comprehensive user guide for RenderCV.'
- '[RenderCV](https://rendercv.com) is a Typst-based CV
framework designed for academics and engineers, with Markdown
syntax support.'
- Each section title is arbitrary. Each section contains
a list of entries, and there are 7 different entry types
to choose from.
education:
- institution: University of Pennsylvania
- institution: Stanford University
area: Computer Science
degree: PhD
location: Stanford, CA, USA
start_date: 2023-09
end_date: present
highlights:
- Working on the optimization of autonomous vehicles
in urban environments
- institution: Boğaziçi University
area: Computer Engineering
degree: BS
start_date: 2000-09
end_date: 2005-05
location: Istanbul, Türkiye
start_date: 2018-09
end_date: 2022-06
highlights:
- 'GPA: 3.9/4.0 ([a link to somewhere](https://example.com))'
- '**Coursework:** Computer Architecture, Comparison
of Learning Algorithms, Computational Theory'
- 'GPA: 3.9/4.0, ranked 1st out of 100 students'
- 'Awards: Best Senior Project, High Honor'
experience:
- company: Apple
position: Software Engineer
location: Cupertino, CA
start_date: 2005-06
end_date: 2007-08
- company: Company C
position: Summer Intern
location: Livingston, LA, USA
start_date: 2024-06
end_date: 2024-09
highlights:
- Reduced time to render user buddy lists by 75% by
implementing a prediction algorithm
- Integrated iChat with Spotlight Search by creating
a tool to extract metadata from saved chat transcripts
and provide metadata to a system-wide search database
- Redesigned chat file format and implemented backward
compatibility for search
- company: Microsoft
position: Software Engineer Intern
location: Redmond, WA
start_date: 2003-06
end_date: 2003-08
- Developed deep learning models for the detection of
gravitational waves in LIGO data
- Published [3 peer-reviewed research papers](https://example.com)
about the project and results
- company: Company B
position: Summer Intern
location: Ankara, Türkiye
start_date: 2023-06
end_date: 2023-09
highlights:
- Designed a UI for the VS open file switcher (Ctrl-Tab)
and extended it to tool windows
- Created a service to provide gradient across VS and
VS add-ins, optimizing its performance via caching
- Built an app to compute the similarity of all methods
in a codebase, reducing the time from $$\mathcal{O}(n^2)$$
to $$\mathcal{O}(n \log n)$$
- Created a test case generation tool that creates random
XML docs from XML Schema
- Automated the extraction and processing of large datasets
from legacy systems using SQL and Perl scripts
- Optimized the production line by 15% by implementing
a new scheduling algorithm
- company: Company A
position: Summer Intern
location: Istanbul, Türkiye
start_date: 2022-06
end_date: 2022-09
highlights:
- Designed an inventory management web application for
a warehouse
projects:
- name: '[Example Project](https://example.com)'
start_date: 2024-05
end_date: present
highlights:
- Launched an [iOS app](https://example.com) in 09/2024
that currently has 10k+ monthly active users
- The app is made open-source (3,000+ stars [on GitHub](https://github.com))
summary: A web application for writing essays
- name: '[Teaching on Udemy](https://example.com)'
date: Fall 2023
highlights:
- Instructed the "Statics" course on Udemy (60,000+
students, 200,000+ hours watched)
skills:
- label: Programming
details: Proficient with Python, C++, and Git; good understanding
of Web, app development, and DevOps
- label: Mathematics
details: Good understanding of differential equations,
calculus, and linear algebra
- label: Languages
details: 'English (fluent, TOEFL: 118/120), Turkish (native)'
publications:
- title: 3D Finite Element Analysis of No-Insulation Coils
authors:
@@ -76,74 +93,102 @@ cv:
- Samwise Gamgee
doi: 10.1109/TASC.2023.3340648
date: 2004-01
projects:
- name: Multi-User Drawing Tool
date: '[github.com/name/repo](https://github.com/rendercv/rendercv)'
highlights:
- Developed an electronic classroom where multiple users
can simultaneously view and draw on a "chalkboard"
with each person's edits synchronized
- 'Tools Used: C++, MFC'
- name: Synchronized Desktop Calendar
date: '[github.com/name/repo](https://github.com/rendercv/rendercv)'
highlights:
- Developed a desktop calendar with globally shared
and synchronized calendars, allowing users to schedule
meetings with other users
- 'Tools Used: C#, .NET, SQL, XML'
- name: Custom Operating System
date: 2002
highlights:
- Built a UNIX-style OS with a scheduler, file system,
text editor, and calculator
- 'Tools Used: C'
technologies:
- label: Languages
details: C++, C, Java, Objective-C, C#, SQL, JavaScript
- label: Technologies
details: .NET, Microsoft SQL Server, XCode, Interface
Builder
extracurricular_activities:
- bullet: 'There are 7 unique entry types in RenderCV: *BulletEntry*,
*TextEntry*, *EducationEntry*, *ExperienceEntry*, *NormalEntry*,
*PublicationEntry*, and *OneLineEntry*.'
- bullet: Each entry type has a different structure and
layout. This document demonstrates all of them.
design:
theme: classic
font: Source Sans 3
font_size: 10pt
page_size: letterpaper
color: '#004f90'
disable_external_link_icons: false
disable_page_numbering: false
disable_last_updated_date: false
header_font_size: 30 pt
text_alignment: justified
separator_between_connections: ''
use_icons_for_connections: true
margins:
page:
top: 2 cm
bottom: 2 cm
left: 2 cm
right: 2 cm
section_title:
top: 0.3 cm
bottom: 0.2 cm
entry_area:
left_and_right: 0.2 cm
vertical_between: 0.2 cm
date_and_location_width: 4.5 cm
education_degree_width: 1 cm
highlights_area:
top: 0.10 cm
left: 0.4 cm
vertical_between_bullet_points: 0.10 cm
header:
vertical_between_name_and_connections: 0.3 cm
bottom: 0.3 cm
horizontal_between_connections: 0.5 cm
show_timespan_in: []
locale_catalog:
page:
size: us-letter
top_margin: 2cm
bottom_margin: 2cm
left_margin: 2cm
right_margin: 2cm
show_page_numbering: true
show_last_updated_date: true
colors:
text: black
name: '#004f90'
connections: '#004f90'
section_titles: '#004f90'
links: '#004f90'
last_updated_date_and_page_numbering: grey
text:
font_family: Source Sans 3
font_size: 10pt
leading: 0.6em
alignment: justified
date_and_location_column_alignment: right
links:
underline: false
use_external_link_icon: true
header:
name_font_size: 30pt
name_bold: true
photo_width: 3.5cm
vertical_space_between_name_and_connections: 0.7cm
vertical_space_between_connections_and_first_section: 0.7cm
horizontal_space_between_connections: 0.5cm
separator_between_connections: ''
use_icons_for_connections: true
alignment: center
section_titles:
type: with-parial-line
font_size: 1.4em
bold: true
small_caps: false
line_thickness: 0.5pt
vertical_space_above: 0.5cm
vertical_space_below: 0.3cm
entries:
date_and_location_width: 4.15cm
left_and_right_margin: 0.2cm
horizontal_space_between_columns: 0.1cm
vertical_space_between_entries: 1.2em
allow_page_break_in_entries: true
short_second_row: false
show_time_spans_in: []
highlights:
bullet:
top_margin: 0.25cm
left_margin: 0.4cm
vertical_space_between_highlights: 0.25cm
horizontal_space_between_bullet_and_highlight: 0.5em
summary_left_margin: 0cm
entry_types:
one_line_entry:
template: '**LABEL:** DETAILS'
education_entry:
main_column_first_row_template: '**INSTITUTION**, AREA'
degree_column_template: '**DEGREE**'
degree_column_width: 1cm
main_column_second_row_template: "SUMMARY\nHIGHLIGHTS"
date_and_location_column_template: "LOCATION\nDATE"
normal_entry:
main_column_first_row_template: '**NAME**'
main_column_second_row_template: "SUMMARY\nHIGHLIGHTS"
date_and_location_column_template: "LOCATION\nDATE"
experience_entry:
main_column_first_row_template: '**COMPANY**, POSITION'
main_column_second_row_template: "SUMMARY\nHIGHLIGHTS"
date_and_location_column_template: "LOCATION\nDATE"
publication_entry:
main_column_first_row_template: '**TITLE**'
main_column_second_row_template: "AUTHORS\nURL (JOURNAL)"
main_column_second_row_without_journal_template: "AUTHORS\n\
URL"
main_column_second_row_without_url_template: "AUTHORS\n\
JOURNAL"
date_and_location_column_template: DATE
locale:
language: en
phone_number_format: national
page_numbering_style: NAME - Page PAGE_NUMBER of TOTAL_PAGES
last_updated_date_style: Last updated in TODAY
date_style: MONTH_ABBREVIATION YEAR
page_numbering_template: NAME - Page PAGE_NUMBER of TOTAL_PAGES
last_updated_date_template: Last updated in TODAY
date_template: MONTH_ABBREVIATION YEAR
month: month
months: months
year: year
@@ -177,4 +222,5 @@ locale_catalog:
- November
- December
rendercv_settings:
date: '2025-01-07'
bold_keywords: []

View File

Binary file not shown.

View File

@@ -0,0 +1,228 @@
cv:
name: John Doe
location: Location
email: john.doe@example.com
phone: tel:+1-609-999-9995
social_networks:
- network: LinkedIn
username: john.doe
- network: GitHub
username: john.doe
sections:
welcome_to_RenderCV!:
- '[RenderCV](https://rendercv.com) is a Typst-based CV
framework designed for academics and engineers, with Markdown
syntax support.'
- Each section title is arbitrary. Each section contains
a list of entries, and there are 7 different entry types
to choose from.
education:
- institution: Stanford University
area: Computer Science
degree: PhD
location: Stanford, CA, USA
start_date: 2023-09
end_date: present
highlights:
- Working on the optimization of autonomous vehicles
in urban environments
- institution: Boğaziçi University
area: Computer Engineering
degree: BS
location: Istanbul, Türkiye
start_date: 2018-09
end_date: 2022-06
highlights:
- 'GPA: 3.9/4.0, ranked 1st out of 100 students'
- 'Awards: Best Senior Project, High Honor'
experience:
- company: Company C
position: Summer Intern
location: Livingston, LA, USA
start_date: 2024-06
end_date: 2024-09
highlights:
- Developed deep learning models for the detection of
gravitational waves in LIGO data
- Published [3 peer-reviewed research papers](https://example.com)
about the project and results
- company: Company B
position: Summer Intern
location: Ankara, Türkiye
start_date: 2023-06
end_date: 2023-09
highlights:
- Optimized the production line by 15% by implementing
a new scheduling algorithm
- company: Company A
position: Summer Intern
location: Istanbul, Türkiye
start_date: 2022-06
end_date: 2022-09
highlights:
- Designed an inventory management web application for
a warehouse
projects:
- name: '[Example Project](https://example.com)'
start_date: 2024-05
end_date: present
highlights:
- Launched an [iOS app](https://example.com) in 09/2024
that currently has 10k+ monthly active users
- The app is made open-source (3,000+ stars [on GitHub](https://github.com))
summary: A web application for writing essays
- name: '[Teaching on Udemy](https://example.com)'
date: Fall 2023
highlights:
- Instructed the "Statics" course on Udemy (60,000+
students, 200,000+ hours watched)
skills:
- label: Programming
details: Proficient with Python, C++, and Git; good understanding
of Web, app development, and DevOps
- label: Mathematics
details: Good understanding of differential equations,
calculus, and linear algebra
- label: Languages
details: 'English (fluent, TOEFL: 118/120), Turkish (native)'
publications:
- title: 3D Finite Element Analysis of No-Insulation Coils
authors:
- Frodo Baggins
- '***John Doe***'
- Samwise Gamgee
doi: 10.1109/TASC.2023.3340648
date: 2004-01
extracurricular_activities:
- bullet: 'There are 7 unique entry types in RenderCV: *BulletEntry*,
*TextEntry*, *EducationEntry*, *ExperienceEntry*, *NormalEntry*,
*PublicationEntry*, and *OneLineEntry*.'
- bullet: Each entry type has a different structure and
layout. This document demonstrates all of them.
design:
theme: engineeringclassic
page:
size: us-letter
top_margin: 2cm
bottom_margin: 2cm
left_margin: 2cm
right_margin: 2cm
show_page_numbering: false
show_last_updated_date: true
colors:
text: black
name: '#004f90'
connections: '#004f90'
section_titles: '#004f90'
links: '#004f90'
last_updated_date_and_page_numbering: grey
text:
font_family: Noto Sans
font_size: 10pt
leading: 0.6em
alignment: justified
date_and_location_column_alignment: right
links:
underline: false
use_external_link_icon: false
header:
name_font_size: 30pt
name_bold: false
photo_width: 3.5cm
vertical_space_between_name_and_connections: 0.7cm
vertical_space_between_connections_and_first_section: 0.7cm
horizontal_space_between_connections: 0.5cm
separator_between_connections: ''
use_icons_for_connections: true
alignment: left
section_titles:
type: with-parial-line
font_size: 1.4em
bold: false
small_caps: false
line_thickness: 0.5pt
vertical_space_above: 0.5cm
vertical_space_below: 0.3cm
entries:
date_and_location_width: 4.15cm
left_and_right_margin: 0.2cm
horizontal_space_between_columns: 0.1cm
vertical_space_between_entries: 1.2em
allow_page_break_in_entries: true
short_second_row: false
show_time_spans_in: []
highlights:
bullet:
top_margin: 0.25cm
left_margin: 0cm
vertical_space_between_highlights: 0.25cm
horizontal_space_between_bullet_and_highlight: 0.5em
summary_left_margin: 0cm
entry_types:
one_line_entry:
template: '**LABEL:** DETAILS'
education_entry:
main_column_first_row_template: '**INSTITUTION**, AREA --
LOCATION'
degree_column_template: '**DEGREE**'
degree_column_width: 1cm
main_column_second_row_template: "SUMMARY\nHIGHLIGHTS"
date_and_location_column_template: DATE
normal_entry:
main_column_first_row_template: '**NAME** -- **LOCATION**'
main_column_second_row_template: "SUMMARY\nHIGHLIGHTS"
date_and_location_column_template: DATE
experience_entry:
main_column_first_row_template: '**POSITION**, COMPANY --
LOCATION'
main_column_second_row_template: "SUMMARY\nHIGHLIGHTS"
date_and_location_column_template: DATE
publication_entry:
main_column_first_row_template: '**TITLE**'
main_column_second_row_template: "AUTHORS\nURL (JOURNAL)"
main_column_second_row_without_journal_template: "AUTHORS\n\
URL"
main_column_second_row_without_url_template: "AUTHORS\n\
JOURNAL"
date_and_location_column_template: DATE
locale:
language: en
phone_number_format: national
page_numbering_template: NAME - Page PAGE_NUMBER of TOTAL_PAGES
last_updated_date_template: Last updated in TODAY
date_template: MONTH_ABBREVIATION YEAR
month: month
months: months
year: year
years: years
present: present
to:
abbreviations_for_months:
- Jan
- Feb
- Mar
- Apr
- May
- June
- July
- Aug
- Sept
- Oct
- Nov
- Dec
full_names_of_months:
- January
- February
- March
- April
- May
- June
- July
- August
- September
- October
- November
- December
rendercv_settings:
date: '2025-01-07'
bold_keywords: []

View File

Binary file not shown.

View File

@@ -1,73 +1,90 @@
cv:
name: John Doe
location: Your Location
email: youremail@yourdomain.com
phone: tel:+90-541-999-99-99
website: https://yourwebsite.com/
location: Location
email: john.doe@example.com
phone: tel:+1-609-999-9995
social_networks:
- network: LinkedIn
username: yourusername
username: john.doe
- network: GitHub
username: yourusername
username: john.doe
sections:
welcome_to_RenderCV!:
- '[RenderCV](https://rendercv.com) is a LaTeX-based CV/resume
version-control and maintenance app. It allows you to
create a high-quality CV or resume as a PDF file from
a YAML file, with **Markdown syntax support** and **complete
control over the LaTeX code**.'
- The boilerplate content was inspired by [Gayle McDowell](https://github.com/dnl-blkv/mcdowell-cv).
quick_guide:
- bullet: Each section title is arbitrary and each section
contains a list of entries.
- bullet: 'There are 7 unique entry types: *BulletEntry*,
*TextEntry*, *EducationEntry*, *ExperienceEntry*, *NormalEntry*,
*PublicationEntry*, and *OneLineEntry*.'
- bullet: Select a section title, pick an entry type, and
start writing your section!
- bullet: '[Here](https://docs.rendercv.com/user_guide/),
you can find a comprehensive user guide for RenderCV.'
- '[RenderCV](https://rendercv.com) is a Typst-based CV
framework designed for academics and engineers, with Markdown
syntax support.'
- Each section title is arbitrary. Each section contains
a list of entries, and there are 7 different entry types
to choose from.
education:
- institution: University of Pennsylvania
- institution: Stanford University
area: Computer Science
degree: PhD
location: Stanford, CA, USA
start_date: 2023-09
end_date: present
highlights:
- Working on the optimization of autonomous vehicles
in urban environments
- institution: Boğaziçi University
area: Computer Engineering
degree: BS
start_date: 2000-09
end_date: 2005-05
location: Istanbul, Türkiye
start_date: 2018-09
end_date: 2022-06
highlights:
- 'GPA: 3.9/4.0 ([a link to somewhere](https://example.com))'
- '**Coursework:** Computer Architecture, Comparison
of Learning Algorithms, Computational Theory'
- 'GPA: 3.9/4.0, ranked 1st out of 100 students'
- 'Awards: Best Senior Project, High Honor'
experience:
- company: Apple
position: Software Engineer
location: Cupertino, CA
start_date: 2005-06
end_date: 2007-08
- company: Company C
position: Summer Intern
location: Livingston, LA, USA
start_date: 2024-06
end_date: 2024-09
highlights:
- Reduced time to render user buddy lists by 75% by
implementing a prediction algorithm
- Integrated iChat with Spotlight Search by creating
a tool to extract metadata from saved chat transcripts
and provide metadata to a system-wide search database
- Redesigned chat file format and implemented backward
compatibility for search
- company: Microsoft
position: Software Engineer Intern
location: Redmond, WA
start_date: 2003-06
end_date: 2003-08
- Developed deep learning models for the detection of
gravitational waves in LIGO data
- Published [3 peer-reviewed research papers](https://example.com)
about the project and results
- company: Company B
position: Summer Intern
location: Ankara, Türkiye
start_date: 2023-06
end_date: 2023-09
highlights:
- Designed a UI for the VS open file switcher (Ctrl-Tab)
and extended it to tool windows
- Created a service to provide gradient across VS and
VS add-ins, optimizing its performance via caching
- Built an app to compute the similarity of all methods
in a codebase, reducing the time from $$\mathcal{O}(n^2)$$
to $$\mathcal{O}(n \log n)$$
- Created a test case generation tool that creates random
XML docs from XML Schema
- Automated the extraction and processing of large datasets
from legacy systems using SQL and Perl scripts
- Optimized the production line by 15% by implementing
a new scheduling algorithm
- company: Company A
position: Summer Intern
location: Istanbul, Türkiye
start_date: 2022-06
end_date: 2022-09
highlights:
- Designed an inventory management web application for
a warehouse
projects:
- name: '[Example Project](https://example.com)'
start_date: 2024-05
end_date: present
highlights:
- Launched an [iOS app](https://example.com) in 09/2024
that currently has 10k+ monthly active users
- The app is made open-source (3,000+ stars [on GitHub](https://github.com))
summary: A web application for writing essays
- name: '[Teaching on Udemy](https://example.com)'
date: Fall 2023
highlights:
- Instructed the "Statics" course on Udemy (60,000+
students, 200,000+ hours watched)
skills:
- label: Programming
details: Proficient with Python, C++, and Git; good understanding
of Web, app development, and DevOps
- label: Mathematics
details: Good understanding of differential equations,
calculus, and linear algebra
- label: Languages
details: 'English (fluent, TOEFL: 118/120), Turkish (native)'
publications:
- title: 3D Finite Element Analysis of No-Insulation Coils
authors:
@@ -76,72 +93,104 @@ cv:
- Samwise Gamgee
doi: 10.1109/TASC.2023.3340648
date: 2004-01
projects:
- name: Multi-User Drawing Tool
date: '[github.com/name/repo](https://github.com/rendercv/rendercv)'
highlights:
- Developed an electronic classroom where multiple users
can simultaneously view and draw on a "chalkboard"
with each person's edits synchronized
- 'Tools Used: C++, MFC'
- name: Synchronized Desktop Calendar
date: '[github.com/name/repo](https://github.com/rendercv/rendercv)'
highlights:
- Developed a desktop calendar with globally shared
and synchronized calendars, allowing users to schedule
meetings with other users
- 'Tools Used: C#, .NET, SQL, XML'
- name: Custom Operating System
date: 2002
highlights:
- Built a UNIX-style OS with a scheduler, file system,
text editor, and calculator
- 'Tools Used: C'
technologies:
- label: Languages
details: C++, C, Java, Objective-C, C#, SQL, JavaScript
- label: Technologies
details: .NET, Microsoft SQL Server, XCode, Interface
Builder
extracurricular_activities:
- bullet: 'There are 7 unique entry types in RenderCV: *BulletEntry*,
*TextEntry*, *EducationEntry*, *ExperienceEntry*, *NormalEntry*,
*PublicationEntry*, and *OneLineEntry*.'
- bullet: Each entry type has a different structure and
layout. This document demonstrates all of them.
design:
theme: engineeringresumes
font: Charter
font_size: 10pt
page_size: letterpaper
color: black
disable_external_link_icons: true
disable_page_numbering: true
disable_last_updated_date: true
header_font_size: 25 pt
text_alignment: left-aligned
separator_between_connections: $|$
use_icons_for_connections: false
margins:
page:
top: 2 cm
bottom: 2 cm
left: 2 cm
right: 2 cm
section_title:
top: 0.3 cm
bottom: 0.2 cm
entry_area:
left_and_right: 0 cm
vertical_between: 0.2 cm
date_and_location_width: 4.5 cm
highlights_area:
top: 0.10 cm
left: 0 cm
vertical_between_bullet_points: 0.10 cm
header:
vertical_between_name_and_connections: 5 pt
bottom: 5 pt
horizontal_between_connections: 10 pt
locale_catalog:
page:
size: us-letter
top_margin: 2cm
bottom_margin: 2cm
left_margin: 2cm
right_margin: 2cm
show_page_numbering: false
show_last_updated_date: true
colors:
text: black
name: black
connections: black
section_titles: black
links: black
last_updated_date_and_page_numbering: grey
text:
font_family: Charter
font_size: 10pt
leading: 0.2em
alignment: justified
date_and_location_column_alignment: right
links:
underline: true
use_external_link_icon: false
header:
name_font_size: 25pt
name_bold: false
photo_width: 3.5cm
vertical_space_between_name_and_connections: 0.7cm
vertical_space_between_connections_and_first_section: 0.7cm
horizontal_space_between_connections: 0.5cm
separator_between_connections: '|'
use_icons_for_connections: false
alignment: center
section_titles:
type: with-parial-line
font_size: 1.2em
bold: true
small_caps: false
line_thickness: 0.5pt
vertical_space_above: 0.3cm
vertical_space_below: 0.1cm
line_type: with-full-line
entries:
date_and_location_width: 4.15cm
left_and_right_margin: 0cm
horizontal_space_between_columns: 0.1cm
vertical_space_between_entries: 0.30cm
allow_page_break_in_entries: true
short_second_row: false
show_time_spans_in: []
highlights:
bullet:
top_margin: 0.1cm
left_margin: 0cm
vertical_space_between_highlights: 0.13cm
horizontal_space_between_bullet_and_highlight: 0.3em
summary_left_margin: 0cm
entry_types:
one_line_entry:
template: '**LABEL:** DETAILS'
education_entry:
main_column_first_row_template: '**INSTITUTION**, DEGREE
in AREA -- LOCATION'
degree_column_width: 1cm
main_column_second_row_template: "SUMMARY\nHIGHLIGHTS"
date_and_location_column_template: DATE
normal_entry:
main_column_first_row_template: '**NAME** -- **LOCATION**'
main_column_second_row_template: "SUMMARY\nHIGHLIGHTS"
date_and_location_column_template: DATE
experience_entry:
main_column_first_row_template: '**POSITION**, COMPANY --
LOCATION'
main_column_second_row_template: "SUMMARY\nHIGHLIGHTS"
date_and_location_column_template: DATE
publication_entry:
main_column_first_row_template: '**TITLE**'
main_column_second_row_template: "AUTHORS\nURL (JOURNAL)"
main_column_second_row_without_journal_template: "AUTHORS\n\
URL"
main_column_second_row_without_url_template: "AUTHORS\n\
JOURNAL"
date_and_location_column_template: DATE
locale:
language: en
phone_number_format: national
page_numbering_style: NAME - Page PAGE_NUMBER of TOTAL_PAGES
last_updated_date_style: Last updated in TODAY
date_style: MONTH_ABBREVIATION YEAR
page_numbering_template: NAME - Page PAGE_NUMBER of TOTAL_PAGES
last_updated_date_template: Last updated in TODAY
date_template: MONTH_ABBREVIATION YEAR
month: month
months: months
year: year
@@ -175,4 +224,5 @@ locale_catalog:
- November
- December
rendercv_settings:
date: '2025-01-07'
bold_keywords: []

Some files were not shown because too many files have changed in this diff Show More