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>
10
.github/workflows/publish-to-pypi.yaml
vendored
@@ -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:
|
||||
|
||||
4
.github/workflows/update-files.yaml
vendored
@@ -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
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
17
README.md
@@ -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.
|
||||
|
||||
| [](https://github.com/rendercv/rendercv/blob/main/examples/John_Doe_ClassicTheme_CV.pdf) | [](https://github.com/rendercv/rendercv/blob/main/examples/John_Doe_Sb2novTheme_CV.pdf) |
|
||||
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| [](https://github.com/rendercv/rendercv/blob/main/examples/John_Doe_ModerncvTheme_CV.pdf) | [](https://github.com/rendercv/rendercv/blob/main/examples/John_Doe_EngineeringresumesTheme_CV.pdf) |
|
||||
| [](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.
|
||||
|
||||

|
||||
|
||||
## 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
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 476 KiB After Width: | Height: | Size: 3.8 MiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 49 KiB |
|
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 51 KiB |
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 59 KiB |
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 38 KiB |
BIN
docs/assets/images/classic_latex/bullet_entry.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
docs/assets/images/classic_latex/education_entry.png
Normal file
|
After Width: | Height: | Size: 50 KiB |
BIN
docs/assets/images/classic_latex/experience_entry.png
Normal file
|
After Width: | Height: | Size: 51 KiB |
BIN
docs/assets/images/classic_latex/normal_entry.png
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
docs/assets/images/classic_latex/one_line_entry.png
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
docs/assets/images/classic_latex/publication_entry.png
Normal file
|
After Width: | Height: | Size: 60 KiB |
BIN
docs/assets/images/classic_latex/text_entry.png
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
docs/assets/images/engineeringclassic.png
Normal file
|
After Width: | Height: | Size: 3.6 MiB |
BIN
docs/assets/images/engineeringclassic/bullet_entry.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
docs/assets/images/engineeringclassic/education_entry.png
Normal file
|
After Width: | Height: | Size: 52 KiB |
BIN
docs/assets/images/engineeringclassic/experience_entry.png
Normal file
|
After Width: | Height: | Size: 54 KiB |
BIN
docs/assets/images/engineeringclassic/normal_entry.png
Normal file
|
After Width: | Height: | Size: 39 KiB |
BIN
docs/assets/images/engineeringclassic/one_line_entry.png
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
docs/assets/images/engineeringclassic/publication_entry.png
Normal file
|
After Width: | Height: | Size: 66 KiB |
BIN
docs/assets/images/engineeringclassic/text_entry.png
Normal file
|
After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 537 KiB After Width: | Height: | Size: 4.0 MiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 63 KiB After Width: | Height: | Size: 63 KiB |
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 42 KiB |
BIN
docs/assets/images/engineeringresumes_latex/bullet_entry.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
docs/assets/images/engineeringresumes_latex/education_entry.png
Normal file
|
After Width: | Height: | Size: 52 KiB |
BIN
docs/assets/images/engineeringresumes_latex/experience_entry.png
Normal file
|
After Width: | Height: | Size: 52 KiB |
BIN
docs/assets/images/engineeringresumes_latex/normal_entry.png
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
docs/assets/images/engineeringresumes_latex/one_line_entry.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 63 KiB |
BIN
docs/assets/images/engineeringresumes_latex/text_entry.png
Normal file
|
After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 412 KiB After Width: | Height: | Size: 3.6 MiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 65 KiB |
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 44 KiB |
BIN
docs/assets/images/moderncv_latex/bullet_entry.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
docs/assets/images/moderncv_latex/education_entry.png
Normal file
|
After Width: | Height: | Size: 49 KiB |
BIN
docs/assets/images/moderncv_latex/experience_entry.png
Normal file
|
After Width: | Height: | Size: 52 KiB |
BIN
docs/assets/images/moderncv_latex/normal_entry.png
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
docs/assets/images/moderncv_latex/one_line_entry.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
docs/assets/images/moderncv_latex/publication_entry.png
Normal file
|
After Width: | Height: | Size: 58 KiB |
BIN
docs/assets/images/moderncv_latex/text_entry.png
Normal file
|
After Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 567 KiB After Width: | Height: | Size: 3.6 MiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 63 KiB After Width: | Height: | Size: 64 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 61 KiB |
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 43 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 72 KiB |
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 43 KiB |
BIN
docs/assets/images/sb2nov_latex/bullet_entry.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
docs/assets/images/sb2nov_latex/education_entry.png
Normal file
|
After Width: | Height: | Size: 63 KiB |
BIN
docs/assets/images/sb2nov_latex/experience_entry.png
Normal file
|
After Width: | Height: | Size: 62 KiB |
BIN
docs/assets/images/sb2nov_latex/normal_entry.png
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
docs/assets/images/sb2nov_latex/one_line_entry.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
docs/assets/images/sb2nov_latex/publication_entry.png
Normal file
|
After Width: | Height: | Size: 69 KiB |
BIN
docs/assets/images/sb2nov_latex/text_entry.png
Normal file
|
After Width: | Height: | Size: 41 KiB |
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
|
||||
@@ -6,13 +6,13 @@
|
||||
[)](https://pypi.python.org/pypi/rendercv)
|
||||
[)](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.
|
||||
|
||||
| [](https://github.com/rendercv/rendercv/blob/main/examples/John_Doe_ClassicTheme_CV.pdf) | [](https://github.com/rendercv/rendercv/blob/main/examples/John_Doe_Sb2novTheme_CV.pdf) |
|
||||
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| [](https://github.com/rendercv/rendercv/blob/main/examples/John_Doe_ModerncvTheme_CV.pdf) | [](https://github.com/rendercv/rendercv/blob/main/examples/John_Doe_EngineeringresumesTheme_CV.pdf) |
|
||||
| [](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.
|
||||
|
||||

|
||||
|
||||
## 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
|
||||
|
||||
|
||||
3
docs/reference/api/functions.md
Normal file
@@ -0,0 +1,3 @@
|
||||
# `rendercv.api.functions`
|
||||
|
||||
::: rendercv.api.functions
|
||||
3
docs/reference/api/index.md
Normal file
@@ -0,0 +1,3 @@
|
||||
# `rendercv.api`
|
||||
|
||||
::: rendercv.api
|
||||
3
docs/reference/data/models/locale.md
Normal file
@@ -0,0 +1,3 @@
|
||||
# `rendercv.data.models.locale`
|
||||
|
||||
::: rendercv.data.models.locale
|
||||
@@ -1,3 +0,0 @@
|
||||
# `rendercv.data.models.locale_catalog`
|
||||
|
||||
::: rendercv.data.models.locale_catalog
|
||||
@@ -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.
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
{% for template_name, template in theme_templates["classic"].items() %}
|
||||
### {{ template_name }}
|
||||
|
||||
```latex
|
||||
```typst
|
||||
{{ template }}
|
||||
```
|
||||
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
@@ -1,3 +0,0 @@
|
||||
# `rendercv.themes.common_options`
|
||||
|
||||
::: rendercv.themes.common_options
|
||||
15
docs/reference/themes/engineeringclassic.md
Normal 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 %}
|
||||
@@ -7,8 +7,8 @@
|
||||
{% for template_name, template in theme_templates["engineeringresumes"].items() %}
|
||||
### {{ template_name }}
|
||||
|
||||
```latex
|
||||
```typst
|
||||
{{ template }}
|
||||
```
|
||||
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
@@ -7,8 +7,8 @@
|
||||
{% for template_name, template in theme_templates["moderncv"].items() %}
|
||||
### {{ template_name }}
|
||||
|
||||
```latex
|
||||
```typst
|
||||
{{ template }}
|
||||
```
|
||||
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
3
docs/reference/themes/options.md
Normal file
@@ -0,0 +1,3 @@
|
||||
# `rendercv.themes.options`
|
||||
|
||||
::: rendercv.themes.options
|
||||
@@ -7,8 +7,8 @@
|
||||
{% for template_name, template in theme_templates["sb2nov"].items() %}
|
||||
### {{ template_name }}
|
||||
|
||||
```latex
|
||||
```typst
|
||||
{{ template }}
|
||||
```
|
||||
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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`.
|
||||
|
||||
@@ -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: []
|
||||
|
||||
BIN
examples/John_Doe_EngineeringclassicTheme_CV.pdf
Normal file
228
examples/John_Doe_EngineeringclassicTheme_CV.yaml
Normal 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: []
|
||||
@@ -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: []
|
||||
|
||||