简历排版修正:项目经验整块右移、西文换 Cochineal、课程执行大纲漏网 × #12

一、项目经验整块右移(简历/awesome-source-cv.cls)
  \rightcolumnlength 算早了:geometry 的 1.5cm 边距要到导言区结束才生效,
  cls 里那句 \setlength 读到 article 默认 \textwidth=345pt,算出 249.87pt,
  比应有的 417.02pt 少 167.15pt。longtable 把窄表居中排,整块右移 83.6pt。
  修法:计算挪进 \AtBeginDocument 并减去 | 竖线的 \arrayrulewidth;
  R 列由 >{\hfill}m{2.5cm} 改为 >{\raggedright\arraybackslash}p{2.5cm}。
  日期左边缘 145.1 -> 48.5pt,与其余章节严格对齐。
  这类错误零 error 零 warning,只能量 PDF 坐标才能发现。

二、西文换 Cochineal(fonts/cochineal/ + fonts.tex + 简历 cls)
  中文思源宋体配 Termes 时西文笔画偏细,中英混排会「陷进去」。
  Cochineal 宽 225.42pt vs Termes 229.68pt,只窄 1.9%,断行位置基本不动;
  Pagella/XCharter 宽 7~11%,会把全库断行推着变,故不选。
  字体 920KB 入 fonts/cochineal/(SIL OFL 1.1,附 OFL.txt),
  fonts.tex 新增 \oucUseCochineal 开关,只简历调用,其余 10 个模板不受影响。

三、换字体后暴露的真实缺陷
  西文窄 1.9% 让断点整体前移,ICIEA 那条论文冲出 88.49pt(文字顶到纸边)。
  根因是中文紧跟英文的位置不是断开点,整串被当长单词。
  加 \emergencystretch=3em 解决。

四、课程执行大纲漏网占位符(ouccourse.sty)
  ××学部××学院 硬编码在 \ccschool 里,#11 只扫了 .tex 没扫 .sty 所以漏了。
  拆成 \ccdepartment / \cccollege 两个名称宏,默认「信息科学与工程学部 /
  计算机科学与技术学院」。重编后全文 × 归零。

「代码库 PDF 没更新」经核实不成立:本地/远程 HEAD 均为 8984b93,
从服务器下载 8 个 PDF 逐字节比对全部一致,简历.pdf 3 页 0 个 ×。

验证:简历 3 页 0 error/0 Overfull/0 Underfull;全库 12 项编译回归与基线一致。
This commit is contained in:
2026-10-27 13:13:54 +08:00
parent 8984b93ee7
commit 69da5b41a6
15 changed files with 455 additions and 27 deletions
+4 -3
View File
@@ -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 声明。
> 用本模板编译出的文档**不受**这些字体授权约束,版权归作者本人。
+79
View File
@@ -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}%
}
%======================================================================
% 二、中文主字体
%
+19
View File
@@ -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 为华为官方允许免费商用。
如对本目录内任何字体的授权有疑问,请以上游地址的授权原文为准。
+45 -2
View File
@@ -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 |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+96
View File
@@ -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.
+50 -8
View File
@@ -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` 的参数顺序是「结束在前、开始在后」** —— 上游定义就是先印
+123 -10
View File
@@ -103,8 +103,57 @@
% Configure list
\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}
\AtBeginDocument{%
\setlength{\rightcolumnlength}{%
\dimexpr\linewidth-\leftcolumn-4\tabcolsep\relax}
\dimexpr\textwidth-\leftcolumn-4\tabcolsep-\arrayrulewidth\relax}%
}
% Font Awesome icons aliases
\newcommand{\mailSymbol}{\faEnvelope}
BIN
View File
Binary file not shown.
+17 -1
View File
@@ -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 的已知差异
+20 -1
View File
@@ -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}{%
Binary file not shown.