
Nexus AI, Co-Founder CTO【免費下載鏈接】rendercvResume builder for academics and engineers項目地址: https://gitcode.com/GitHub_Trending/re/rendercvSan Francisco, CA Jun 2023 – presentBuilt foundation model infrastructure serving 2M monthly API requests with 99.97% uptimeRaised $18M Series A led by Sequoia Capital, with participation from a16z and Founders FundScaled engineering team from 3 to 28 across ML research, platform, and applied AI divisionsDeveloped proprietary inference optimization reducing latency by 73% compared to baseline## 三、ExperienceEntry 數據模型字段與校驗 模板消費的 entry 對象來自 Pydantic 模型 [experience.py](https://link.gitcode.com/i/fe3e3f49bf6cdc541306d60312a1295b)。ExperienceEntry 的字段定義如下 | 字段 | 必填 | 說明 | | --- | --- | --- | | company | 是 | 雇主名稱 | | position | 是 | 職位/頭銜 | | date | 否 | 單日期自定義文本或 YYYY-MM-DD/YYYY-MM/YYYY提供后覆蓋 start/end | | start_date | 否 | 起始日期 | | end_date | 否 | 結束日期進行中可用 present 或省略 | | location | 否 | 辦公地點 | | summary | 否 | 角色描述 | | highlights | 否 | 成就要點列表 | 其中 company 與 position 由 BaseExperienceEntry 聲明為必填其余字段繼承自 BaseEntryWithComplexFields見 [entry_with_complex_fields.py](https://link.gitcode.com/i/09655283da83727ffbfdcc72713fdafd)。 值得關注的是日期字段的**歸一化模型校驗器** check_and_adjust_dates()它定義了三條規則 1. 若只提供 date則忽略 start_date/end_date 2. 若只提供 end_date視為單日事件等價于只提供 date 3. 若只提供 start_date視為進行中事件自動把 end_date 置為 present。 同時validate_exact_date() 嚴格校驗 start_date/end_date 必須能被解析為真實日期因為要做日期運算與時長的計算并校驗 start_date 不得晚于 end_date。而 date 字段相對寬松允許 Fall 2023 之類的自定義文本見 [entry_with_date.py](https://link.gitcode.com/i/7ebbbb9ba18e7e6420904d4f509a0034)。 ## 四、占位符展開管線main_column 與 date_and_location_column 如何生成 模板中訪問的 entry.main_column 和 entry.date_and_location_column 并不是用戶直接編寫的字段而是由 render_entry_templates()[entry_templates_from_input.py](https://link.gitcode.com/i/1781e1634f8f86b38d0d9976268e7db7)根據設計配置中的模板字符串展開得到的動態屬性。 ### 4.1 默認模板定義 工作經歷條目的默認模板定義在 [classic_theme.py](https://link.gitcode.com/i/c70eef8031fad82be904064c22d26b5b) 的 ExperienceEntryTemplate 中 - main_column 默認值**COMPANY**, POSITION\nSUMMARY\nHIGHLIGHTS - date_and_location_column 默認值LOCATION\nDATE 用戶文檔中的完整示例見 [design.md](https://link.gitcode.com/i/51316dc570baa010293e62bb099686da)其等價 YAML 寫法為 yaml design: templates: experience_entry: main_column: |- **COMPANY**, POSITION SUMMARY HIGHLIGHTS date_and_location_column: |- LOCATION DATE4.2 展開過程的三個關鍵步驟render_entry_templates()對模板字符串做如下處理字段占位符替換把條目字段轉成大寫鍵COMPANY、POSITION、LOCATION、SUMMARY、HIGHLIGHTS、DATE、START_DATE、END_DATE等替換進模板。空字符串值視為未提供會在第 3 步被清理。特殊占位符預處理HIGHLIGHTS→process_highlights()每個要點轉成- 內容其中用-分隔的子要點轉為縮進的二級列表entry_templates_from_input.pySUMMARY→ 若模板中SUMMARY獨占一行則包成!!! summaryadmonition這正是模板 2.3 節過濾!!! summary行的來源若與其它占位符同行如**COMPANY**, SUMMARY則保持內聯不包裹測試見 test_entry_templates_from_input.pyDATE/START_DATE/END_DATE→ 交由日期管線格式化見第五節。缺失占位符清理remove_not_provided_placeholders()會移除未提供字段對應的占位符及其周邊標點并通過remove_connectors_of_missing_placeholders()一并刪除占位符之間的連接詞如in、at避免出現 Engineer at 這類殘句最后用clean_trailing_parts()清理行尾殘留的逗號、冒號等。測試 test_entry_templates_from_input.py 印證了完整行為NormalEntry(nameProject, date2023-05, highlights[Alpha,Beta], locationRemote)渲染后main_column為**Project**\n- Alpha\n- Betadate_and_location_column為Remote\nMay 2023。五、日期與時間段present關鍵字、date_range 與 time_span工作經歷幾乎總是日期區間而非單日期因此 ExperienceEntry 的日期格式化是整個展開管線中最復雜的部分實現在 date.py 與process_date()entry_templates_from_input.py。5.1 支持的日期輸入格式start_date/end_date支持三種 ISO 風格與關鍵字2020僅年份可寫整數20202020-09年月2020-09-24精確日期present僅end_date表示進行中get_date_object()entry_with_complex_fields.py負責把上述輸入解析為 PythonDate對象present解析為當前日期取自設置中的_resolved_current_date。5.2 date_range 模板區間按design.templates.date_range格式化默認值為START_DATE – END_DATE其中起止日期各自再按single_date模板默認MONTH_ABBREVIATION YEAR如 Jun 2023渲染present會替換為本地化文本如英文present、法文présent見format_date_range()date.py。因此start_date: 2023-06, end_date: present得到Jun 2023 – present。5.3 time_span 時長計算若該 section 被列入design.sections.show_time_spans_in設計文檔示例中即包含experience見 design.md則process_date()還會調用compute_time_span_string()計算任職時長并追加到日期區間之后。時長按time_span模板默認HOW_MANY_YEARS YEARS HOW_MANY_MONTHS MONTHS輸出并依據 locale 自動處理單復數year/years、month/months例如 3 years 4 months。實現細節僅年份輸入時按整年差計算含月份輸入時按天數換算365 天/年、30 天/月并處理溢出如 12 個月進位為 1 年。六、同一數據、三種輸出與 Typst / HTML 模板的對照ExperienceEntry 的 Markdown 模板只是渲染面之一同一數據模型還有對應的 Typst 模板 ExperienceEntry.j2.typ 與 HTML 輸出路徑理解對照有助于把握 Markdown 模板的設計取舍Typst通過#regular-entry(...)雙欄函數把main_column與date_and_location_column排成左右兩欄日期/地點在右、正文在左并受design.entries.short_second_row、allow_page_break、space_between_columns等排版參數控制參數定義見 classic_theme.py。其中main_column.splitlines()[:first_row_lines]決定首行與第二行的切分方式與 Markdown 模板中[0]/[1:]的切分邏輯同源。HTML先走與本模板完全相同的 Markdown 渲染路徑再由render_html()調用markdown_to_html()markdown_parser.py把 Markdown 轉為 HTML 并套入 Full.html。Typst 內容轉換Markdown 語法加粗、斜體、鏈接等由markdown_to_typst()markdown_parser.py逐行轉換為 Typst 標記!!! summaryadmonition 塊則轉換為#summary[...]見to_typst_string()的div分支markdown_parser.py這也解釋了為何 Markdown 模板需要單獨跳過!!! summary行——它是 Typst/HTML 提示框語法的中間標記。七、自定義工作經歷條目的輸出如需調整工作經歷的 Markdown/PDF 表現有兩種途徑均無需修改倉庫代碼7.1 修改 design.templates.experience_entry在用戶自己的rendercv.yaml或John_Doe_CV.yaml之類輸入文件的design.templates下覆蓋experience_entry的兩個模板字符串即可。例如把公司移到第二行、把摘要換成斜體design: templates: experience_entry: main_column: |- **POSITION** *COMPANY* SUMMARY HIGHLIGHTS date_and_location_column: |- LOCATION DATE所有條目字段均可作為大寫占位符使用可參考 cv.md 中 ExperienceEntry 字段表與 design.md 的模板配置說明。7.2 使用任意自定義字段arbitrary keys除標準字段外可為經歷條目添加任意鍵例如revenue: $5M ARR然后在模板中以REVENUE占位符引用官方文檔示例見 cv.md 與 arbitrary_keys_in_entries.mdexperience: - company: Startup Inc position: Founder start_date: 2020-01 end_date: present revenue: $5M ARR # 自定義字段 highlights: - Built product from zero to profitabilitydesign: templates: experience_entry: main_column: |- **COMPANY**, POSITION (REVENUE) SUMMARY HIGHLIGHTS【免費下載鏈接】rendercvResume builder for academics and engineers項目地址: https://gitcode.com/GitHub_Trending/re/rendercv創作聲明:本文部分內容由AI輔助生成(AIGC),僅供參考