diff --git a/README.md b/README.md index a08c374..9a38edb 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ xelatex slides.tex # 跑两遍,第二遍才能取到正确的目录、 ## 说明 - **字体单一来源**:全库字体集中在根目录 [`fonts/`](fonts/),由 [`fonts.tex`](fonts.tex) 统一加载。十一个模板通过 `\input{../fonts.tex}` 取字体,**不自带字体、不依赖系统字体**——换机器(Windows / macOS / Linux / Overleaf)编译结果一致。 -- **全部开源可商用**:无方正、无 SimSun / SimHei / KaiTi / FangSong、无 Times New Roman、无微软雅黑。用的是思源宋体/黑体、霞鹜文楷、朱雀仿宋、TeX Gyre Termes、鸿蒙 HarmonyOS Sans(各字体授权见 [`fonts/LICENSE`](fonts/LICENSE),来源与字符集见 [`fonts/README.md`](fonts/README.md))。 +- **全部开源可商用**:无方正、无 SimSun / SimHei / KaiTi / FangSong、无 Times New Roman、无微软雅黑。用的是思源宋体/黑体、霞鹜文楷、朱雀仿宋、TeX Gyre Termes、Cochineal、鸿蒙 HarmonyOS Sans(各字体授权见 [`fonts/LICENSE`](fonts/LICENSE),来源与字符集见 [`fonts/README.md`](fonts/README.md))。 - **每个子目录自包含**:样式文件(`.sty` / `.cls`)、图片都在各目录内,编译时不需要额外的宏包搜索路径;只有字体是共享的上层目录。 - **各目录的 `README.md`** 写明该模板的用法、可改参数、版式数据来源与书写注意事项,改之前先看。 - **示例内容全部虚构**:为了让人一眼看出排版效果,模板里填的是**一整套连贯的假想数据**(虚构教师「张远航」、虚构课程《数字逻辑》2025 秋、虚构的论文 / 专利 / 项目 / 获奖),不是满篇 `×`。这些内容**不含任何真人信息、不含真题**,纯粹是为了让版式跑起来有真实感,使用时整体替换成自己的内容即可。 @@ -49,10 +49,11 @@ xelatex slides.tex # 跑两遍,第二遍才能取到正确的目录、 | `fonts/ouc-sans/` | OUC Sans(黑体) | 思源黑体 SC 的 GB2312 子集 | SIL OFL 1.1 | | `fonts/ouc-kai/` | OUC Kai(楷体) | 霞鹜文楷的 GB2312 子集 | SIL OFL 1.1 | | `fonts/zhuque-fangsong/` | 朱雀仿宋(仿宋) | 朱雀仿宋 | SIL OFL 1.1 | -| `fonts/tex-gyre-termes/` | TeX Gyre Termes(西文) | Times New Roman 度量兼容替代 | GUST Font License | +| `fonts/tex-gyre-termes/` | TeX Gyre Termes(西文,全库默认) | Times New Roman 度量兼容替代 | GUST Font License | +| `fonts/cochineal/` | Cochineal(西文,仅 `简历/` 用) | Minion 风格,Michael Sharpe | SIL OFL 1.1 | | `fonts/harmonyos-sans/` | HarmonyOS Sans(幻灯片/科技报告) | 华为 | 华为官方允许免费商用 | -合计约 49 MB(改造前 141 MB,见 [`fonts/README.md`](fonts/README.md) 第五节)。 +合计约 50 MB(改造前 141 MB,见 [`fonts/README.md`](fonts/README.md) 第五节)。 > 子集字体已按 OFL §3 改名(`Source` / `LXGW` 是上游的 Reserved Font Name,裁剪即构成修改版),并保留了 OFL 声明。 > 用本模板编译出的文档**不受**这些字体授权约束,版权归作者本人。 diff --git a/fonts.tex b/fonts.tex index bc4f975..1fb9f54 100644 --- a/fonts.tex +++ b/fonts.tex @@ -70,6 +70,9 @@ % % Termes 与 Times New Roman 字符宽度逐字相同,因此原有的西文断行、 % 表格列宽、行内公式对齐都不会因为换字体而漂。 +% +% ⚠️ 全库默认就是 Termes。简历模板(简历/)单独换成 Cochineal, +% 见下面「一之二」。其余 10 个模板不受影响。 %====================================================================== \setmainfont{texgyretermes}[ Extension = .otf, @@ -80,6 +83,82 @@ BoldItalicFont = *-bolditalic, ] +%====================================================================== +% 一之二、西文备用字体:Cochineal(Minion 风格) +% +% 为什么加这一款:Termes 是 Times 的度量兼容替代,中文用思源宋体时, +% 两者笔画粗细与字面灰度差得比较明显 —— 汉字是宋体的中等粗细, +% 西文 Termes 偏细偏紧,中英混排时西文那一段会"陷进去"。 +% Cochineal(Michael Sharpe 据 Minion 设计)笔画更饱满,与宋体灰度 +% 接近,学术出版物里用得很广。 +% +% 与 Termes 的度量差异(10pt 下同一句英文的排印宽度): +% Termes 229.68pt 100.0% x 高 0.450 +% Cochineal 225.42pt 98.1% x 高 0.433 +% 窄 1.9%,换过去几乎不会让断行位置变。这是选它而不是 Pagella +% (宽 10.8%)/ XCharter(宽 7.4%)的主要理由:那两款会把全库的 +% 表格列宽和断行推着变。 +% +% ⚠️ **不是全局生效**,必须显式调用下面这条才会切: +% \OUCLatinCochineal +% 目前只有 简历/awesome-source-cv.cls 调用。其余模板保持 Termes。 +% +% ⚠️ 三个地方一起换才算真的换掉: +% ① \setmainfont —— 正文西文(正文里的英文、数字、DOI) +% ② \tnr / \tnrb —— 模板里显式用 Times 形态的地方 +% ③ 数学字体 —— 本模板库的模板都不带公式,故未配 unicode-math。 +% 若将来某个模板要用公式,得再补 \setmathfont,否则公式里的 +% 拉丁字母还是 Computer Modern。 +% +% 授权:SIL OFL 1.1(Copyright 2010-2014 Sebastian Kosch; +% 2016-2021 Michael Sharpe)。OFL.txt 已随字体放在 +% ../fonts/cochineal/ 下。 +% +% 度量数据(供将来换字体时对照,单位 1/1000 em,upm=1000): +% 字体 x 高 cap 高 x/cap A 宽 字重 +% Termes 450 662 0.68 722 400 +% Cochineal 433 649 0.67 612 400 +%====================================================================== +\newfontfamily\OUCLatinCochineal{cochineal}[ + Extension = .otf, + Path = ../fonts/cochineal/, + UprightFont = *-Roman, + BoldFont = *-Bold, + ItalicFont = *-Italic, + BoldItalicFont = *-BoldItalic, +] + +% 粗体专用档:对应上面 \tnrb 的语义("取粗体那一字形当常规用")。 +% 与 \tnr 同样四档齐全,否则 \bfseries 里会报 +% Font shape `TU/cochineal/b/n' undefined +% 并静默回落,表现是加粗失效。 +\newfontfamily\OUCLatinCochinealBold{cochineal}[ + Extension = .otf, + Path = ../fonts/cochineal/, + UprightFont = *-Bold, + BoldFont = *-Bold, + ItalicFont = *-BoldItalic, + BoldItalicFont = *-BoldItalic, +] + +% 把上一条真正装成"正文西文字体"的开关。 +% 单独做成命令而不在字体声明处直接 \setmainfont,是因为 \newfontfamily +% 只登记了一个字族;要让它接管正文,必须再用 \setmainfont 指过去。 +\newcommand{\oucUseCochineal}{% + \setmainfont{cochineal}[ + Extension = .otf, + Path = ../fonts/cochineal/, + UprightFont = *-Roman, + BoldFont = *-Bold, + ItalicFont = *-Italic, + BoldItalicFont = *-BoldItalic, + ]% + % \tnr / \tnrb 也跟着走,否则模板里显式写了 \tnr 的地方仍是 Termes, + % 同一页出现两种西文字体。 + \renewcommand{\tnr}{\OUCLatinCochineal}% + \renewcommand{\tnrb}{\OUCLatinCochinealBold}% +} + %====================================================================== % 二、中文主字体 % diff --git a/fonts/LICENSE b/fonts/LICENSE index 59bde55..a4b885a 100644 --- a/fonts/LICENSE +++ b/fonts/LICENSE @@ -62,6 +62,23 @@ CFF 层的 fontNames / FamilyName / FullName 与 name 表,并在 name 表 本仓库为原版直接分发,未修改。 +-------------------------------------------------------------------------------- +四之二、Cochineal-*.otf +-------------------------------------------------------------------------------- +上游字体:Cochineal +设计者:Michael Sharpe(据 Sebastian Kosch 的 Crimson 衍化而来) +授权:SIL Open Font License 1.1 +授权原文:随本目录分发于 cochineal/OFL.txt + +Copyright (c) 2010-2014 Sebastian Kosch, with Reserved Font Name Crimson. +Copyright (c) 2016--2021, Michael Sharpe (msharpe@ucsd.edu), +with Reserved Font Name Cochineal. + +本仓库为原版直接分发,未修改、未改名。 + +用途:仅 简历/ 模板的西文(由 fonts.tex 的 \oucUseCochineal 切换), + 其余 10 个模板仍用 TeX Gyre Termes。 + -------------------------------------------------------------------------------- 五、HarmonyOS_Sans_*.ttf / HarmonyOS_Sans_SC_*.ttf -------------------------------------------------------------------------------- @@ -92,6 +109,8 @@ CFF 层的 fontNames / FamilyName / FullName 与 name 表,并在 name 表 [x] 所有 OFL 字体均保留授权全文(name 表 13/14 号),符合 OFL 1.1 §1。 [x] 未使用上游作者名义作任何背书暗示。 [x] TeX Gyre Termes 的 GFL 允许随文档分发。 +[x] Cochineal 为 SIL OFL 1.1,允许随仓库再分发;授权全文已随字体放入 + cochineal/OFL.txt,并保留在 name 表 13/14 号。 [x] HarmonyOS Sans 为华为官方允许免费商用。 如对本目录内任何字体的授权有疑问,请以上游地址的授权原文为准。 \ No newline at end of file diff --git a/fonts/README.md b/fonts/README.md index 963ab5c..ab786e5 100644 --- a/fonts/README.md +++ b/fonts/README.md @@ -12,11 +12,12 @@ fonts/ ├── ouc-kai/ OUC Kai 楷体 2 个,7.0 MB ├── zhuque-fangsong/ Zhuque Fangsong 仿宋 1 个,8.4 MB ├── tex-gyre-termes/ TeX Gyre Termes 西文 Times 等价 4 个,550 KB +├── cochineal/ Cochineal 西文 Minion 风格 4 个,920 KB ├── harmonyos-sans/ HarmonyOS Sans 鸿蒙(中英各一档) 6 个,16 MB └── fontawesome/ FontAwesome 简历模板的图标符号 1 个,130 KB ``` -合计约 **49 MB**(改造前是 141 MB:幻灯片 49 MB + 科技报告 92 MB 各自带一份, +合计约 **50 MB**(改造前是 141 MB:幻灯片 49 MB + 科技报告 92 MB 各自带一份, 外加两套重复的字体。现在全库只有这一份,省掉 65%)。 --- @@ -89,6 +90,42 @@ fonts/ 用它是为了保证中文模板里原有的西文断行、表格列宽、行内公式对齐不漂移。 实测同一段英文,Termes 与 Times New Roman 的逐词宽度差在 0.03pt 量级。 +**全库默认西文字体就是 Termes**(`fonts.tex` 的 `\setmainfont`)。除简历外的 +10 个模板都用它。 + +### 3b. Cochineal —— 西文 Minion 风格(简历专用) + +| | | +|---|---| +| 上游 | Cochineal(Michael Sharpe,据 Minion 设计) | +| 授权 | SIL OFL 1.1,可随仓库分发(`cochineal/OFL.txt`) | +| 特性 | 笔画比 Times 饱满,与思源宋体灰度更接近 | + +**为什么加这一款**:中文用思源宋体(中等粗细),Termes 是 Times 的度量兼容替代, +笔画偏细偏紧,中英混排时西文那一段视觉上会「陷进去」。Cochineal 笔画更饱满。 + +**为什么只有简历用**:它的宽度与 Termes 只差 **1.9%**(225.42 vs 229.68pt @10pt), +断行位置基本不动,所以换过去风险最小。其余候选宽 2.2%~10.8%,会把全库的表格列宽 +和断行推着变(数据见 `字体` 一节末尾的对照表)。 + +⚠️ **不是全局生效**。`fonts.tex` 里只做了声明: + +```latex +\oucUseCochineal % 调它才切;不调就还是 Termes +``` + +目前只有 `简历/awesome-source-cv.cls` 在 `\AtBeginDocument` 里调用。 + +**度量对照**(10pt 下同一句英文的排印宽度,供将来换字体时参考): + +| 字体 | 样句宽 | 相对 Termes | x 高 | cap 高 | +|---|---|---|---|---| +| Termes | 229.68pt | 100.0% | 0.450 | 0.662 | +| **Cochineal** | **225.42pt** | **98.1%** | 0.433 | 0.649 | +| Libertinus Serif | 234.62pt | 102.2% | 0.433 | 0.649 | +| XCharter | 246.69pt | 107.4% | 0.481 | 0.671 | +| TeX Gyre Pagella | 254.40pt | 110.8% | 0.472 | 0.695 | + ### 4. HarmonyOS Sans —— 鸿蒙字体 | | | @@ -189,8 +226,9 @@ fonts/ ouc-kai 7.0 MB zhuque-fangsong 8.4 MB tex-gyre-termes 0.55 MB + cochineal 0.92 MB harmonyos-sans 16.4 MB - 合计 49 MB (省 65%) + 合计 50 MB (省 65%) ``` --- @@ -204,6 +242,7 @@ fonts/ | `劳务发放说明表/` | OUC Serif | OUC Sans | TeX Gyre Termes | | `课程执行大纲/` | OUC Serif | OUC Sans | TeX Gyre Termes | | `试卷/` | OUC Serif / OUC Kai | OUC Sans | TeX Gyre Termes | +| `简历/` | OUC Serif / OUC Kai | OUC Serif Bold | **Cochineal** | | `幻灯片/` | HarmonyOS Sans SC | HarmonyOS Sans SC Bold | HarmonyOS Sans | | `科技报告/` | OUC Serif | OUC Serif Bold / OUC Kai | HarmonyOS Sans | @@ -276,6 +315,10 @@ print({f[3] for p in d for f in p.get_fonts()}) | `tex-gyre-termes/texgyretermes-bold.otf` | TeX Gyre Termes | 1053 | 139 KB | | `tex-gyre-termes/texgyretermes-italic.otf` | TeX Gyre Termes | 1053 | 141 KB | | `tex-gyre-termes/texgyretermes-bolditalic.otf` | TeX Gyre Termes | 1053 | 144 KB | +| `cochineal/Cochineal-Roman.otf` | Cochineal | 1237 | 227 KB | +| `cochineal/Cochineal-Bold.otf` | Cochineal | 1255 | 228 KB | +| `cochineal/Cochineal-Italic.otf` | Cochineal | 1186 | 228 KB | +| `cochineal/Cochineal-BoldItalic.otf` | Cochineal | 1198 | 219 KB | | `harmonyos-sans/HarmonyOS_Sans_Regular.ttf` | HarmonyOS Sans | 874 | 147 KB | | `harmonyos-sans/HarmonyOS_Sans_Bold.ttf` | HarmonyOS Sans | 874 | 146 KB | | `harmonyos-sans/HarmonyOS_Sans_Regular_Italic.ttf` | HarmonyOS Sans | 807 | 141 KB | diff --git a/fonts/cochineal/Cochineal-Bold.otf b/fonts/cochineal/Cochineal-Bold.otf new file mode 100644 index 0000000..6d00108 Binary files /dev/null and b/fonts/cochineal/Cochineal-Bold.otf differ diff --git a/fonts/cochineal/Cochineal-BoldItalic.otf b/fonts/cochineal/Cochineal-BoldItalic.otf new file mode 100644 index 0000000..b8fd6ab Binary files /dev/null and b/fonts/cochineal/Cochineal-BoldItalic.otf differ diff --git a/fonts/cochineal/Cochineal-Italic.otf b/fonts/cochineal/Cochineal-Italic.otf new file mode 100644 index 0000000..21af248 Binary files /dev/null and b/fonts/cochineal/Cochineal-Italic.otf differ diff --git a/fonts/cochineal/Cochineal-Roman.otf b/fonts/cochineal/Cochineal-Roman.otf new file mode 100644 index 0000000..7885f77 Binary files /dev/null and b/fonts/cochineal/Cochineal-Roman.otf differ diff --git a/fonts/cochineal/OFL.txt b/fonts/cochineal/OFL.txt new file mode 100644 index 0000000..f7b3438 --- /dev/null +++ b/fonts/cochineal/OFL.txt @@ -0,0 +1,96 @@ +Copyright (c) 2010-2014 Sebastian Kosch, with Reserved Font Name Crimson. + +Copyright (c) 2016--2021, Michael Sharpe (msharpe@ucsd.edu), +with Reserved Font Name Cochineal. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/简历/README.md b/简历/README.md index f27d99a..ff7d566 100644 --- a/简历/README.md +++ b/简历/README.md @@ -6,7 +6,7 @@ ## 特性 -- **字体全部取自仓库公共字体包**:中文 OUC Serif(宋体)/ OUC Sans(黑体)/ OUC Kai(楷体)/ Zhuque Fangsong(仿宋),西文 TeX Gyre Termes,图标 FontAwesome —— 没有任何一个字体来自系统或 TeX Live 安装,**换机器编译结果一致**; +- **字体全部取自仓库公共字体包**:中文 OUC Serif(宋体)/ OUC Sans(黑体)/ OUC Kai(楷体)/ Zhuque Fangsong(仿宋),西文 Cochineal,图标 FontAwesome —— 没有任何一个字体来自系统或 TeX Live 安装,**换机器编译结果一致**; - **真粗体**:标题、姓名、区块头用的都是字体自带的粗体,不是算法描边; - **分区可拆**:`section_01` ~ `section_10` 各自一个文件,不想要哪块就把对应 `\input` 注释掉; - **圆形头像**:`\photo{2.5cm}{photo}` 自动裁成圆形,尺寸随参数走; @@ -27,12 +27,13 @@ xelatex 简历.tex xelatex 简历.tex # 跑两遍:第一遍写 .aux,第二遍才能取到正确的页码与交叉引用 ``` -编译结果:3 页,日志零 error、零 Underfull、零 Overfull。嵌入字体只有 5 个,全部来自本仓库: +编译结果:3 页,日志零 error、零 Underfull、零 Overfull。嵌入字体只有 7 个,全部来自本仓库: | 字体 | 用途 | |---|---| | `OUCSerif-Regular` / `OUCSerif-Bold` | 中文正文与标题 | -| `TeXGyreTermes-Regular` / `-Bold` | 西文正文与标题 | +| `Cochineal-Roman` / `-Bold` / `-Italic` | 西文正文、标题与斜体 | +| `OUCKai-Regular` | 中文斜体(楷体代斜体,中文惯例) | | `FontAwesome` | 联系方式行图标 | ## 改什么、在哪儿改 @@ -55,7 +56,7 @@ xelatex 简历.tex # 跑两遍:第一遍写 .aux,第二遍才能取 | 上游做法 | 问题 | 本模板的处理 | |---|---|---| | `zh_cn-adobefonts_external.sty` 设 Adobe 宋/黑/楷/仿 | 56 MB 商业字体,无授权不可分发 | **删掉这两个文件**,改由 `../fonts.tex` 提供中文字体 | -| `awesome-source-cv.cls` 的 `localFont` 分支设 `SourceSansPro-*`(9 个 .otf) | 同上,且与仓库已有西文字体重复 | cls 里的 `\setmainfont` 整段删除,西文改走 `../fonts.tex` 的 TeX Gyre Termes | +| `awesome-source-cv.cls` 的 `localFont` 分支设 `SourceSansPro-*`(9 个 .otf) | 同上,且与仓库已有西文字体重复 | cls 里的 `\setmainfont` 整段删除,西文改走 `../fonts.tex` 提供的 Cochineal | | `fontawesome.sty` 用字体名找系统 FontAwesome | 机器上没装就编不过 | 改成显式 `Path=../fonts/fontawesome/`,字体文件已入仓库 | 删掉的两个文件里还有个隐藏问题值得记一笔:原 `zh_cn-adobefonts_external.sty` 里 @@ -95,16 +96,57 @@ xelatex 简历.tex # 跑两遍:第一遍写 .aux,第二遍才能取 ### 3. 排版小修 -- **左栏宽度改自适应**:原来 `\leftcolumn 2.5cm + \rightcolumnlength 14.8cm` 看着 - 小于版心 18 cm,但两列共 4 个 `\tabcolsep`(≈0.85 cm)没算进去,实际 18.15 cm, - 日志有 `Overfull 4.48pt`。改成 - `\dimexpr\linewidth-\leftcolumn-4\tabcolsep\relax` 由版心反算,改页边距也不用再调数字。 +- **项目经验不再「缩进一大截」**:这一节原来整块右移了约 3.4 cm,与其他章节的 + 日期列对不齐(145.1pt vs 48.5pt)。根因不是 `\hfill` 也不是竖线,而是 + `\rightcolumnlength` **算早了**——`geometry` 的边距要到导言区结束才生效, + 而 cls 里那句 `\setlength` 执行得更早,读到 article 默认的 345pt 文字宽, + 算出 249.87pt,比应有的 417.02pt 少了 167.15pt;`longtable` 把这张窄表居中排, + 于是整块右移 167.15/2 ≈ 83.6pt。修法两条:计算挪进 `\AtBeginDocument` + (并额外减去 `|` 竖线的 `\arrayrulewidth`=0.4pt);`R` 列由 + `>{\hfill}m{2.5cm}`(固定宽右贴)改为 `>{\raggedright\arraybackslash}p{2.5cm}`。 + 改后日期左边缘 145.1 → **48.5pt**,与工作经历/教育经历/奖励与荣誉严格一致。 + ⚠️ 这类错误**零 error、零 warning**,只看日志发现不了,必须量 PDF 坐标。 +- **左栏宽度改按版心反算**:原来 `\leftcolumn 2.5cm + \rightcolumnlength 14.8cm` + 看着小于版心 18 cm,但两列共 4 个 `\tabcolsep`(≈0.85 cm)没算进去,实际 18.15 cm, + 日志有 `Overfull 4.48pt`。改成由 `\textwidth` 减去左列、列间距与竖线宽度, + 改页边距也不用再调数字。 +- **中西文之间加断行弹性**:论文条目里「…Applications (ICIEA), 88--93. 中国青岛…」 + 这类「长英文名紧跟中文」的串,XeLaTeX 默认不在中英交界处断开,会把整串当 + 一个长单词硬冲出去(实测冲出 88.5pt,文字顶到纸边)。给 itemize 加 + `\emergencystretch=3em` 解决,不动字体、不改内容、不影响其他环境。 - **抬头去掉两处空盒**:`\vspace*{0.3cm}\\` 和 `\smallskip\\` 会在换行前多产生一个 空 hbox(日志刷 `Underfull \hbox (badness 10000)`),改成 `\\[0.3cm]` / `\\[\smallskipamount]`,间距效果不变。 - **`\socialinfo` 末尾不要留 `\\`**:`简历.tex` 里最后一行 `\address{...}` 后面加了 `\\` 同样会多一个空行。中间的 `\\` 是分行,必须保留。 +### 4. 西文字体换成 Cochineal + +中文用思源宋体(中等粗细),原先配的 **TeX Gyre Termes** 是 Times 的度量兼容替代, +笔画偏细偏紧,中英混排时西文那一段视觉上会「陷进去」。改用 **Cochineal** +(Michael Sharpe 据 Minion 设计,SIL OFL 1.1,920 KB 已入 `../fonts/cochineal/`)。 + +| 字体 | 同一句英文宽(10pt) | 相对 Termes | x 高 | +|---|---|---|---| +| TeX Gyre Termes(原) | 229.68pt | 100.0% | 0.450 | +| **Cochineal(现)** | 225.42pt | **98.1%** | 0.433 | +| Libertinus Serif | 234.62pt | 102.2% | 0.433 | +| XCharter | 246.69pt | 107.4% | 0.481 | +| TeX Gyre Pagella | 254.40pt | 110.8% | 0.472 | + +选 Cochineal 的理由是**宽度几乎不变(窄 1.9%)**,断行位置和表格列宽基本不动; +Pagella / XCharter 宽 7~11%,会把全库的断行推着变。 + +⚠️ 三点务必注意: + +1. **只影响简历**。切换命令 `\oucUseCochineal` 定义在 `../fonts.tex`, + 但**不是**全局生效,只有本模板的 cls 调用。改全库请改 `\setmainfont` 本身。 +2. **必须放在 `\AtBeginDocument` 里**。cls 执行时主文件还没 `\input{../fonts.tex}`, + 那个命令尚未定义,直接调用会报 `Undefined control sequence`。 +3. **换西文字体后必须复查 Overfull**。字体窄 1.9% 会让断点位置整体前移, + 原本「刚好挤进去」的长串就会暴露成真溢出——本次换字体就是这样才发现 + ICIEA 那条论文冲出 88.5pt 的。 + ## 写的时候容易踩的三个坑 1. **`\newExperience` 的参数顺序是「结束在前、开始在后」** —— 上游定义就是先印 diff --git a/简历/awesome-source-cv.cls b/简历/awesome-source-cv.cls index c184edf..78a6105 100644 --- a/简历/awesome-source-cv.cls +++ b/简历/awesome-source-cv.cls @@ -101,10 +101,59 @@ \titlespacing{\section}{0pt}{2pt}{2pt} % Configure list -\setlist[itemize,1]{label=\faAngleRight, nosep, leftmargin=2em} +\setlist[itemize,1]{label=\faAngleRight, nosep, leftmargin=2em} + +%---------------------------------------------------------------------- +% 中西文之间的断行弹性 +% +% 现象:论文条目里「… Applications (ICIEA), 88--93. 中国青岛, 中国: IEEE, +% 2023. https://doi.org/…」这一整段会冲出右边距 88.5pt,文字一直排到 +% 页面纸边(x=595.5,而纸宽才 595.28)。用 Termes 时只有 0.4pt 之差, +% 换 Cochineal 后(西文窄 1.9%,断点位置整体前移)暴露成 88.5pt。 +% +% 根因:XeLaTeX 里「中文紧跟英文」的位置默认**不是**断开点,TeX 会把 +% 「2023 IEEE 18th Annual Conference on Industrial Electronics and +% Applications (ICIEA), 88--93.」当成一个长单词找断点,找到头也没有, +% 于是硬冲出去。上游模板没有设 \emergencystretch,也没有开 +% \XeTeXlinebreaklocale,所以一点余量都没有。 +% +% 修法(三选一,这里选第 1 个): +% ① 给 itemize 加 \emergencystretch —— 允许在极端情况下把行拉松 +% 而不是硬冲出去。不动字体、不改内容、不影响其他环境。 +% ② 全局 \sloppy —— 效果类似但会把**所有**段落的词距都放松, +% 连正常的短段落也变松散,观感下降。 +% ③ 在 .tex 里手工插入 \allowbreak / \- —— 要逐条改,换字体又要重来。 +% +% \emergencystretch=3em 的量级:按 10pt 正文,3em=30pt,足以吃掉 +% 88.5pt 中的大部分,剩余部分交给行内词距自然拉伸。若将来换了更宽的 +% 西文字体(如 Pagella 宽 10.8%)还报 Overfull,把这个值调到 4em~5em。 +% ⚠️ 不要设成 \maxdimen 一劳永逸 —— 那等于关掉断行检查, +% 真正的排版问题会被全部藏起来,日志再也不报。 +%---------------------------------------------------------------------- +\setlength{\emergencystretch}{3em} % Setup Array : new column type -\newcolumntype{R}[1]{>{\hfill}m{#1}} +% +% ⚠️ 原来是 >{\hfill}m{#1},即「固定宽度 + 内容靠右贴」。 +% 用在本简历里会出问题:\hfill 让短日期贴着左列的**右**边界排, +% 日期本身只有约 57pt 宽而左列有 2.5cm=71.13pt,于是日期左边缘落在 +% 42.5(左边距) + 6(\tabcolsep) + 71.13 - 57.3 = 62.33pt +% 而其他章节(工作经历/教育经历/奖励与荣誉)用的是 tabular{rl}, +% 左列宽度自适应到最长的日期区间(约 122pt),日期左边缘在 +% 42.5 + 6 = 48.5pt +% 两节一比就差 13.8pt,看上去「项目经验往里缩了一点」。 +% +% 现在改成左对齐:日期左边缘回到 48.5pt,与其余章节的日期左边缘 +% 严格对齐(本项目全部日期都是「YYYY 年MM 月」同宽 57.3pt, +% 所以左对齐后右边缘也齐,列不会显乱)。 +% +% ⚠️ 用 p{} 而不用 m{}:m{} 是「垂直居中」的 parbox 列,在 +% longtable 里跨页断行时行为不如 p{} 稳;这张表一行可能很高 +% (右栏带 itemize)。配 \arraybackslash 让 \\ 在列内恢复正常。 +% ⚠️ R 列只被 experiences 环境使用(skills 环境虽也写了 R,但本 +% 简历没有调用 section_skills),改动不会波及别处。若将来启用 +% skills 环境,那里是「技能名 + 五点圆点」,左对齐同样合适。 +\newcolumntype{R}[1]{>{\raggedright\arraybackslash}p{#1}} %Italian hyphenation for the word: ''corporations'' \hyphenation{im-pre-se} @@ -153,12 +202,39 @@ % Path 指向本目录下并不存在的 fonts/ —— 只能靠系统字体兜底。 % 现在路径写进 fontawesome.sty 了。 -% 西文正文:上游用 Source Sans Pro Light(很细),本模板改用 Termes。 -% 注意这里**不能**再 \setmainfont —— 那会把 fonts.tex 设好的 Termes -% 整套换掉。只把上游代码里对 Light/Semibold 的引用映射到 Termes 的 -% 常规/粗体两档,保持"正文常规、强调加粗"的层级不变。 -\providecommand{\sourcesanslight}{\tnr} -\providecommand{\sourcesanssemibold}{\tnrb} +% 西文正文:上游用 Source Sans Pro Light(很细),本模板改用 Cochineal。 +% +% ⚠️ 这里**不能**直接 \setmainfont —— 那会在 cls 里再写一套字体声明, +% 违反本仓库「字体只在 ../fonts.tex 声明」的规矩(换字号/换字体时 +% 要改两处,早晚改漏一处)。改调用 fonts.tex 提供的开关命令。 +% +% 为什么从 Termes 换成 Cochineal: +% 中文用思源宋体(OUC Serif),笔画中等粗细;Termes 是 Times 的度量 +% 兼容替代,笔画偏细偏紧,中英混排时西文那一段视觉上会"陷进去"。 +% Cochineal(Minion 风格)笔画更饱满,与宋体灰度接近。 +% 宽度只差 1.9%(229.68 → 225.42pt @10pt),断行位置基本不动。 +% +% 注意 \tnr / \tnrb 也被这个命令一并重指向,否则上游代码里显式写 +% \tnr 的地方仍是 Termes,同一页会混两种西文字体。 +% +% ⚠️ 必须包在 \AtBeginDocument 里,不能直接写 \oucUseCochineal: +% cls 执行时主文件还没 \input{../fonts.tex},那个命令尚未定义,会报 +% ! Undefined control sequence. +% l.191 \oucUseCochineal +% \AtBeginDocument 的内容排在导言区末尾才展开,那时 fonts.tex 已读入。 +% ⚠️ 不要用 \providecommand 兜底:兜底会让 fonts.tex 缺席时静默跳过 +% 换字体,比直接报错更难查。 +\AtBeginDocument{\oucUseCochineal} + +% 上游用 Source Sans Pro 的 Light / Semibold 两档,这里映射到 Cochineal +% 的常规/粗体,保持"正文常规、强调加粗"的层级不变。 +% ⚠️ 要在 \AtBeginDocument 之后重新定义才指向新字体,故也放进 +% \AtBeginDocument;直接用 \providecommand 会在换字体前就把 \tnr +% 的**旧值**(Termes)存进去,之后再改 \tnr 也传不过去。 +\AtBeginDocument{% + \providecommand{\sourcesanslight}{\tnr}% + \providecommand{\sourcesanssemibold}{\tnrb}% +} %New length definition % @@ -169,13 +245,50 @@ % Overfull \hbox (4.48311pt too wide) in alignment at lines 20--70 % 这种"算着够、实际差一点"的溢出,换字号/字体后会时有时无,很难查。 % -% 改法:不让它猜,直接用 \linewidth 减去左列与列间距。 -% 这样改页边距(geometry)后不用再跟着调数字。 +% 改法:不让它猜,直接用版心宽减去左列与列间距。 +% +% ⚠️⚠️ 【必须在 \AtBeginDocument 里算,不能在 cls 的这里直接 \setlength】 +% +% 根因:\RequirePackage[margin=1.5cm]{geometry} 只是**登记**参数, +% geometry 真正改写 \textwidth 是在导言区结束时(\begin{document} +% 的那一刻)。cls 里这条 \setlength 执行得比它早,读到的是 article +% 的默认 \textwidth = 345pt,于是算出 +% 345 − 71.13(2.5cm) − 24(4×6pt) = 249.87pt +% 而真实版心宽 18cm = 512.15pt,本应是 +% 512.15 − 71.13 − 24 = 417.02pt +% 两者差 167.15pt。 +% +% 后果不是报错,而是**整块内容右移**:longtable 默认把宽度小于版心 +% 的表格居中排(\LTleft/\LTright 都是 \fill),表格总宽只剩 345pt, +% 于是在 512pt 的版心里左留白 (512.15−345)/2 ≈ 83.6pt。 +% 表现就是「项目经验那一节缩进了一大截」——左边 2.5cm 的日期列被 +% 推到 x≈145pt,而其他用 tabular 的章节(工作经历/教育经历/奖励) +% 还是 x≈48pt,两节对不齐。 +% 日志里零 error、零 warning,只看日志发现不了。 +% +% 验证方式(改完看这个数对不对): +% \typeout{\the\rightcolumnlength} → 416.6pt 左右 +% 若仍是 249.86pt 左右,说明又被别的地方提前算掉了。 +% +% ⚠️ 用 \textwidth 而不是 \linewidth:\linewidth 在列表/环境里会被 +% 局部改写,而这张表永远按版心宽排。 +% +% ⚠️ 还要减掉 \arrayrulewidth(0.4pt):experiences 环境用的是 +% {R{..}|E},中间那条竖线本身占 0.4pt 宽度。只减 4 个 \tabcolsep +% 的话,表格总宽 = 版心宽 + 0.4,日志里会多一条 +% Overfull \hbox (0.4pt too wide) in alignment +% 数值小到肉眼看不出来,但属于「算得不准」,一并修掉。 +% +% ⚠️ 与西文字体联动:\rightcolumnlength 里没有西文字宽,所以换字体 +% (Termes → Cochineal)不影响这个数的正确性;但右栏 p{} 的断行 +% 会随字体变,换字体后必须复查一遍日志有没有新 Overfull。 \newlength{\rightcolumnlength} \newlength{\leftcolumn} \setlength{\leftcolumn}{2.5cm} -\setlength{\rightcolumnlength}{% - \dimexpr\linewidth-\leftcolumn-4\tabcolsep\relax} +\AtBeginDocument{% + \setlength{\rightcolumnlength}{% + \dimexpr\textwidth-\leftcolumn-4\tabcolsep-\arrayrulewidth\relax}% +} % Font Awesome icons aliases \newcommand{\mailSymbol}{\faEnvelope} diff --git a/简历/简历.pdf b/简历/简历.pdf index fdf5a76..20a98ae 100644 Binary files a/简历/简历.pdf and b/简历/简历.pdf differ diff --git a/课程执行大纲/README.md b/课程执行大纲/README.md index f2e9ab4..b00a372 100644 --- a/课程执行大纲/README.md +++ b/课程执行大纲/README.md @@ -218,7 +218,23 @@ FangSong 也都不允许随仓库分发。 > `\ccfang` 换成 `\cchei` —— 黑体本身就是标题用的重字面。 同时 `\xeCJKsetup{CJKecglue={}}` 关掉了西文与汉字之间的自动空隙 —— 原 docx 没有这种空隙, -不关会出现「×× 学部×× 学院」这种多出来的空格。 +不关会在中英交界处多出一个空格(原 docx 里紧挨着的「2026 学年」「56/3.0」都会松开)。 + +## 院名可改(原先是硬编码的 ×× 占位) + +首页抬头第二行原本在 `ouccourse.sty` 里**写死**成「××学部××学院」,PDF 里 +能直接看到 4 个叉号。现在拆成两个名称宏,改院名只动导言区: + +```latex +\renewcommand{\ccdepartment}{海洋地球科学学院} % 默认「信息科学与工程学部」 +\renewcommand{\cccollege}{地质学系} % 默认「计算机科学与技术学院」 +``` + +默认值取自本模板的虚构设定(陈立群 / 电子信息工程 / 2025 秋),与课程教学日历、 +成绩构成说明、试卷等模板保持一致。校名「中国海洋大学」是真实的,不虚构。 + +> ⚠️ 为什么不写成 `\ccschool[学部][学院]`:LaTeX 的 `\newcommand` 只支持 +> **一个**可选参数,第二个方括号会被当成正文印出来。 ## 与 docx 的已知差异 diff --git a/课程执行大纲/ouccourse.sty b/课程执行大纲/ouccourse.sty index 7975c20..19fad77 100644 --- a/课程执行大纲/ouccourse.sty +++ b/课程执行大纲/ouccourse.sty @@ -217,10 +217,29 @@ % 段落 rPr 却写 12pt + 下划线 + 红色(C00000)。这是原文件的 % 遗留脏属性,实际渲染按 run 的 14pt 黑体走,故本包按 14pt 黑体。 %====================================================================== +%---------------------------------------------------------------------- +% 校名 + 院名 +% +% ⚠️ 上游这里把院名写死成「××学部××学院」。本仓库的规矩是示例内容 +% 不能留 ×(满篇 × 既看不出排版效果,也没法直接对着改),所以拆成 +% 两个名称宏,改名只动导言区,不用碰 .sty: +% \ccdepartment 学部名 默认「信息科学与工程学部」 +% \cccollege 学院名 默认「计算机科学与技术学院」 +% 默认值取自本模板的虚构设定(陈立群 / 电子信息工程 / 2025 秋), +% 与课程教学日历、成绩构成说明、试卷等模板保持一致。 +% +% ⚠️ 为什么不写成 \ccschool[学部][学院]:LaTeX 的 \newcommand 只支持 +% **一个**可选参数,第二个方括号会被当成正文印出来。要两个都得用 +% xparse 的 \NewDocumentCommand,为一个院名不值当。 +% +% ⚠️ 校名「中国海洋大学」是**真实**的、且是本模板库的主体,不虚构。 +%---------------------------------------------------------------------- +\newcommand{\ccdepartment}{信息科学与工程学部} +\newcommand{\cccollege}{计算机科学与技术学院} \newcommand{\ccschool}{% \par\begingroup\centering {\ccbiaosong\ccszxv 中国海洋大学\par}% - {\ccbiaosong\ccszxiii ××学部××学院\par}% + {\ccbiaosong\ccszxiii \ccdepartment\cccollege\par}% \endgroup} \newcommand{\ccsubtitle}{% diff --git a/课程执行大纲/课程执行大纲.pdf b/课程执行大纲/课程执行大纲.pdf index 420791b..8a31e88 100644 Binary files a/课程执行大纲/课程执行大纲.pdf and b/课程执行大纲/课程执行大纲.pdf differ