# my-rendercv 個人履歷配置專案,使用 [RenderCV](https://github.com/rendercv/rendercv) 從 YAML 檔案生成 PDF 履歷。 ## 專案結構 ``` my-rendercv/ ├── my_cv.yaml # 主要履歷配置檔(繁體中文) ├── photo.jpg # 履歷照片 ├── rendercv_output/ # 生成的輸出檔案(已 gitignore) │ ├── *.pdf │ ├── *.typ │ ├── *.html │ ├── *.md │ └── *.png └── README.md ``` ## 環境安裝 **需求:Python 3.12 或以上版本** ```bash pip install "rendercv[full]" ``` 其他安裝方式: ```bash # pipx(推薦,隔離全域工具) pipx install "rendercv[full]" # uv uv tool install "rendercv[full]" ``` 驗證安裝: ```bash rendercv --version ``` --- ## 快速開始 ### 生成履歷(全格式) ```bash rendercv render my_cv.yaml ``` 輸出檔案會放在 `rendercv_output/` 目錄,包含 PDF、Typst 原始碼、HTML、Markdown、PNG。 ### 監看模式(存檔後自動重新生成) ```bash rendercv render my_cv.yaml --watch ``` ### 只生成 PDF(跳過其他格式) ```bash rendercv render my_cv.yaml --dont-generate-markdown --dont-generate-html --dont-generate-png ``` ### 指定輸出路徑 ```bash rendercv render my_cv.yaml --pdf-path output/resume.pdf ``` --- ## YAML 配置結構說明 配置檔分為四個頂層區塊: ### `cv` — 履歷內容 定義個人基本資訊與各章節內容。 ```yaml cv: name: "Ding-Lian Chen (陳定廉)" location: "Taipei, Taiwan" email: "shadow449515@gmail.com" phone: "(+886) 0979508405" social_networks: - network: GitHub username: Dingian sections: summary: - 純文字段落,直接放字串。 skills: - bullet: 條列項目使用 bullet 欄位。 experience: - company: 公司名稱 position: 職稱 location: 地點 start_date: 2021-05 end_date: present # 目前在職用 present summary: 職位摘要 highlights: - 重點項目 1 - 重點項目 2 projects: - name: 專案名稱 position: 角色 tech_stack: Python, FastAPI date: 2024-01 – Present link: https://example.com description: 專案描述 highlights: - 重點項目 education: - institution: 學校名稱 area: 系所名稱 degree: 學士 start_date: 2011-08 end_date: 2016-01 ``` ### `design` — 視覺設計 控制版面、顏色、字型、章節樣式等外觀設定。 | 區塊 | 說明 | |------|------| | `theme` | 主題(`classic`、`engineeringresumes`、`moderncv` 等) | | `page` | 頁面尺寸、邊距、是否顯示頁尾 | | `colors` | 各元素顏色(支援 `rgb(r, g, b)` 格式) | | `typography` | 字型、字級、行距、對齊方式 | | `header` | 標題區塊排版(照片位置、間距) | | `section_titles` | 章節標題樣式(底線類型、粗細) | | `entries` | 條目排版(欄寬、項目間距) | | `templates` | 各條目的 Typst 模板(可自訂欄位排列) | **目前使用的主色系:** ```yaml colors: name: rgb(0, 79, 144) section_titles: rgb(0, 79, 144) links: rgb(0, 79, 144) ``` ### `locale` — 語言本地化 控制日期格式、時間跨度文字等語言設定。 ```yaml locale: language: mandarin_chinese # 中文格式 # 可自訂以下文字(取消註解後修改): # present: 至今 # year: 年 # months: 個月 # month_abbreviations: # - 1月 # ... ``` ### `settings` — 生成設定 控制輸出行為與日期顯示。 ```yaml settings: current_date: '2026-01-02' # 覆蓋頁尾的更新日期 bold_keywords: [] # 自動加粗的關鍵字列表 render_command: dont_generate_png: false dont_generate_markdown: false ``` --- ## 客製化設計 ### 修改主題色 編輯 `design.colors` 區塊: ```yaml colors: name: rgb(180, 0, 0) section_titles: rgb(180, 0, 0) links: rgb(180, 0, 0) ``` ### 修改條目模板 `design.templates` 可自訂各條目的欄位排列,使用預設變數(全大寫): ```yaml templates: experience_entry: main_column: |- **COMPANY**, POSITION SUMMARY HIGHLIGHTS date_and_location_column: |- LOCATION DATE ``` 可用變數:`COMPANY`、`POSITION`、`SUMMARY`、`HIGHLIGHTS`、`DATE`、`LOCATION`、`NAME`、`DESCRIPTION`、`TECH_STACK`、`LINK` 等。 ### 建立自訂主題 ```bash rendercv create-theme my-theme ``` 產生 `my-theme/` 資料夾,包含 Typst 模板,可直接修改樣式後,在 YAML 中指定: ```yaml design: theme: my-theme ``` ### 修改字型 默認的字體支援對中文不友好,沒有加粗效果,所以需要手動替換字體進行渲染,此外 rendercv 版本必須高於2.8,否則無法生效 目前使用 https://github.com/notofonts/noto-cjk/releases 下載選擇 - `Noto Serif CJK` 或 `Noto Sans CJK` 分別代表 思源宋体 和 思源黑体 (思源黑体于 2014 年 7 月首次发布,思源宋体于 2017 年 4 月发布) - 語言選擇 `Language Specific OTFs Traditional Chinese — Taiwan (繁體中文—臺灣)` 後放到 fonts 目錄中 配置修改如下 ```yaml typography: font_family: body: Noto Serif CJK TC name: Noto Serif CJK TC headline: Noto Serif CJK TC connections: Noto Serif CJK TC section_titles: Noto Serif CJK TC ``` PS: - 嘗試使用 [SarasaGothic-TTF-1.0.37](https://github.com/be5invis/Sarasa-Gothic/releases/tag/v1.0.31) 但是一直無法生效!目前推測可能是字型版本需要基於 makeotfexe 2.6.0 - 使用 [Source Han Serif | 思源宋体](https://github.com/adobe-fonts/source-han-serif) 必須改叫 `思源宋體` 而不是 `Source Han Serif TC` - 建議從 Google 下載字體 [LXGW](https://fonts.google.com/specimen/LXGW+WenKai+TC) 這是一款系列源自 https://github.com/lxgw/LxgwWenkai - https://github.com/max32002/swei-spring 這個沒測試,但看起來應該也是可以使用 ### 為什麼 Sarasa Gothic 無效,而 Noto Serif CJK 可以? #### 1. 兩者核心差異 | 特性 | **Sarasa Gothic (更紗黑體)** | **Noto Serif CJK (思源宋體/明體)** | | :--- | :--- | :--- | | **字體分類** | **黑體 (Sans-serif)** | **宋體/明體 (Serif)** | | **主要用途** | 程式碼編輯器、終端機 (Terminal) | 書籍排版、正式文件、學術論文 | | **設計特色** | 混合「思源黑體」與「Iosevka」,強調**等寬 (Monospace)** | 傳統印刷風格,有明顯的筆畫裝飾(襯線) | | **字體格式** | 多為 TTC (TrueType Collection) | OTF (OpenType Font) | - **Sarasa Gothic** 的核心價值是解決「程式碼中,中英文寬度不匹配」的問題,強行將中文寬度設為英文的兩倍,非常適合寫程式。 - **Noto Serif CJK** 為長文閱讀設計,追求古典的印刷美感。 #### 2. 原因分析 **A. 襯線體 (Serif) 的預設配置** `rendercv` 背後的核心引擎是 **XeLaTeX/LuaLaTeX**,預設的 CV 樣式通常要求**襯線體**(如 Times New Roman)。 - **Noto Serif CJK** 是標準的襯線體,能完美對接英文 Serif 字體。 - **Sarasa Gothic** 是黑體(無襯線),當樣式表要求 Serif 邏輯時,調用黑體可能導致字體族衝突或回退(Fallback)失敗。 **B. 字體格式與 LaTeX 的相容性** `rendercv` 依賴的 `fontspec` 套件對 **OTF (OpenType)** 格式的支援最為穩定。 - **Noto Serif CJK** 提供標準 OTF 版本,其 CID-keyed 映射嚴謹,讓 LaTeX 引擎能精確定位「繁體中文」字形編碼。 - **Sarasa Gothic** 為實現等寬做了大量調整,內部字體元數據(Metadata)有時不符合傳統 LaTeX 引擎的預期,容易導致找不到字形或渲染空白。 **C. 等寬 (Monospace) 的干擾** `rendercv` 生成 PDF 時會計算每個字符寬度以精確排版。 - **Sarasa Gothic** 是**等寬字體**,在非程式碼區域使用等寬字體,會導致字間距(Kerning)僵硬或跑版。 - **Noto Serif CJK** 是比例字體(Proportional),允許字符根據形狀有不同寬度,符合正式文件的排版邏輯。 #### 3. 總結建議 | 使用場景 | 推薦字體 | | :--- | :--- | | 寫程式或設定 Terminal | **Sarasa Gothic** | | 用 RenderCV 生成正式履歷 | **Noto Serif CJK TC** 或 **Noto Sans CJK TC** | 如果在 Windows 上透過 `scoop` 安裝 Noto Serif: ```powershell scoop install NotoSerifCJK-TC ``` 安裝後,`rendercv` 就能透過字體名稱精確抓取,生成的 PDF 字形也會顯得更專業且符合傳統排版審美。 --- ## 常用指令速查 | 指令 | 說明 | |------|------| | `rendercv render my_cv.yaml` | 生成全部格式 | | `rendercv render my_cv.yaml --watch` | 監看模式,存檔自動重新生成 | | `rendercv render my_cv.yaml --dont-generate-png --dont-generate-html` | 跳過 PNG 和 HTML | | `rendercv render my_cv.yaml --pdf-path output.pdf` | 指定 PDF 輸出路徑 | | `rendercv new "姓名"` | 建立新的範本 YAML | | `rendercv create-theme 主題名` | 建立自訂 Typst 主題 | | `rendercv --version` | 查看版本 | --- ## 注意事項 - `rendercv_output/` 已加入 `.gitignore`,不會提交生成的檔案。 - YAML 中可使用 Markdown 語法(`**粗體**`、`[連結](url)`),PDF 中可正常渲染。 - `settings.current_date` 會影響頁尾的更新日期顯示,需手動維護。 - 升級版本前建議確認 [Changelog](https://github.com/rendercv/rendercv/releases) 是否有破壞性變更。 ## 引用内容 - https://github.com/wyh0626/resume-optimizer - https://github.com/stepfun-ai/Step-3.5-Flash/blob/main/cookbooks/resume-analysis-agent-guide/resume_analyzer.py