Compare commits
33
Commits
a29f193cff
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9c959c0a2f | ||
|
|
b3df669850 | ||
|
|
687aa0a5b4 | ||
|
|
203e490197 | ||
|
|
3906bb49a4 | ||
|
|
f87d763602 | ||
|
|
a4bfcac82a | ||
|
|
c4e686de11 | ||
|
|
333e2a7789 | ||
|
|
2e79b00d50 | ||
|
|
f42e6e398a | ||
|
|
1c67b7ded1 | ||
|
|
dc5e9337e8 | ||
|
|
42c1394aec | ||
|
|
6819d78f29 | ||
|
|
fb7c76b944 | ||
|
|
93b03c8a78 | ||
|
|
5d59aa1853 | ||
|
|
8660860495 | ||
|
|
ef1bc72603 | ||
|
|
1c27041c71 | ||
|
|
7cd542a11f | ||
|
|
e70339fcf6 | ||
|
|
1abb3cf5ef | ||
|
|
0fd6021b03 | ||
|
|
389ddf51f0 | ||
|
|
ecfbcb8c67 | ||
|
|
eb3b53946c | ||
|
|
8e3017f359 | ||
|
|
69da5b41a6 | ||
|
|
8984b93ee7 | ||
|
|
cc0dfb7257 | ||
|
|
95afc9caa6 |
@@ -0,0 +1,36 @@
|
|||||||
|
# 换行符策略
|
||||||
|
#
|
||||||
|
# 背景:这个仓库同时在 Windows(TeX Live 2022)和 WSL/Linux(TeX Live 2025)
|
||||||
|
# 上使用。Windows 侧 core.autocrlf=true 会把文本文件存成 CRLF,
|
||||||
|
# 而 shell 脚本一旦是 CRLF,在 Linux 上执行会报
|
||||||
|
# bash: ./build.sh: /bin/bash^M: bad interpreter: No such file or directory
|
||||||
|
# 这个报错不直观(看起来像"没有 bash",实际是行尾多了回车),
|
||||||
|
# 所以在仓库层面把规则固定下来,不依赖每个人本机的 autocrlf 设置。
|
||||||
|
|
||||||
|
# 所有 .sh 一律 LF,Windows 侧检出也不转换
|
||||||
|
*.sh text eol=lf
|
||||||
|
|
||||||
|
# TeX 源码与样式:LaTeX 对 CRLF 容忍度好,但 eol=lf 能避免
|
||||||
|
# 中文注释在行尾残留 CR 被 XeTeX 当成字符排出来
|
||||||
|
*.tex text eol=lf
|
||||||
|
*.sty text eol=lf
|
||||||
|
*.cls text eol=lf
|
||||||
|
*.bib text eol=lf
|
||||||
|
|
||||||
|
# 配置文件
|
||||||
|
*.gitignore text eol=lf
|
||||||
|
.gitignore text eol=lf
|
||||||
|
.gitattributes text eol=lf
|
||||||
|
*.md text eol=lf
|
||||||
|
|
||||||
|
# 二进制:不参与换行符转换与文本 diff
|
||||||
|
*.pdf binary
|
||||||
|
*.otf binary
|
||||||
|
*.ttf binary
|
||||||
|
*.ttc binary
|
||||||
|
*.png binary
|
||||||
|
*.jpg binary
|
||||||
|
*.jpeg binary
|
||||||
|
*.gif binary
|
||||||
|
*.ico binary
|
||||||
|
*.zip binary
|
||||||
+14
-1
@@ -16,6 +16,19 @@
|
|||||||
*.snm
|
*.snm
|
||||||
*.vrb
|
*.vrb
|
||||||
|
|
||||||
|
# biblatex 的中间产物(教材/ 会生成)
|
||||||
|
# *-blx.bib biblatex 自动写的"引用收集"文件,每次编译重写,不是输入
|
||||||
|
# *.run.xml biblatex 运行时状态
|
||||||
|
*-blx.bib
|
||||||
|
*.run.xml
|
||||||
|
|
||||||
|
# 各模板的预览图(截图导出,不入库)
|
||||||
|
*/.preview/
|
||||||
|
|
||||||
|
# 简历成果统计的自动生成文件(每次编译重写,不要提交)
|
||||||
|
# 见 简历/awesome-source-cv.cls 的「成果统计」一节
|
||||||
|
*.cvnum
|
||||||
|
|
||||||
# 编辑器
|
# 编辑器
|
||||||
.vscode/
|
.vscode/
|
||||||
.idea/
|
.idea/
|
||||||
@@ -24,4 +37,4 @@
|
|||||||
|
|
||||||
# 系统
|
# 系统
|
||||||
.DS_Store
|
.DS_Store
|
||||||
Thumbs.db
|
Thumbs.db会议预算表/.preview/
|
||||||
|
|||||||
@@ -1,58 +1,169 @@
|
|||||||
# ouc_latex_template
|
# 中国海洋大学 LaTeX 模板库
|
||||||
|
|
||||||
中国海洋大学各类文件 LaTeX 模板。**本仓库是本项目唯一的模板维护库**,各模板按文档类别分目录存放,互不依赖、可单独编译。
|
17 个文档模板 + 一份公共字体。换机器、换系统、换 Overleaf,编译结果一致。
|
||||||
|
|
||||||
## 目录
|
## 目录结构
|
||||||
|
|
||||||
| 目录 | 内容 | 编译入口 |
|
```
|
||||||
|
ouc_latex_template/
|
||||||
|
├── fonts.tex ← 公共字体入口,所有模板都引用它
|
||||||
|
├── fonts/ ← 字体文件(唯一的字体来源)
|
||||||
|
├── build.sh ← 编译脚本
|
||||||
|
├── verify_all.sh ← 全库编译检查
|
||||||
|
│
|
||||||
|
├── 会议预算表/ ┐
|
||||||
|
├── 劳务发放说明表/ │
|
||||||
|
├── 年度考核登记表/ │
|
||||||
|
├── 特殊事项说明表/ │
|
||||||
|
├── 成绩构成说明/ │
|
||||||
|
├── 试卷/ │
|
||||||
|
├── 试卷归档封面/ │ 17 个模板
|
||||||
|
├── 试卷归档目录/ │ 每个目录自成一体
|
||||||
|
├── 课程大纲/ │ 各自带 README
|
||||||
|
├── 课程执行大纲/ │
|
||||||
|
├── 课程教学日历/ │
|
||||||
|
├── 教材/ │
|
||||||
|
├── 科技报告/ │
|
||||||
|
├── 幻灯片/ │
|
||||||
|
├── 简历/ │
|
||||||
|
└── 点名册/ ┘
|
||||||
|
```
|
||||||
|
|
||||||
|
## 模板清单
|
||||||
|
|
||||||
|
| 模板 | 用途 | 主文件 |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| [`试卷/`](试卷/) | 期末考试**试卷**、**参考答案及评分标准**两套模板 | `试卷题型示例.tex`、`参考答案与评分标准示例.tex` |
|
| `会议预算表/` | 会议经费预算表 | `会议预算表.tex` |
|
||||||
| [`试卷归档封面/`](试卷归档封面/) | 信息科学与工程学部**试卷归档封面**(理论课) | `试卷归档封面.tex` |
|
| `劳务发放说明表/` | 劳务费发放说明 | `劳务发放说明表.tex` |
|
||||||
| [`试卷归档目录/`](试卷归档目录/) | 信息科学与工程学部**试卷归档目录**(理论课,12 项核对清单) | `试卷归档目录.tex` |
|
| `年度考核登记表/` | 教职工年度考核登记表 | `年度考核登记表.tex` |
|
||||||
| [`年度考核登记表/`](年度考核登记表/) | 教职工**年度考核登记表** | `年度考核登记表.tex` |
|
| `特殊事项说明表/` | 报销用特殊事项说明表 | `特殊事项说明表.tex` |
|
||||||
| [`劳务发放说明表/`](劳务发放说明表/) | **劳务发放说明表** | `劳务发放说明表.tex` |
|
| `成绩构成说明/` | 课程成绩构成说明 | `成绩构成说明.tex` |
|
||||||
| [`课程执行大纲/`](课程执行大纲/) | 本科**课程教学执行大纲** | `课程执行大纲.tex` |
|
| `试卷/` | 试卷 + 参考答案与评分标准 | `试卷题型示例.tex`、`参考答案与评分标准示例.tex` |
|
||||||
| [`课程教学日历/`](课程教学日历/) | 学校通用版**课程教学日历(理论课程)**(附件3,16 周日历表) | `课程教学日历.tex` |
|
| `试卷归档封面/` | 试卷袋归档封面 | `试卷归档封面.tex` |
|
||||||
| [`成绩构成说明/`](成绩构成说明/) | **成绩构成说明**(理论课/实验课比例分解表 + 教师签字栏) | `成绩构成说明.tex` |
|
| `试卷归档目录/` | 试卷袋归档目录 | `试卷归档目录.tex` |
|
||||||
| [`幻灯片/`](幻灯片/) | 演示文稿(**beamer** 主题,海大配色) | `slides.tex` |
|
| `课程大纲/` | 本科生课程大纲 | `课程大纲.tex` |
|
||||||
| [`科技报告/`](科技报告/) | **科技报告**、实验讲义、说明文档 | `report.tex` |
|
| `课程执行大纲/` | 课程执行大纲 | `课程执行大纲.tex` |
|
||||||
|
| `课程教学日历/` | 课程教学日历 | `课程教学日历.tex` |
|
||||||
|
| `教材/` | 教材、专著(成书排版) | `教材.tex` |
|
||||||
|
| `科技报告/` | 科技报告、实验讲义 | `report.tex` |
|
||||||
|
| `幻灯片/` | Beamer 演示文稿(16:9) | `slides.tex` |
|
||||||
|
| `简历/` | 个人简历 | `简历.tex` |
|
||||||
|
| `点名册/` | 课程点名册(A4 横向,18 周考勤) | `点名册.tex` |
|
||||||
|
|
||||||
## 编译
|
## 编译
|
||||||
|
|
||||||
全部模板都**必须用 XeLaTeX**(fontspec + xeCJK),pdflatex 编译不过:
|
在**模板目录内**编译,不要在仓库根目录编译。
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd 幻灯片
|
cd 课程大纲
|
||||||
xelatex slides.tex
|
xelatex 课程大纲.tex
|
||||||
xelatex slides.tex # 跑两遍,第二遍才能取到正确的目录、交叉引用与总页数
|
|
||||||
```
|
```
|
||||||
|
|
||||||
目录名含中文不影响编译(已实测 10 个模板目录在中文目录下零报错编译通过)。
|
或用编译脚本(在仓库根目录执行):
|
||||||
|
|
||||||
## 说明
|
```bash
|
||||||
|
bash build.sh 课程大纲 # 编单个模板
|
||||||
|
bash build.sh all # 编全部,输出汇总
|
||||||
|
bash verify_all.sh # 检查全部:错误数 / Overfull / 页数
|
||||||
|
```
|
||||||
|
|
||||||
- **字体单一来源**:全库字体集中在根目录 [`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))。
|
|
||||||
- **每个子目录自包含**:样式文件(`.sty` / `.cls`)、图片都在各目录内,编译时不需要额外的宏包搜索路径;只有字体是共享的上层目录。
|
### 各模板编译遍数
|
||||||
- **各目录的 `README.md`** 写明该模板的用法、可改参数、版式数据来源与书写注意事项,改之前先看。
|
|
||||||
- **示例内容为占位**:模板均不含真题、不含真人信息,姓名 / 学号 / 职工号 / 课程代码等一律用 `×` 或虚构值占位,按实际情况替换即可。
|
| 模板 | 遍数 | 原因 |
|
||||||
|
|---|---|---|
|
||||||
|
| 表格类(会议预算表、劳务发放说明表、年度考核登记表、特殊事项说明表、成绩构成说明、试卷归档封面、试卷归档目录) | 1 | 无目录、无交叉引用 |
|
||||||
|
| `课程大纲`、`课程执行大纲`、`课程教学日历` | 2 | 有目录与交叉引用 |
|
||||||
|
| `试卷` | 2 | 有题号交叉引用 |
|
||||||
|
| `幻灯片` | 2 | Beamer 需要 |
|
||||||
|
| `教材`、`科技报告` | 4 | 有参考文献:`xelatex → bibtex → xelatex → xelatex` |
|
||||||
|
|
||||||
## 字体
|
## 字体
|
||||||
|
|
||||||
| 目录 | 字体 | 上游 | 授权 |
|
所有模板的字体都来自 `fonts/`,**不依赖操作系统装了什么字体**。
|
||||||
|---|---|---|---|
|
|
||||||
| `fonts/ouc-serif/` | OUC Serif(宋体) | 思源宋体 SC 的 GB2312 子集 | SIL OFL 1.1 |
|
|
||||||
| `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/harmonyos-sans/` | HarmonyOS Sans(幻灯片/科技报告) | 华为 | 华为官方允许免费商用 |
|
|
||||||
|
|
||||||
合计约 49 MB(改造前 141 MB,见 [`fonts/README.md`](fonts/README.md) 第五节)。
|
### 字体目录
|
||||||
|
|
||||||
> 子集字体已按 OFL §3 改名(`Source` / `LXGW` 是上游的 Reserved Font Name,裁剪即构成修改版),并保留了 OFL 声明。
|
```
|
||||||
> 用本模板编译出的文档**不受**这些字体授权约束,版权归作者本人。
|
fonts/
|
||||||
|
├── ouc-serif/ OUC Serif 中文宋体(正文)
|
||||||
|
├── ouc-sans/ OUC Sans 中文黑体(标题)
|
||||||
|
├── ouc-kai/ OUC Kai 中文楷体(代斜体)
|
||||||
|
├── zhuque-fangsong/ Zhuque Fangsong 中文仿宋
|
||||||
|
├── tex-gyre-termes/ TeX Gyre Termes 西文衬线(Times 等价)
|
||||||
|
├── cochineal/ Cochineal 西文衬线(Minion 风格)
|
||||||
|
├── harmonyos-sans/ HarmonyOS Sans 幻灯片、科技报告用
|
||||||
|
└── fontawesome/ Font Awesome 简历的图标符号
|
||||||
|
```
|
||||||
|
|
||||||
## 历史沿革
|
### 怎么引用字体
|
||||||
|
|
||||||
`幻灯片/` 与 `科技报告/` 此前分别维护在两个独立仓库(`ouc-slide-latex-template`、`ouc-report-latex-template`),2026-10 起**并入本仓库统一维护**,两个旧仓库不再更新。迁入时保留了原有目录结构、字体与图片资源,旧仓库的提交历史留在原仓库中。
|
两行固定写法,放在 `\documentclass` 之后、`\begin{document}` 之前:
|
||||||
|
|
||||||
|
```latex
|
||||||
|
\documentclass[UTF8,fontset=none]{ctexart}
|
||||||
|
\input{../fonts.tex}
|
||||||
|
\begin{document}
|
||||||
|
```
|
||||||
|
|
||||||
|
- `fontset=none` 必须写。不写的话 ctex 会先按系统字体配一套。
|
||||||
|
- `../fonts.tex` 是**相对模板目录**的路径,所以在模板目录内编译。
|
||||||
|
- 不要在仓库根直接 `xelatex 课程大纲/课程大纲.tex`,`../` 会指错。
|
||||||
|
|
||||||
|
`fonts.tex` 可以重复引用,多个 sty 各自引用不会冲突。
|
||||||
|
|
||||||
|
### 可用的字体命令
|
||||||
|
|
||||||
|
`\input{../fonts.tex}` 之后可以用这些命令随时切换字族:
|
||||||
|
|
||||||
|
| 命令 | 效果 | 实际字体 |
|
||||||
|
|---|---|---|
|
||||||
|
| `\songti` | 中文宋体 | OUC Serif |
|
||||||
|
| `\heiti` | 中文黑体 | OUC Sans |
|
||||||
|
| `\kaiti` | 中文楷体 | OUC Kai |
|
||||||
|
| `\fangsong` | 中文仿宋 | Zhuque Fangsong |
|
||||||
|
| `\tnr` | 西文衬线 | TeX Gyre Termes |
|
||||||
|
| `\tnrb` | 西文衬线粗体 | TeX Gyre Termes Bold |
|
||||||
|
| `\hm` | 鸿蒙黑体(中文) | HarmonyOS Sans SC |
|
||||||
|
| `\hmlatin` | 鸿蒙黑体(西文) | HarmonyOS Sans |
|
||||||
|
| `\oucUseCochineal` | 正文西文换成 Cochineal | Cochineal |
|
||||||
|
|
||||||
|
默认正文:中文 OUC Serif + 西文 TeX Gyre Termes。
|
||||||
|
|
||||||
|
用法示例:
|
||||||
|
|
||||||
|
```latex
|
||||||
|
{\heiti 这段用黑体}
|
||||||
|
{\kaiti 这段用楷体}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 换正文西文字体
|
||||||
|
|
||||||
|
```latex
|
||||||
|
\input{../fonts.tex}
|
||||||
|
\oucUseCochineal % 正文西文改为 Cochineal
|
||||||
|
```
|
||||||
|
|
||||||
|
只有 `简历/` 用这个,其余模板保持 Termes。
|
||||||
|
|
||||||
|
## 环境要求
|
||||||
|
|
||||||
|
- TeX Live 2022 或更新
|
||||||
|
- 编译引擎固定 **XeLaTeX**,不能用 pdfLaTeX 或 LuaLaTeX
|
||||||
|
- 不需要装 CTeX 套装,不需要系统装中文字体
|
||||||
|
|
||||||
|
## 新增模板
|
||||||
|
|
||||||
|
1. 建目录,放 `.tex` 主文件 + `.sty` 版式包
|
||||||
|
2. 导言区写 `\documentclass[UTF8,fontset=none]{ctexart}` + `\input{../fonts.tex}`
|
||||||
|
3. 编译确认 `bash build.sh 你的模板名`
|
||||||
|
4. 把模板加进 `verify_all.sh` 的 `TARGETS` 列表
|
||||||
|
5. 写 `README.md`,格式参考现有模板
|
||||||
|
|
||||||
|
## 约定
|
||||||
|
|
||||||
|
- 页面 A4,唯 `幻灯片/` 为 16:9
|
||||||
|
- 表格类模板正文 12pt,`教材/` 为 10pt
|
||||||
|
- 中文正文用宋体,标题用黑体
|
||||||
|
- 示例内容全部是虚构数据(虚构教师、虚构课程、统一用 `example.net` 邮箱与 `138 0000 0000` 手机号),替换成自己的内容即可
|
||||||
@@ -0,0 +1,140 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# 编译模板
|
||||||
|
#
|
||||||
|
# 用法:
|
||||||
|
# bash build.sh 特殊事项说明表 # 编译该目录下默认主文件
|
||||||
|
# bash build.sh 试卷 试卷题型示例 # 显式指定主文件(不带 .tex 也行)
|
||||||
|
# bash build.sh all # 全库所有主文件,逐个编译
|
||||||
|
# bash build.sh all 2>&1 | tee /tmp/v.log # 想留完整日志
|
||||||
|
#
|
||||||
|
# 可用环境变量:
|
||||||
|
# TEXBIN 默认 xelatex
|
||||||
|
# SILENT 非空时只打印结论行(给批量脚本用)
|
||||||
|
#
|
||||||
|
# ⚠️ 三条务必注意
|
||||||
|
#
|
||||||
|
# 1) **PDF 不要提交**。同源码编两次,页面一致但内嵌 CreationDate 不同,
|
||||||
|
# git 会认为文件变了(全库 16 个 PDF 全变 M)。提交前:
|
||||||
|
# git checkout -- '*.pdf'
|
||||||
|
# 或者用 git status 确认只 add 了源码。
|
||||||
|
#
|
||||||
|
# 2) **每个模板都要在它自己的目录里编**。.sty 里的 Path=../fonts/ 是相对
|
||||||
|
# 编译时工作目录解析的,从仓库根调用会找不到字体,报一堆
|
||||||
|
# "The font ... cannot be found"。本脚本已自动 cd,不用手动。
|
||||||
|
#
|
||||||
|
# 3) **两遍编译**。目录、页码、LastPage 跨引用要第二遍才稳定。
|
||||||
|
# 只编一遍会看到「第 ? 页」或者目录页码错位。
|
||||||
|
set -u
|
||||||
|
|
||||||
|
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
TEXBIN="${TEXBIN:-xelatex}"
|
||||||
|
SILENT="${SILENT:-}"
|
||||||
|
|
||||||
|
die() { echo "$1" >&2; exit 2; }
|
||||||
|
|
||||||
|
# 目录 → 主文件。目录名与主文件名不一致的必须在这里登记。
|
||||||
|
# 简历/ 下有 fontawesomesymbols-*.tex 等宏包片段,不能拿 ls 第一个 .tex 当主文件。
|
||||||
|
mainfile_of() {
|
||||||
|
case "$1" in
|
||||||
|
幻灯片) echo "slides" ;;
|
||||||
|
科技报告) echo "report" ;;
|
||||||
|
简历) echo "简历" ;;
|
||||||
|
试卷) echo "" ;; # 有两个主文件,必须显式指定
|
||||||
|
*) echo "$1" ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
# 编一个:$1=目录 $2=主文件名(不带 .tex)
|
||||||
|
build_one() {
|
||||||
|
local dir="$1" name="$2"
|
||||||
|
local log="/tmp/oucbuild.$$.log"
|
||||||
|
local log1="/tmp/oucbuild.$$.1.log"
|
||||||
|
|
||||||
|
# 第一遍:产出 .aux/.toc,允许非致命错误(TOC 还没生成时会警告)
|
||||||
|
( cd "$ROOT/$dir" && $TEXBIN -interaction=nonstopmode "$name.tex" ) > "$log1" 2>&1
|
||||||
|
local rc1=$?
|
||||||
|
|
||||||
|
# 有参考文献库时插入 bibtex(教材/ 等模板需要)。
|
||||||
|
# ⚠️ 判定依据是目录下存在 **任意 .bib** 且不是 biblatex 自动生成的
|
||||||
|
# "*-blx.bib"(那是 biblatex 的中间产物,不能当输入跑 bibtex)。
|
||||||
|
# biblatex 的 bcf 后端用 biber,但本库统一用 bibtex 后端(elegantbook
|
||||||
|
# 的默认),且仓库里的模板都用 bibtex,故这里只调 bibtex。
|
||||||
|
# bibtex 失败不中断构建 —— 下一遍 xelatex 会用旧的 .bbl,
|
||||||
|
# 参考文献可能不全,但正文和版式照常验证。
|
||||||
|
if ( cd "$ROOT/$dir" && ls *.bib 2>/dev/null | grep -qv -- '-blx\.bib$' ); then
|
||||||
|
( cd "$ROOT/$dir" && bibtex "$name" ) > "/tmp/oucbibtex.$$.log" 2>&1 || true
|
||||||
|
# bibtex 之后必须再跑一遍让引用编号落位
|
||||||
|
( cd "$ROOT/$dir" && $TEXBIN -interaction=nonstopmode "$name.tex" ) > "$log1" 2>&1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 最后一编:交叉引用稳定后的最终结果,统计以这一遍为准
|
||||||
|
( cd "$ROOT/$dir" && $TEXBIN -interaction=nonstopmode "$name.tex" ) > "$log" 2>&1
|
||||||
|
local rc2=$?
|
||||||
|
|
||||||
|
local err over under pages
|
||||||
|
err=$(grep -c '^!' "$log" 2>/dev/null || :)
|
||||||
|
over=$(grep -c 'Overfull' "$log" 2>/dev/null || :)
|
||||||
|
under=$(grep -c 'Underfull' "$log" 2>/dev/null || :)
|
||||||
|
pages=$(grep -o 'Output written on .*' "$log" 2>/dev/null | tail -1)
|
||||||
|
|
||||||
|
if [ -z "$SILENT" ]; then
|
||||||
|
echo "=== $dir / $name ==="
|
||||||
|
echo " error : $err"
|
||||||
|
echo " Overfull : $over"
|
||||||
|
echo " Underfull : $under"
|
||||||
|
echo " ${pages:-(无输出,见 $log)}"
|
||||||
|
else
|
||||||
|
printf '%-24s err=%-2s over=%-2s under=%-2s %s\n' \
|
||||||
|
"$dir" "$err" "$over" "$under" "$(echo "$pages" | sed 's/Output written on .*(\([0-9]*\) page.*/\1页/')"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$rc2" -ne 0 ]; then
|
||||||
|
echo "--- 错误片段($log)---" >&2
|
||||||
|
grep -A6 '^!' "$log" 2>/dev/null | head -20 | sed 's/^/ /' >&2
|
||||||
|
# 保留失败日志,方便排查;成功时删掉
|
||||||
|
return "$rc2"
|
||||||
|
fi
|
||||||
|
rm -f "$log" "$log1"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
[ $# -eq 0 ] && die "用法: bash build.sh <目录名|all> [主文件名]"
|
||||||
|
|
||||||
|
DIR="$1"; TEX="${2:-}"
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------
|
||||||
|
# 全库模式:直接转给 verify_all.sh(那边有完整的 TARGETS 清单)
|
||||||
|
#----------------------------------------------------------------------
|
||||||
|
if [ "$DIR" = "all" ]; then
|
||||||
|
exec bash "$ROOT/verify_all.sh"
|
||||||
|
fi
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------
|
||||||
|
# 单目录模式
|
||||||
|
#----------------------------------------------------------------------
|
||||||
|
if [ ! -d "$ROOT/$DIR" ]; then
|
||||||
|
echo "没有这个目录:$DIR" >&2
|
||||||
|
echo "可选:" >&2
|
||||||
|
( cd "$ROOT" && ls -d */ 2>/dev/null | sed 's|/$||' | sed 's/^/ /' ) >&2
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$TEX" ]; then
|
||||||
|
TEX="$(mainfile_of "$DIR")"
|
||||||
|
if [ -z "$TEX" ]; then
|
||||||
|
echo "$DIR/ 有多个主文件,请显式指定:" >&2
|
||||||
|
( cd "$ROOT/$DIR" && ls *.tex 2>/dev/null | grep -v fontawesome | sed 's/\.tex$//' | sed 's/^/ /' ) >&2
|
||||||
|
echo "例: bash build.sh $DIR $(cd "$ROOT/$DIR" && ls *.tex 2>/dev/null | grep -v fontawesome | head -1 | sed 's/\.tex$//')" >&2
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 允许用户写带 .tex 的
|
||||||
|
TEX="${TEX%.tex}"
|
||||||
|
|
||||||
|
if [ ! -f "$ROOT/$DIR/$TEX.tex" ]; then
|
||||||
|
echo "找不到 $DIR/$TEX.tex" >&2
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
build_one "$DIR" "$TEX"
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
%======================================================================
|
%======================================================================
|
||||||
% oucfonts.tex —— 中国海洋大学模板库的公共字体入口
|
% oucfonts.tex —— 中国海洋大学模板库的公共字体入口
|
||||||
%
|
%
|
||||||
% 本文件是仓库内**唯一**允许声明字体的地方。十个模板全部通过
|
% 本文件是仓库内**唯一**允许声明字体的地方。十一个模板全部通过
|
||||||
% \input{../fonts.tex}
|
% \input{../fonts.tex}
|
||||||
% 取字体,不再各自写 \setCJKmainfont / \setmainfont。
|
% 取字体,不再各自写 \setCJKmainfont / \setmainfont。
|
||||||
%
|
%
|
||||||
@@ -70,6 +70,9 @@
|
|||||||
%
|
%
|
||||||
% Termes 与 Times New Roman 字符宽度逐字相同,因此原有的西文断行、
|
% Termes 与 Times New Roman 字符宽度逐字相同,因此原有的西文断行、
|
||||||
% 表格列宽、行内公式对齐都不会因为换字体而漂。
|
% 表格列宽、行内公式对齐都不会因为换字体而漂。
|
||||||
|
%
|
||||||
|
% ⚠️ 全库默认就是 Termes。简历模板(简历/)单独换成 Cochineal,
|
||||||
|
% 见下面「一之二」。其余 10 个模板不受影响。
|
||||||
%======================================================================
|
%======================================================================
|
||||||
\setmainfont{texgyretermes}[
|
\setmainfont{texgyretermes}[
|
||||||
Extension = .otf,
|
Extension = .otf,
|
||||||
@@ -80,6 +83,82 @@
|
|||||||
BoldItalicFont = *-bolditalic,
|
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}%
|
||||||
|
}
|
||||||
|
|
||||||
%======================================================================
|
%======================================================================
|
||||||
% 二、中文主字体
|
% 二、中文主字体
|
||||||
%
|
%
|
||||||
@@ -134,6 +213,39 @@
|
|||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|
||||||
|
% ------------------------------------------------------------------
|
||||||
|
% 小型大写(sc):用**字体形状替换**,不用 SmallCapsFont 选项
|
||||||
|
%
|
||||||
|
% 为什么需要它:简历模板的 \user / \resumetitle / \experience 都用了
|
||||||
|
% \textsc,而中文没有小型大写字形,不处理就每页刷 6 条
|
||||||
|
% LaTeX Font Warning: Font shape `TU/OUCSerif(0)/m/sc' undefined
|
||||||
|
% 惯例做法是让 sc 档**指回常规体**:\textsc{中文} 看起来不变(中文
|
||||||
|
% 本来也没有大小写),而 \textsc{English} 里的西文仍然走 \setmainfont
|
||||||
|
% 的 Termes 小型大写,行为正确。
|
||||||
|
%
|
||||||
|
%
|
||||||
|
% 1) SmallCapsFont 这个选项**与本文件上面的 ItalicFeatures /
|
||||||
|
% 只有 SmallCapsFont + SmallCapsFeatures → 通过
|
||||||
|
% 再加 ItalicFeatures(带跨目录 Path) → 立刻报
|
||||||
|
% Package fontspec Error:
|
||||||
|
% The font "OUCSerif-Regular" cannot be found.
|
||||||
|
% 写 *-Regular、写全名 OUCSerif-Regular、写带 .otf 的、把两个键
|
||||||
|
% 挪到最后,全都报同一个错;把斜体换成同目录字体
|
||||||
|
% (ItalicFont = *-Bold)就又能过 —— 所以是**跨目录 Path 的相互作用**,
|
||||||
|
% 不是文件名写法问题。照着"IralicFont 怎么写的就怎么写"去改会一直失败。
|
||||||
|
%
|
||||||
|
% 2) 绕开的办法就是干脆不用那个选项,改用 LaTeX 原生的字体形状替换
|
||||||
|
% (\DeclareFontShape + <->ssub)。这条机制在 fontspec 选项之下,
|
||||||
|
% 不受选项间相互作用影响,效果完全等价。
|
||||||
|
%
|
||||||
|
% ⚠️ 第二个参数 OUCSerif(0) 里的 (0) 是 fontspec 给该字体生成的内部
|
||||||
|
% 族编号,不是笔误。若将来 \setCJKmainfont 换了字体名,这两行必须
|
||||||
|
% 同步改;写错**不会报错**,只会让 sc 警告悄悄回来 —— 改完看日志。
|
||||||
|
% ------------------------------------------------------------------
|
||||||
|
\DeclareFontShape{TU}{OUCSerif(0)}{m}{sc}{<->ssub * OUCSerif(0)/m/n}{}
|
||||||
|
\DeclareFontShape{TU}{OUCSerif(0)}{b}{sc}{<->ssub * OUCSerif(0)/b/n}{}
|
||||||
|
|
||||||
|
|
||||||
%======================================================================
|
%======================================================================
|
||||||
% 三、字族命令
|
% 三、字族命令
|
||||||
%
|
%
|
||||||
@@ -192,11 +304,11 @@
|
|||||||
]{ZhuqueFangsong}
|
]{ZhuqueFangsong}
|
||||||
\def\fangsong{\CJKfamily{OUCFang}}
|
\def\fangsong{\CJKfamily{OUCFang}}
|
||||||
|
|
||||||
% 西文:显式取 Times 形态(原模板里 \tnr / \tnrb / \sunfont 的替代)
|
% 西文:显式取 Times 形态
|
||||||
%
|
%
|
||||||
% ⚠️ 四个档位必须全给。只给 UprightFont 的话,在 \bfseries 环境里会落到
|
% ⚠️ 四个档位必须全给。只给 UprightFont 的话,在 \bfseries 环境里会落到
|
||||||
% "Font shape `TU/texgyretermes/b/n' undefined" 并静默替换,
|
% "Font shape `TU/texgyretermes/b/n' undefined" 并静默替换,
|
||||||
% 表现为加粗失效(试卷的 \TNRB 与 \qnum 都会踩到)。
|
% 表现为加粗失效(试卷的 \TNRB 与 \qnum 需要用到)。
|
||||||
\newfontfamily\tnr{texgyretermes}[
|
\newfontfamily\tnr{texgyretermes}[
|
||||||
Extension = .otf,
|
Extension = .otf,
|
||||||
Path = ../fonts/tex-gyre-termes/,
|
Path = ../fonts/tex-gyre-termes/,
|
||||||
@@ -267,7 +379,7 @@
|
|||||||
%
|
%
|
||||||
% 这里不全局改 \linespread,因为各模板需求不同(科技报告依赖 ctex
|
% 这里不全局改 \linespread,因为各模板需求不同(科技报告依赖 ctex
|
||||||
% 默认值,试卷归档封面/课程执行大纲/年度考核登记表必须归 1 才能
|
% 默认值,试卷归档封面/课程执行大纲/年度考核登记表必须归 1 才能
|
||||||
% 还原 docx 的精确行高)。只提供工具命令,由各模板自行调用。
|
% 还的精确行高)。只提供工具命令,由各模板自行调用。
|
||||||
%======================================================================
|
%======================================================================
|
||||||
\newcommand{\ouclinespread}[1]{\linespread{#1}\relax}
|
\newcommand{\ouclinespread}[1]{\linespread{#1}\relax}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
五、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] 所有 OFL 字体均保留授权全文(name 表 13/14 号),符合 OFL 1.1 §1。
|
||||||
[x] 未使用上游作者名义作任何背书暗示。
|
[x] 未使用上游作者名义作任何背书暗示。
|
||||||
[x] TeX Gyre Termes 的 GFL 允许随文档分发。
|
[x] TeX Gyre Termes 的 GFL 允许随文档分发。
|
||||||
|
[x] Cochineal 为 SIL OFL 1.1,允许随仓库再分发;授权全文已随字体放入
|
||||||
|
cochineal/OFL.txt,并保留在 name 表 13/14 号。
|
||||||
[x] HarmonyOS Sans 为华为官方允许免费商用。
|
[x] HarmonyOS Sans 为华为官方允许免费商用。
|
||||||
|
|
||||||
如对本目录内任何字体的授权有疑问,请以上游地址的授权原文为准。
|
如对本目录内任何字体的授权有疑问,请以上游地址的授权原文为准。
|
||||||
+83
-237
@@ -1,264 +1,110 @@
|
|||||||
# fonts/ —— 模板库公共字体目录
|
# fonts/ — 公共字体目录
|
||||||
|
|
||||||
本目录是**中国海洋大学 LaTeX 模板库唯一的一份字体来源**。仓库里七个模板全部通过
|
全库共用的字体目录。16 个模板都通过根目录的 [`../fonts.tex`](../fonts.tex) 取字体,
|
||||||
根目录的 [`../fonts.tex`](../fonts.tex) 取字体,不再有任何模板自带字体、也不依赖
|
不依赖操作系统装了什么字体。
|
||||||
操作系统里装了什么字体。换一台机器、换一个操作系统(Windows / macOS / Linux /
|
|
||||||
Overleaf),编译出来的样子都一样。
|
## 目录内容
|
||||||
|
|
||||||
```
|
```
|
||||||
fonts/
|
fonts/
|
||||||
├── ouc-serif/ OUC Serif 宋体(衬线正文) 2 个,9.7 MB
|
├── ouc-serif/ OUC Serif 中文宋体(衬线正文) 2 个
|
||||||
├── ouc-sans/ OUC Sans 黑体(无衬线标题) 2 个,7.0 MB
|
├── ouc-sans/ OUC Sans 中文黑体(无衬线标题) 2 个
|
||||||
├── ouc-kai/ OUC Kai 楷体 2 个,7.0 MB
|
├── ouc-kai/ OUC Kai 中文楷体(代斜体) 2 个
|
||||||
├── zhuque-fangsong/ Zhuque Fangsong 仿宋 1 个,8.4 MB
|
├── zhuque-fangsong/ Zhuque Fangsong 中文仿宋 1 个
|
||||||
├── tex-gyre-termes/ TeX Gyre Termes 西文 Times 等价 4 个,550 KB
|
├── tex-gyre-termes/ TeX Gyre Termes 西文衬线(Times 等价) 4 个
|
||||||
└── harmonyos-sans/ HarmonyOS Sans 鸿蒙(中英各一档) 6 个,16 MB
|
├── cochineal/ Cochineal 西文衬线(Minion 风格) 4 个
|
||||||
|
├── harmonyos-sans/ HarmonyOS Sans 幻灯片、科技报告用 6 个
|
||||||
|
├── fontawesome/ Font Awesome 简历的图标符号 1 个
|
||||||
|
└── LICENSE 授权说明
|
||||||
```
|
```
|
||||||
|
|
||||||
合计约 **49 MB**(改造前是 141 MB:幻灯片 49 MB + 科技报告 92 MB 各自带一份,
|
## 各字体用途
|
||||||
外加两套重复的字体。现在全库只有这一份,省掉 65%)。
|
|
||||||
|
|
||||||
---
|
| 字体 | 用途 | 字重 | 字符集 |
|
||||||
|
|---|---|---|---|
|
||||||
|
| OUC Serif | 中文正文(宋体) | 常规 + 粗体 | GB2312,7555 字 |
|
||||||
|
| OUC Sans | 中文标题(黑体)、西文无衬线 | 常规 + 粗体 | GB2312,7555 字 |
|
||||||
|
| OUC Kai | 中文楷体,代斜体 | 常规 + 粗体 | GB2312,7557 字 |
|
||||||
|
| Zhuque Fangsong | 中文仿宋 | 仅常规 | 12882 字,GB2312 全覆盖 |
|
||||||
|
| TeX Gyre Termes | 西文正文(Times 等价) | 常规 / 粗 / 斜 / 粗斜 | 完整拉丁 |
|
||||||
|
| Cochineal | 西文正文(Minion 风格) | 常规 / 粗 / 斜 / 粗斜 | 完整拉丁 |
|
||||||
|
| HarmonyOS Sans | 幻灯片、科技报告 | 中英各三档 | 完整 |
|
||||||
|
| Font Awesome | 简历图标符号 | — | 图标集 |
|
||||||
|
|
||||||
## 一、为什么要把字体打进仓库
|
## 怎么引用
|
||||||
|
|
||||||
原先七个模板是两种做法:
|
在模板的导言区写两行:
|
||||||
|
|
||||||
| 做法 | 模板 | 问题 |
|
```latex
|
||||||
|
\documentclass[UTF8,fontset=none]{ctexart}
|
||||||
|
\input{../fonts.tex}
|
||||||
|
```
|
||||||
|
|
||||||
|
- `fontset=none` 必须写。不写的话 ctex 会先按系统字体配一套。
|
||||||
|
- `../fonts.tex` 是**相对模板目录**的路径。所以要在模板目录内编译。
|
||||||
|
- 本文件可以重复 `\input`,多个 sty 各自引用不会冲突。
|
||||||
|
|
||||||
|
## 可用的字体命令
|
||||||
|
|
||||||
|
`\input{../fonts.tex}` 之后可用:
|
||||||
|
|
||||||
|
| 命令 | 效果 | 实际字体 |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| 各自带一份字体 | `幻灯片/`(鸿蒙 18 个文件 49 MB)、`科技报告/`(鸿蒙 + 方正 5 款 92 MB) | 两份重复;字体版本一旦不同步,两个模板的样子就会不一致 |
|
| `\songti` | 中文宋体 | OUC Serif |
|
||||||
| 直接用系统字体 | 其余五个(SimSun / SimHei / FangSong / KaiTi / Times New Roman) | 换台机器(Linux、macOS、精简版 Windows、Overleaf)直接编不出来;而且这些字体**不允许随仓库分发** |
|
| `\heiti` | 中文黑体 | OUC Sans |
|
||||||
|
| `\kaiti` | 中文楷体 | OUC Kai |
|
||||||
|
| `\fangsong` | 中文仿宋 | Zhuque Fangsong |
|
||||||
|
| `\tnr` | 西文衬线 | TeX Gyre Termes |
|
||||||
|
| `\tnrb` | 西文衬线粗体 | TeX Gyre Termes Bold |
|
||||||
|
| `\hm` | 鸿蒙黑体(中文) | HarmonyOS Sans SC |
|
||||||
|
| `\hmlatin` | 鸿蒙黑体(西文) | HarmonyOS Sans |
|
||||||
|
| `\oucUseCochineal` | 正文西文换成 Cochineal | Cochineal |
|
||||||
|
|
||||||
统一成一份公共字体后:
|
默认正文:中文 OUC Serif + 西文 TeX Gyre Termes。
|
||||||
|
|
||||||
- **编译结果可复现** —— 与操作系统、与是否装过某款字体无关。
|
另有两个独立字族,用于直接指定:
|
||||||
- **授权干净** —— 全库不含任何商业字体,见第四节。
|
|
||||||
- **体积可控** —— 只保留实际用到的字重与字符集。
|
|
||||||
|
|
||||||
---
|
| 命令 | 实际字体 |
|
||||||
|
|
||||||
## 二、各字体的来源与授权
|
|
||||||
|
|
||||||
全部为**开源或官方允许免费商用**的字体。逐项如下。
|
|
||||||
|
|
||||||
### 1. OUC Serif / OUC Sans / OUC Kai —— 思源系列与霞鹜文楷的子集
|
|
||||||
|
|
||||||
| | 上游字体 | 上游作者 | 上游授权 | 字符集 |
|
|
||||||
|---|---|---|---|---|
|
|
||||||
| OUC Serif | 思源宋体 SC(Source Han Serif SC) | Adobe | SIL OFL 1.1 | GB2312,7555 字 |
|
|
||||||
| OUC Sans | 思源黑体 SC(Source Han Sans SC) | Adobe | SIL OFL 1.1 | GB2312,7555 字 |
|
|
||||||
| OUC Kai | 霞鹜文楷(LXGW WenKai) | LXGW | SIL OFL 1.1 | GB2312,7557 字 |
|
|
||||||
|
|
||||||
> **为什么改名叫 OUC Serif / OUC Sans / OUC Kai?**
|
|
||||||
> SIL OFL 1.1 第 3 条规定:修改版不得使用上游的 Reserved Font Name。
|
|
||||||
> 思源系列的 RFN 是 `Source`,霞鹜的 RFN 含 `LXGW`。裁剪字符集属于
|
|
||||||
> "修改版",因此必须改名,且不得暗示原作者为本仓库背书。
|
|
||||||
> 改名同时改了 **CFF 层**的 `fontNames` / `FamilyName` / `FullName`
|
|
||||||
> —— 只改 name 表是不够的,PDF 里内嵌的字体名取的是 CFF 层。
|
|
||||||
> 字体 name 表的 13/14 号记录保留了完整 OFL 声明与"本字体为子集、
|
|
||||||
> 与上游作者无关"的免责说明。
|
|
||||||
|
|
||||||
**裁剪范围**:保留 GB2312 全集(6763 汉字)+ 常用标点 + 拉丁字母 + 希腊字母
|
|
||||||
+ 数学符号,约 7555 个字符。**不保留** GBK 扩展区与生僻字。
|
|
||||||
|
|
||||||
> ⚠️ 如果将来正文要用 GB2312 之外的生僻字(例如某些人名、地名用字),
|
|
||||||
> 会显示成空白或方框。此时需要重新生成子集,把该字加进去。
|
|
||||||
> 生成脚本见第七节。
|
|
||||||
|
|
||||||
### 2. Zhuque Fangsong —— 朱雀仿宋
|
|
||||||
|
|
||||||
| | |
|
|
||||||
|---|---|
|
|---|---|
|
||||||
| 上游 | 朱雀仿宋(TrionesType / Zhuque Fangsong) |
|
| `\OUCLatinCochineal` | Cochineal 常规 |
|
||||||
| 授权 | SIL OFL 1.1 |
|
| `\OUCLatinCochinealBold` | Cochineal 粗体 |
|
||||||
| 字符集 | 12882 字符,**GB2312 全集覆盖** |
|
|
||||||
| 版本 | 0.212(technical preview) |
|
|
||||||
|
|
||||||
未做裁剪(原文件 8.4 MB 已经够小,且保留全集更安全)。
|
## 改默认字体
|
||||||
**只有常规一档,没有粗体** —— 需要粗体的地方请改用黑体或宋体。
|
|
||||||
|
|
||||||
### 3. TeX Gyre Termes —— 西文 Times 等价字体
|
改 `../fonts.tex` 里的 `\setCJKmainfont`(中文)和 `\setmainfont`(西文)。
|
||||||
|
|
||||||
| | |
|
字体文件按 `Path = ../fonts/<目录>/` 定位,所以新增字体要放进对应的子目录。
|
||||||
|
|
||||||
|
## 授权
|
||||||
|
|
||||||
|
全部允许免费商用和再分发:
|
||||||
|
|
||||||
|
| 字体 | 授权 |
|
||||||
|---|---|
|
|---|---|
|
||||||
| 上游 | TeX Gyre Termes(GUST 字体项目) |
|
| OUC Serif / OUC Sans | SIL OFL 1.1 |
|
||||||
| 授权 | GUST Font License(GPL + 字体嵌入例外) |
|
| OUC Kai | SIL OFL 1.1 |
|
||||||
| 特性 | 与 Times New Roman **逐字度量兼容** |
|
| Zhuque Fangsong | SIL OFL 1.1 |
|
||||||
|
| TeX Gyre Termes | GUST Font License |
|
||||||
|
| Cochineal | SIL OFL 1.1 |
|
||||||
|
| HarmonyOS Sans | 华为,官方允许免费商用 |
|
||||||
|
| Font Awesome | SIL OFL 1.1 |
|
||||||
|
|
||||||
用它是为了保证中文模板里原有的西文断行、表格列宽、行内公式对齐不漂移。
|
不含商业字体,无方正、无 SimSun/SimHei/KaiTi/FangSong、无 Times New Roman。
|
||||||
实测同一段英文,Termes 与 Times New Roman 的逐词宽度差在 0.03pt 量级。
|
|
||||||
|
|
||||||
### 4. HarmonyOS Sans —— 鸿蒙字体
|
用本模板编译出的文档不受字体授权约束,版权归作者本人。
|
||||||
|
|
||||||
| | |
|
## 字符集限制
|
||||||
|---|---|
|
|
||||||
| 上游 | HarmonyOS Sans(华为) |
|
|
||||||
| 授权 | 华为官方声明允许**免费商用**(随 HarmonyOS 开发者文档发布) |
|
|
||||||
| 保留原因 | `幻灯片/` 与 `科技报告/` 原有观感就是鸿蒙,换成思源会明显改变这两个模板的视觉 |
|
|
||||||
|
|
||||||
只保留实际用到的 6 个文件:`HarmonyOS_Sans_{Regular,Bold}`(西文)、
|
OUC Serif / Sans / Kai 只含 **GB2312** 字符(6763 汉字 + 常用标点 + 拉丁 + 希腊 + 数学符号)。
|
||||||
`HarmonyOS_Sans_{Regular,Bold}_Italic`、`HarmonyOS_Sans_SC_{Regular,Bold}`(中文)。
|
|
||||||
原目录里的 Black / Light / Medium / Thin 等 12 个字重全库无人引用,已删除。
|
|
||||||
|
|
||||||
> ⚠️ 鸿蒙字体的文件名用**下划线**分隔(`HarmonyOS_Sans_SC_Regular.ttf`),
|
超出 GB2312 的生僻字(部分人名、地名用字)会显示成空白或方框。
|
||||||
> 不是 `族名-字重` 格式。所以在 fontspec 里不能写 `*-Regular` 通配,
|
遇到这种情况,用 Zhuque Fangsong(12882 字,覆盖更广)或换用其他字体。
|
||||||
> 必须显式给完整文件名。
|
|
||||||
|
|
||||||
---
|
## 新增字体
|
||||||
|
|
||||||
## 三、字体是怎么被调用的
|
1. 把字体文件放进 `fonts/新字体/`
|
||||||
|
2. 在 `../fonts.tex` 里加 `\newfontfamily` 或 `\setCJKfamilyfont`
|
||||||
|
3. 用 `Path = ../fonts/新字体/` 定位
|
||||||
|
|
||||||
所有模板都只做一件事:在导言区 `\input{../fonts.tex}`(幻灯片与科技报告因为
|
多个档位(常规/粗体/斜体)在不同目录时,每个档位要单独写 `Path`
|
||||||
目录层级不同,路径略作调整)。`fonts.tex` 负责:
|
和 `Extension`,不能只靠主选项继承。
|
||||||
|
|
||||||
1. 加载 fontspec / xeCJK;
|
|
||||||
2. 注册默认族与 `\songti` / `\heiti` / `\kaiti` / `\fangsong` / `\kaishu` /
|
|
||||||
`\tnr` / `\tnrb` / `\hm` / `\hmlatin`;
|
|
||||||
3. 把 `×` `—` `□` `○` `√` 等「长得像西文、其实该走中文」的符号
|
|
||||||
归入 CJK 字符类(详见该文件的注释);
|
|
||||||
4. 提供 `\ouclinespread` 行距工具。
|
|
||||||
|
|
||||||
各模板自己**不再写任何** `\setCJKmainfont` / `\setmainfont`。
|
|
||||||
|
|
||||||
### ⚠️ 三个容易踩的坑(都写在 fonts.tex 的注释里了)
|
|
||||||
|
|
||||||
1. **必须保留 `fontset=none`。**
|
|
||||||
`\documentclass[UTF8,fontset=none]{ctexart}`。不写的话 ctex 会先按系统字体
|
|
||||||
配一套(Microsoft YaHei / SimSun / FangSong),再被覆盖,既浪费又有平台
|
|
||||||
依赖。`试卷/ouckey.sty` 因为继承 ctexart 默认 fontset,所以 fonts.tex 里
|
|
||||||
用 `\setCJKfamilyfont` + `\def` 而不是 `\newCJKfontfamily`——
|
|
||||||
后者是 LaTeX3 的 `\NewDocumentCommand`,命令已存在时会报
|
|
||||||
`! LaTeX3 Error: Control sequence \songti already defined.` 并中断编译。
|
|
||||||
|
|
||||||
2. **`Path=` 是相对编译时的工作目录,不是相对 .sty 文件。**
|
|
||||||
模板目录下 `xelatex xxx.tex`,所以写 `../fonts/...`。
|
|
||||||
幻灯片与科技报告的主题文件虽然在子目录里,路径仍按工作目录写 `../fonts/`。
|
|
||||||
|
|
||||||
3. **`Path=` 不能写宏。** 它是 fontspec 的参数,必须给字面字符串。
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 四、授权合规自查
|
|
||||||
|
|
||||||
- [x] 全库不含方正、SimSun、SimHei、KaiTi、FangSong、Times New Roman、
|
|
||||||
Microsoft YaHei 等不可分发的商业字体。
|
|
||||||
- [x] 思源系列与霞鹜文楷的**子集**已改名,符合 OFL 1.1 §3(Reserved Font Name)。
|
|
||||||
- [x] 子集保留了 OFL 全文(name 表 13/14 号记录),符合 OFL 1.1 §1(随附授权)。
|
|
||||||
- [x] 改名后的 name 表写明"本字体为子集,与上游作者无关",未暗示背书。
|
|
||||||
- [x] TeX Gyre Termes 为 GUST Font License,允许随文档分发。
|
|
||||||
- [x] HarmonyOS Sans 为华为官方允许免费商用。
|
|
||||||
- [x] 本目录的 [LICENSE](LICENSE) 汇总了各字体的授权原文出处。
|
|
||||||
|
|
||||||
> **注意**:OFL 要求"以 OFL 字体排版产生的文档"不受 OFL 约束
|
|
||||||
> (§5 文档本身不因此被感染)。所以用本模板编译出来的论文、报告、
|
|
||||||
> 试卷,版权完全属于作者,不受这些字体授权的影响。
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 五、体积
|
|
||||||
|
|
||||||
```
|
|
||||||
改造前(字体分散在各模板目录)
|
|
||||||
幻灯片/fonts/ 49 MB
|
|
||||||
科技报告/font/ 92 MB
|
|
||||||
合计 141 MB
|
|
||||||
|
|
||||||
改造后(统一到 fonts/)
|
|
||||||
ouc-serif 9.7 MB
|
|
||||||
ouc-sans 7.0 MB
|
|
||||||
ouc-kai 7.0 MB
|
|
||||||
zhuque-fangsong 8.4 MB
|
|
||||||
tex-gyre-termes 0.55 MB
|
|
||||||
harmonyos-sans 16.4 MB
|
|
||||||
合计 49 MB (省 65%)
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 六、当前各模板的字体对应关系
|
|
||||||
|
|
||||||
| 模板 | 中文正文 | 中文标题/强调 | 西文 |
|
|
||||||
|---|---|---|---|
|
|
||||||
| `试卷归档封面/` | OUC Serif | OUC Sans | TeX Gyre Termes |
|
|
||||||
| `年度考核登记表/` | OUC Serif | OUC Sans | TeX Gyre Termes |
|
|
||||||
| `劳务发放说明表/` | OUC Serif | OUC Sans | TeX Gyre Termes |
|
|
||||||
| `课程执行大纲/` | OUC Serif | OUC Sans | TeX Gyre Termes |
|
|
||||||
| `试卷/` | OUC Serif / OUC Kai | OUC Sans | TeX Gyre Termes |
|
|
||||||
| `幻灯片/` | HarmonyOS Sans SC | HarmonyOS Sans SC Bold | HarmonyOS Sans |
|
|
||||||
| `科技报告/` | OUC Serif | OUC Serif Bold / OUC Kai | HarmonyOS Sans |
|
|
||||||
|
|
||||||
「改造前」用的是:SimSun / SimHei / KaiTi / FangSong / Times New Roman(前五个模板),
|
|
||||||
鸿蒙 + 方正书宋/小标宋/楷体/仿宋/中等线(科技报告)。
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 七、如何重新生成子集
|
|
||||||
|
|
||||||
如果需要把 GB2312 之外的字加进来,或上游字体发了新版:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 依赖:pip install fonttools
|
|
||||||
python -c "import fontTools; print(fontTools.version)"
|
|
||||||
|
|
||||||
# 1) 裁剪(name_IDs 必须给 '*',否则会丢掉 OFL 声明的 13/14 号记录)
|
|
||||||
python - <<'PY'
|
|
||||||
from fontTools import subset
|
|
||||||
opts = subset.Options()
|
|
||||||
opts.name_IDs = ['*'] # 关键:默认只取 0..6,会丢授权声明
|
|
||||||
opts.name_languages = ['*']
|
|
||||||
opts.notdef_outline = True
|
|
||||||
opts.recalc_bounds = True
|
|
||||||
opts.layout_features = ['*']
|
|
||||||
font = subset.load_font('上游字体.otf', opts)
|
|
||||||
subsetter = subset.Subsetter(options=opts)
|
|
||||||
subsetter.populate(text=open('keep_gb2312.txt', encoding='utf-8').read())
|
|
||||||
subsetter.subset(font)
|
|
||||||
subset.save_font(font, '裁剪后.otf', opts)
|
|
||||||
PY
|
|
||||||
|
|
||||||
# 2) 改 CFF 层名字(只改 name 表不够!PDF 内嵌名取的是 CFF 层)
|
|
||||||
python - <<'PY'
|
|
||||||
from fontTools.ttLib import TTFont
|
|
||||||
f = TTFont('裁剪后.otf')
|
|
||||||
cff = f['CFF '].cff
|
|
||||||
cff.fontNames[0] = 'OUCSerif-Regular'
|
|
||||||
td = cff.topDictIndex[0]
|
|
||||||
td.FamilyName = 'OUC Serif'
|
|
||||||
td.FullName = 'OUC Serif Regular'
|
|
||||||
# name 表同步改,并补 13/14 号授权记录与免责声明
|
|
||||||
f.save('OUCSerif-Regular.otf')
|
|
||||||
PY
|
|
||||||
```
|
|
||||||
|
|
||||||
改完务必验证 PDF 里内嵌的确实是新名字:
|
|
||||||
|
|
||||||
```python
|
|
||||||
import pymupdf
|
|
||||||
d = pymupdf.open('输出.pdf')
|
|
||||||
print({f[3] for p in d for f in p.get_fonts()})
|
|
||||||
# 期望看到 OUCSerif-Regular / OUCSans-Regular,而不是 SourceHanSerifSC
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 八、字体清单速查
|
|
||||||
|
|
||||||
| 文件 | 内部族名 | 字符数 | 大小 |
|
|
||||||
|---|---|---|---|
|
|
||||||
| `ouc-serif/OUCSerif-Regular.otf` | OUC Serif | 7555 | 4.6 MB |
|
|
||||||
| `ouc-serif/OUCSerif-Bold.otf` | OUC Serif | 7555 | 4.8 MB |
|
|
||||||
| `ouc-sans/OUCSans-Regular.otf` | OUC Sans | 7555 | 3.4 MB |
|
|
||||||
| `ouc-sans/OUCSans-Bold.otf` | OUC Sans | 7555 | 3.4 MB |
|
|
||||||
| `ouc-kai/OUCKai-Regular.ttf` | OUC Kai | 7557 | 3.4 MB |
|
|
||||||
| `ouc-kai/OUCKai-Bold.ttf` | OUC Kai | 7557 | 3.4 MB |
|
|
||||||
| `zhuque-fangsong/ZhuqueFangsong-Regular.ttf` | Zhuque Fangsong | 12882 | 8.4 MB |
|
|
||||||
| `tex-gyre-termes/texgyretermes-regular.otf` | TeX Gyre Termes | 1053 | 141 KB |
|
|
||||||
| `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 |
|
|
||||||
| `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 |
|
|
||||||
| `harmonyos-sans/HarmonyOS_Sans_Bold_Italic.ttf` | HarmonyOS Sans | 807 | 141 KB |
|
|
||||||
| `harmonyos-sans/HarmonyOS_Sans_SC_Regular.ttf` | HarmonyOS Sans SC | 29063 | 8.3 MB |
|
|
||||||
| `harmonyos-sans/HarmonyOS_Sans_SC_Bold.ttf` | HarmonyOS Sans SC | 29063 | 8.2 MB |
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -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.
|
||||||
Binary file not shown.
Executable
+84
@@ -0,0 +1,84 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# 批量编译验证仓库内全部模板,打印每个的 error / Overfull / Underfull / 页数
|
||||||
|
#
|
||||||
|
# 用法:
|
||||||
|
# bash verify_all.sh # 全部
|
||||||
|
# bash verify_all.sh 试卷 # 只跑指定目录(按目录名精确匹配)
|
||||||
|
#
|
||||||
|
# 设计说明:
|
||||||
|
# · 每个模板都在**自己的目录**里编译。模板的 .sty 与 ../fonts/ 都是相对
|
||||||
|
# 编译时工作目录解析的,从仓库根调用会找不到字体。
|
||||||
|
# · 只排除 error,不排除 Overfull/Underfull —— 这两类是排版质量的早期信号,
|
||||||
|
# 要看得见。已知的几处属既有问题(试卷/、课程执行大纲/ 各 1 处 Overfull,
|
||||||
|
# 幻灯片/、科技报告/ 各 1 处 Underfull),不是回归。
|
||||||
|
# · 主文件不像「目录名.tex」的,在 TARGETS 里显式登记(幻灯片/slides.tex、
|
||||||
|
# 科技报告/report.tex、试卷/ 的两个示例)。
|
||||||
|
# · 简历/ 目录下还有 fontawesomesymbols-*.tex 等宏包片段,不是文档,
|
||||||
|
# 不能拿 ls 的第一个 .tex 当主文件,否则报 Emergency stop。
|
||||||
|
set -u
|
||||||
|
|
||||||
|
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
cd "$ROOT" || exit 1
|
||||||
|
TEXBIN="${TEXBIN:-xelatex}"
|
||||||
|
|
||||||
|
TARGETS=(
|
||||||
|
"劳务发放说明表|劳务发放说明表.tex"
|
||||||
|
"年度考核登记表|年度考核登记表.tex"
|
||||||
|
"幻灯片|slides.tex"
|
||||||
|
"成绩构成说明|成绩构成说明.tex"
|
||||||
|
"特殊事项说明表|特殊事项说明表.tex"
|
||||||
|
"科技报告|report.tex"
|
||||||
|
"简历|简历.tex"
|
||||||
|
"试卷|试卷题型示例.tex"
|
||||||
|
"试卷|参考答案与评分标准示例.tex"
|
||||||
|
"试卷归档封面|试卷归档封面.tex"
|
||||||
|
"试卷归档目录|试卷归档目录.tex"
|
||||||
|
"课程执行大纲|课程执行大纲.tex"
|
||||||
|
"课程教学日历|课程教学日历.tex"
|
||||||
|
"课程大纲|课程大纲.tex"
|
||||||
|
"会议预算表|会议预算表.tex"
|
||||||
|
"教材|教材.tex"
|
||||||
|
"点名册|点名册.tex"
|
||||||
|
)
|
||||||
|
|
||||||
|
filter="${1:-}"
|
||||||
|
total=0; ok=0; fail=0
|
||||||
|
failed_list=""
|
||||||
|
|
||||||
|
for entry in "${TARGETS[@]}"; do
|
||||||
|
dir="${entry%%|*}"; tex="${entry##*|}"
|
||||||
|
if [ -n "$filter" ] && [ "$dir" != "$filter" ]; then continue; fi
|
||||||
|
total=$((total+1))
|
||||||
|
printf "=== [%d] %s/%s ===\n" "$total" "$dir" "$tex"
|
||||||
|
|
||||||
|
log="$(mktemp)"
|
||||||
|
( cd "$dir" && "$TEXBIN" -interaction=nonstopmode -halt-on-error "$tex" > "$log" 2>&1 )
|
||||||
|
rc=$?
|
||||||
|
|
||||||
|
# grep -c 无匹配时已经输出 0(退出码 1),不能再 `|| echo 0`,
|
||||||
|
# 否则变量会变成 "0\n0",后面的整数比较直接报 integer expected。
|
||||||
|
err=$(grep -c "^!" "$log" 2>/dev/null || :)
|
||||||
|
over=$(grep -c "Overfull" "$log" 2>/dev/null || :)
|
||||||
|
under=$(grep -c "Underfull" "$log" 2>/dev/null || :)
|
||||||
|
pages=$(grep -oE "Output written on .*\([0-9]+ page" "$log" 2>/dev/null \
|
||||||
|
| tail -1 | grep -oE "\([0-9]+" | tr -d "(")
|
||||||
|
|
||||||
|
printf " rc=%s err=%s Overfull=%s Underfull=%s pages=%s\n" \
|
||||||
|
"$rc" "${err:-0}" "${over:-0}" "${under:-0}" "${pages:-?}"
|
||||||
|
|
||||||
|
if [ "$rc" -eq 0 ] && [ "${err:-1}" -eq 0 ] && [ -n "${pages:-}" ]; then
|
||||||
|
ok=$((ok+1))
|
||||||
|
else
|
||||||
|
fail=$((fail+1))
|
||||||
|
failed_list="${failed_list}
|
||||||
|
- $dir/$tex"
|
||||||
|
grep -A2 "^!" "$log" 2>/dev/null | head -9 | sed "s/^/ /"
|
||||||
|
fi
|
||||||
|
rm -f "$log"
|
||||||
|
done
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "================ 汇总 ================"
|
||||||
|
echo "总数 $total | 通过 $ok | 失败 $fail"
|
||||||
|
[ -n "$failed_list" ] && printf "%s\n" "$failed_list"
|
||||||
|
exit 0
|
||||||
@@ -0,0 +1,91 @@
|
|||||||
|
# 会议预算表
|
||||||
|
|
||||||
|
中国海洋大学会议经费预算表,A4 单页,空表可直接印刷手填。
|
||||||
|
|
||||||
|
## 编译
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd 会议预算表
|
||||||
|
xelatex 会议预算表.tex
|
||||||
|
```
|
||||||
|
|
||||||
|
或仓库根:`bash build.sh 会议预算表`
|
||||||
|
|
||||||
|
## 文件
|
||||||
|
|
||||||
|
| 文件 | 说明 |
|
||||||
|
|---|---|
|
||||||
|
| `会议预算表.tex` | 主文件,填内容改这里 |
|
||||||
|
| `oucmeeting.sty` | 版式包,一般不改 |
|
||||||
|
|
||||||
|
## 表格结构
|
||||||
|
|
||||||
|
28 行 × 7 列,分四段:
|
||||||
|
|
||||||
|
| 区段 | 行 | 内容 |
|
||||||
|
|---|---|---|
|
||||||
|
| 基本信息 | 1–6 | 会议名称、时间、地点、类型、参会人数、支出项目卡号、会议内容 |
|
||||||
|
| 收入预算 | 7–14 | 会务费收入、科研经费、财政拨款专项、学校预算经费、其他、合计 |
|
||||||
|
| 支出预算 | 15–26 | 专家咨询费、交通费、住宿费、伙食费、其他费用(交通费/印刷费/会议室/补助/其他)、合计 |
|
||||||
|
| 意见签字 | 27–28 | 经费负责人意见、所在单位负责人意见、签字盖章 |
|
||||||
|
|
||||||
|
## 填写方式
|
||||||
|
|
||||||
|
这是**空表模板**,金额、卡号、日期、人名一律留空,打印后手填。
|
||||||
|
|
||||||
|
要电子填写,在 `.tex` 正文里往对应位置补内容即可。比如会议名称:
|
||||||
|
|
||||||
|
```latex
|
||||||
|
会议名称 & 软件需求工程教学研讨会 & & & & & \\
|
||||||
|
```
|
||||||
|
|
||||||
|
### 页首信息
|
||||||
|
|
||||||
|
```latex
|
||||||
|
\oucmeetattach{附件 1} % 左上角附件编号,不要则写 \oucmeetattach{}
|
||||||
|
\oucmeettitle{中国海洋大学会议预算表} % 标题
|
||||||
|
\oucmeetdateline{填表日期:... 金额单位:...} % 标题下方一行
|
||||||
|
```
|
||||||
|
|
||||||
|
### 表尾说明
|
||||||
|
|
||||||
|
```latex
|
||||||
|
\begin{oucmeetnotes}
|
||||||
|
\oucmeetnote{1、}{说明内容}
|
||||||
|
\oucmeetnote{2、}{说明内容}
|
||||||
|
\end{oucmeetnotes}
|
||||||
|
```
|
||||||
|
|
||||||
|
条目数可增减,「1、」「2、」写在第一个参数里。
|
||||||
|
|
||||||
|
## 表格内改内容
|
||||||
|
|
||||||
|
正文里每行对应表格一行,用 `&` 分列。**每行必须写满 7 段(6 个 `&`)**,
|
||||||
|
被合并掉的格子留空:
|
||||||
|
|
||||||
|
```latex
|
||||||
|
会议时间 & & & & 会议地点 & & \\
|
||||||
|
```
|
||||||
|
|
||||||
|
合并关系在 `oucmeeting.sty` 的 `cell{行}{列}={c=跨度}{对齐}` 里声明。
|
||||||
|
改列宽或改结构时看那里。
|
||||||
|
|
||||||
|
### 「其他费用」竖排
|
||||||
|
|
||||||
|
四个字竖排、跨 5 行。字距在正文里控制:
|
||||||
|
|
||||||
|
```latex
|
||||||
|
\shortstack{其\\[4bp]他\\[4bp]费\\[4bp]用}
|
||||||
|
```
|
||||||
|
|
||||||
|
数值调大则字距拉开、字块变高。格高约 82bp,`4bp` 时上下各留 13bp。
|
||||||
|
|
||||||
|
## 版式
|
||||||
|
|
||||||
|
```
|
||||||
|
A4,边距 上 38.01 / 下 35.01 / 左 28.01 / 右 26.00 mm
|
||||||
|
正文 9pt,标题 22pt
|
||||||
|
表格 28 行 × 7 列,边框 0.5pt,行高 5.6mm
|
||||||
|
```
|
||||||
|
|
||||||
|
行高会影响总高度。5.6mm 时刚好一页;改到 6.0mm 会把表尾说明挤到第二页。
|
||||||
@@ -0,0 +1,300 @@
|
|||||||
|
%======================================================================
|
||||||
|
% oucmeeting.sty —— 中国海洋大学 会议预算表 版式包
|
||||||
|
%
|
||||||
|
% 由学校下发的 .doc 复刻而来(源文件:会议预算表.doc,OLE2 老格式,
|
||||||
|
% 先经 LibreOffice 转 docx 再解析 OOXML)。尺寸全部从原文件量出。
|
||||||
|
%
|
||||||
|
% ⚠️ 编译: xelatex 会议预算表.tex
|
||||||
|
% 单次编译即可,无交叉引用。
|
||||||
|
% 依赖 ctex + geometry + fontspec + xeCJK + tabularray
|
||||||
|
% 与 课程大纲/、课程执行大纲/ 同源同风格。
|
||||||
|
%======================================================================
|
||||||
|
\NeedsTeXFormat{LaTeX2e}
|
||||||
|
\ProvidesPackage{oucmeeting}[2026/10/30 v1.0 OUC meeting budget form]
|
||||||
|
|
||||||
|
\RequirePackage{geometry}
|
||||||
|
\RequirePackage{fontspec}
|
||||||
|
\RequirePackage{xeCJK}
|
||||||
|
\RequirePackage{tabularray}
|
||||||
|
% 注:不再需要 graphicx。早期版本用 \rotatebox 做「其他费用」竖排,
|
||||||
|
% 现已改为 \shortstack 逐字竖排(修正),不再依赖 graphicx。
|
||||||
|
|
||||||
|
%======================================================================
|
||||||
|
% 1. 页面
|
||||||
|
%
|
||||||
|
% sectPr (11906 x 16838 twips):
|
||||||
|
% 宽 210.01 mm 高 297.00 mm ← 标准 A4
|
||||||
|
% top 2155 twips = 38.01 mm
|
||||||
|
% bottom 1985 twips = 35.01 mm
|
||||||
|
% left 1588 twips = 28.01 mm
|
||||||
|
% right 1474 twips = 26.00 mm
|
||||||
|
% header 0 twips = 0.00 mm (无页眉)
|
||||||
|
% footer 992 twips = 17.50 mm
|
||||||
|
%
|
||||||
|
% 四个边距都不常见(38/35/28/26),是原表为把 28 行表格塞进一页
|
||||||
|
% 压出来的。照抄,不"优化"——这是复刻件,不是重新设计。
|
||||||
|
%
|
||||||
|
% ⚠️ 版心宽 = 210 - 28.01 - 26.00 = 155.99 mm
|
||||||
|
% 而原表宽 169.12 mm,**超宽 13.12 mm**。
|
||||||
|
% 用 tblLayout=fixed 硬撑,实际会压进右侧页边距。
|
||||||
|
% ⇒ 本包把表格等比缩到 155.99 mm(系数 0.9224),
|
||||||
|
% 列宽按比例重算,见第 3 节。这是唯一一处主动偏离原文件的地方。
|
||||||
|
%======================================================================
|
||||||
|
\geometry{
|
||||||
|
paperwidth = 210mm,
|
||||||
|
paperheight = 297mm,
|
||||||
|
left = 28.01mm,
|
||||||
|
right = 26.00mm,
|
||||||
|
top = 38.01mm,
|
||||||
|
bottom = 35.01mm,
|
||||||
|
headheight = 0pt,
|
||||||
|
headsep = 0pt,
|
||||||
|
footskip = 17.50mm,
|
||||||
|
}
|
||||||
|
\setlength{\parindent}{0pt}
|
||||||
|
\setlength{\parskip}{0pt}
|
||||||
|
\pagestyle{empty} % 无页眉页脚页码
|
||||||
|
|
||||||
|
%======================================================================
|
||||||
|
% 2. 字体
|
||||||
|
%
|
||||||
|
% 用宋体 / 黑体。仓库规矩:不用商业字体,
|
||||||
|
% 全部取自公共字体包 ../fonts.tex。
|
||||||
|
%
|
||||||
|
% ⚠️ 原表字号分布
|
||||||
|
% 22pt ×1 —— 标题「中国海洋大学会议预算表」
|
||||||
|
% 9pt ×47 —— 表格内全部文字 + 三条说明
|
||||||
|
% 无 12pt 段落,与课程大纲那套不同,别照抄那边的字号命令。
|
||||||
|
%======================================================================
|
||||||
|
\input{../fonts.tex}
|
||||||
|
|
||||||
|
\newcommand{\oucMeetFont}[2]{\fontsize{#1pt}{#2pt}\selectfont}
|
||||||
|
\newcommand{\Mtw}{\oucMeetFont{22}{30}} % 标题 22pt
|
||||||
|
\newcommand{\Mn}{\oucMeetFont{9}{12}} % 表格与说明 9pt
|
||||||
|
|
||||||
|
\AtBeginDocument{\Mn}
|
||||||
|
|
||||||
|
%======================================================================
|
||||||
|
% 3. 表格列宽
|
||||||
|
%
|
||||||
|
% 网格(tblGrid,单位 twips):
|
||||||
|
% [424, 2054, 790, 1262, 2056, 209, 2793] 合计 9588
|
||||||
|
% 换算 mm(×25.4/1440):
|
||||||
|
% [7.48, 36.23, 13.93, 22.26, 36.27, 3.69, 49.27] 合计 169.12
|
||||||
|
%
|
||||||
|
% 等比缩到版心 155.99 mm(系数 0.9224):
|
||||||
|
% [6.9, 33.4, 12.9, 20.5, 33.4, 3.4, 45.4] 合计 155.9
|
||||||
|
%
|
||||||
|
% ⚠️ 第 6 列只有 3.4mm,是原文件里「其他费用」竖排标题那一列的残留
|
||||||
|
% (原 209 twips,几乎只是一条分隔线宽)。保留它是因为第 20~24 行
|
||||||
|
% 的「其他费用」合并单元格需要它占位,删掉会破坏网格。
|
||||||
|
%======================================================================
|
||||||
|
% ⚠️ 列定义**不能**放进宏再用 \OucMeetColspec 引用 —— tabularray 的
|
||||||
|
% colspec 解析器要求字面量,报
|
||||||
|
% Package tabularray Error: Unexpandable command ... inside Column type
|
||||||
|
% ⇒ 直接写在下方的 colspec={...} 里(实际唯一可行写法)。
|
||||||
|
|
||||||
|
%----------------------------------------------------------------------
|
||||||
|
% 行高(修正)
|
||||||
|
%
|
||||||
|
% ⚠️⚠️ 的 28 行里**只有 R26 显式设了 trHeight**(567 exact = 10mm),
|
||||||
|
% 其余 27 行都没设 —— 行高由内容自然撑开,9pt 字约 4.5~5mm。
|
||||||
|
%
|
||||||
|
% 第一版我给所有行硬设 ht=7.4mm(自己拍的数),结果:
|
||||||
|
% 28 × 7.4 = 207.2mm,加标题区约 30mm + 说明约 25mm = 262mm
|
||||||
|
% 而版心只有 224mm ⇒ **必然溢出一页**,说明文字被推到第 3 页。
|
||||||
|
%
|
||||||
|
% ⇒ 改为 row{2-Z} 不设 ht,让内容撑开(与一致);
|
||||||
|
% 表头行(R6/R14 分节标题)和签署行(R26/R27)单独给最小高度,
|
||||||
|
% 保证印章框有空间。
|
||||||
|
%
|
||||||
|
% ⚠️ 但 9pt + 0 上下内边距时行高只有 4.2mm,全表 28×4.2=118mm,
|
||||||
|
% 偏挤且不像正式表格。折中取 ht=6.0mm(≈ 一点留白),
|
||||||
|
% 28×6.0=168mm,加标题 30 + 说明 25 = 223mm,正好卡在 224mm 内。
|
||||||
|
% ⚠️ 若将来内容变多导致溢出,优先降这个值,不要动页边距。
|
||||||
|
% (注:这个 6.0mm 是写在下方 row{1-Z}={ht=6.0mm} 里的字面量,
|
||||||
|
% 不做成宏 —— 原因见第 4 节开头的说明。)
|
||||||
|
|
||||||
|
%======================================================================
|
||||||
|
% 4. 主表环境
|
||||||
|
%
|
||||||
|
% ⚠️⚠️ 合并单元格用**矩阵式语法**,绝对不能写在内容里用 \SetCell
|
||||||
|
%
|
||||||
|
% 现状(tabularray 2022A + 本表的 7 列 Q[c,m,wd=…] + colsep=1mm):
|
||||||
|
% 只要在单元格内容里写 \SetCell[c=n],编译立刻报
|
||||||
|
% ! Missing number, treated as zero.
|
||||||
|
% ! Illegal unit of measure (pt inserted.)
|
||||||
|
% \__dim_eval_end:
|
||||||
|
% 且**全部错误都定位到 \end{tblr}**,根本看不出是哪个格。
|
||||||
|
% \begin{tblr}{colspec={Q[c,m,wd=21mm] ...7列..., colsep=0.8mm}}
|
||||||
|
% \SetCell[c=2]{c} A & \SetCell[c=5]{l} B \\
|
||||||
|
% \end{tblr}
|
||||||
|
% 必崩;把同样的合并改写成下面的 cell{} 语法就 0 错。
|
||||||
|
%
|
||||||
|
% ✅ 正确写法:在 tblr 的选项里用
|
||||||
|
% cell{行}{列}={c=n}{对齐}
|
||||||
|
% 被合并掉的格在内容里**留空**(写 `& &`),不要写 {}。
|
||||||
|
%
|
||||||
|
% ⚠️ 另有一个坑:纵向合并 \SetCell[r=n] 与横向 \SetCell[c=m]
|
||||||
|
% 不能出现在同一行,同样报上面那串错。本表因此完全不用纵向合并,
|
||||||
|
% 「其他费用」改成竖排文字 + 该列留空(视觉上等价)。
|
||||||
|
%======================================================================
|
||||||
|
\newenvironment{oucmeettable}{%
|
||||||
|
\par\begingroup\Mn
|
||||||
|
\begin{tblr}[label=none]{
|
||||||
|
colspec={Q[c,m,wd=6.10mm] Q[c,m,wd=29.65mm] Q[c,m,wd=11.43mm] Q[c,m,wd=18.18mm] Q[c,m,wd=29.65mm] Q[c,m,wd=3.00mm] Q[c,m,wd=40.10mm]},
|
||||||
|
colsep=1.0mm, rowsep=0pt, stretch=0,
|
||||||
|
hline{1-Z}={0.5pt}, vline{1-Z}={0.5pt},
|
||||||
|
row{1-Z}={ht=5.6mm, font=\Mn, valign=m},
|
||||||
|
% ---- 合并规则(行号从 1 开始)----
|
||||||
|
% R1~R6 基本信息
|
||||||
|
cell{1}{1}={c=2}{c}, cell{1}{3}={c=5}{l},
|
||||||
|
cell{2}{1}={c=2}{c}, cell{2}{3}={c=2}{l}, cell{2}{5}={c=2}{c}, cell{2}{7}={c=1}{l},
|
||||||
|
cell{3}{1}={c=2}{c}, cell{3}{3}={c=5}{l},
|
||||||
|
cell{4}{1}={c=2}{c}, cell{4}{3}={c=5}{l},
|
||||||
|
cell{5}{1}={c=2}{c}, cell{5}{3}={c=5}{l},
|
||||||
|
cell{6}{1}={c=2}{c}, cell{6}{3}={c=5}{l},
|
||||||
|
% R7 收入预算标题(跨 7 列)
|
||||||
|
cell{7}{1}={c=7}{c},
|
||||||
|
% R8~R14 收入表
|
||||||
|
cell{8}{1}={c=2}{c}, cell{8}{3}={c=2}{c}, cell{8}{5}={c=2}{c}, cell{8}{7}={c=1}{c},
|
||||||
|
cell{9}{1}={c=2}{l}, cell{9}{3}={c=2}{l}, cell{9}{5}={c=2}{l}, cell{9}{7}={c=1}{l},
|
||||||
|
cell{10}{1}={c=2}{l}, cell{10}{3}={c=2}{l}, cell{10}{5}={c=2}{l}, cell{10}{7}={c=1}{l},
|
||||||
|
cell{11}{1}={c=2}{l}, cell{11}{3}={c=2}{l}, cell{11}{5}={c=2}{l}, cell{11}{7}={c=1}{l},
|
||||||
|
cell{12}{1}={c=2}{l}, cell{12}{3}={c=2}{l}, cell{12}{5}={c=2}{l}, cell{12}{7}={c=1}{l},
|
||||||
|
cell{13}{1}={c=2}{l}, cell{13}{3}={c=2}{l}, cell{13}{5}={c=2}{l}, cell{13}{7}={c=1}{l},
|
||||||
|
cell{14}{1}={c=2}{c}, cell{14}{3}={c=2}{l}, cell{14}{5}={c=2}{l}, cell{14}{7}={c=1}{l},
|
||||||
|
% R15 支出预算标题(跨 7 列)
|
||||||
|
cell{15}{1}={c=7}{c},
|
||||||
|
% R16~R20 支出表(3+2+2)
|
||||||
|
cell{16}{1}={c=3}{c}, cell{16}{4}={c=2}{c}, cell{16}{6}={c=2}{c},
|
||||||
|
cell{17}{1}={c=3}{l}, cell{17}{4}={c=2}{l}, cell{17}{6}={c=2}{l},
|
||||||
|
cell{18}{1}={c=3}{l}, cell{18}{4}={c=2}{l}, cell{18}{6}={c=2}{l},
|
||||||
|
cell{19}{1}={c=3}{l}, cell{19}{4}={c=2}{l}, cell{19}{6}={c=2}{l},
|
||||||
|
cell{20}{1}={c=3}{l}, cell{20}{4}={c=2}{l}, cell{20}{6}={c=2}{l},
|
||||||
|
% R21~R25 其他费用区(1+2+2+2)
|
||||||
|
% ★ 「其他费用」纵向合并 5 行,文字逐字竖排(不是旋转 90°)
|
||||||
|
% 写法:cell{21}{1}={r=5}{c} 声明纵向合并,
|
||||||
|
% 内容用 \shortstack{其\\他\\费\\用} 逐字堆叠。
|
||||||
|
% ⚠️ 不能用 \rotatebox{90} —— 那只是把整行文字旋转,
|
||||||
|
% 仍然是"横向一句转个角度",不是你要的上下排列(修正)。
|
||||||
|
% ⚠️ 纵向合并也必须用 cell{} 矩阵语法。写成 \SetCell[r=5] 在
|
||||||
|
% 内容里,会与同行的 \SetCell[c=n] 冲突报 Missing number。
|
||||||
|
cell{21}{1}={r=5}{c},
|
||||||
|
cell{21}{2}={c=2}{l}, cell{21}{4}={c=2}{l}, cell{21}{6}={c=2}{l},
|
||||||
|
cell{22}{2}={c=2}{l}, cell{22}{4}={c=2}{l}, cell{22}{6}={c=2}{l},
|
||||||
|
cell{23}{2}={c=2}{l}, cell{23}{4}={c=2}{l}, cell{23}{6}={c=2}{l},
|
||||||
|
cell{24}{2}={c=2}{l}, cell{24}{4}={c=2}{l}, cell{24}{6}={c=2}{l},
|
||||||
|
cell{25}{2}={c=2}{l}, cell{25}{4}={c=2}{l}, cell{25}{6}={c=2}{l},
|
||||||
|
% R26 合计(3+2+2)
|
||||||
|
cell{26}{1}={c=3}{c}, cell{26}{4}={c=2}{l}, cell{26}{6}={c=2}{l},
|
||||||
|
% ⚠️ 主表只到 R26「合计」。
|
||||||
|
% R27/R28(意见+签字)已移到 5 节的独立签字表(oucmeetsign 环境),
|
||||||
|
% 原因见 5 节开头的说明 —— 那两行无论怎么调都会多出一列或丢内容。
|
||||||
|
% ⇒ 主表现在是 **26 行**,不是 28 行。
|
||||||
|
}%
|
||||||
|
}{%
|
||||||
|
\end{tblr}\par\endgroup}
|
||||||
|
|
||||||
|
%======================================================================
|
||||||
|
% 5. 签字栏(独立小表,不并入主表)
|
||||||
|
%
|
||||||
|
% ⚠️⚠️ 为什么把签字栏从主表里拆出来
|
||||||
|
%
|
||||||
|
% 主表 R27/R28(意见+签字)无论怎么调都无法同时满足"不多列"和
|
||||||
|
% "内容不丢失"。实际四种组合全失败:
|
||||||
|
% 内容 8 段 + cell{27}{4}={c=4} → 右侧多一列(9 条竖线)
|
||||||
|
% 内容 7 段 + cell{27}{4}={c=4} → 右侧多一列(9 条竖线)
|
||||||
|
% 内容 2 段 + cell{27}{4}={c=4} → 列数对,但第 2 段内容被合并盖住消失
|
||||||
|
% 内容 2 段 + cell{27}{2}={c=6} → 表格网格散架(溢出 3 页、无横线)
|
||||||
|
% 内容 7 段 + 无 cell 声明 → 同样散架
|
||||||
|
%
|
||||||
|
% 根因是这两行的"内容段数 / cell 起始列 / 跨度"三者必须严格自洽,
|
||||||
|
% 而 tabularray 2022A 在这种跨整行的大合并上行为不稳定。
|
||||||
|
%
|
||||||
|
% ⇒ 改为**物理隔离**:主表只到「合计」(27 行),签字栏用独立 tblr
|
||||||
|
% 紧贴在下方,视觉上是同一张表(边框对接、列宽对齐),
|
||||||
|
% 但排版上互不干扰。这是最稳的做法。
|
||||||
|
%
|
||||||
|
% 对齐要点:签字表的列宽必须让「3 列 : 4 列」的分界点与主表一致,
|
||||||
|
% 所以用主表前 3 列宽度之和 与 后 4 列宽度之和 作为两列宽度。
|
||||||
|
% 主表列宽 6.10 / 29.65 / 11.43 / 18.18 / 29.65 / 3.00 / 40.10
|
||||||
|
% 前 3 列 = 6.10+29.65+11.43 = 47.18mm,加两侧 colsep 3×2 = 53.18mm
|
||||||
|
% 后 4 列 = 18.18+29.65+3.00+40.10 = 91.02mm,加 colsep 4×2 = 99.02mm
|
||||||
|
% ⚠️ 签字表只有 2 列,colsep 共 4 个,需重新配平(见下方计算)。
|
||||||
|
%======================================================================
|
||||||
|
\newenvironment{oucmeetsign}{%
|
||||||
|
\par\begingroup\Mn
|
||||||
|
\begin{tblr}[label=none]{
|
||||||
|
colspec={Q[l,m,wd=51.71mm] Q[l,m,wd=97.63mm]},
|
||||||
|
colsep=1.0mm, rowsep=0pt, stretch=0,
|
||||||
|
hline{1-Z}={0.5pt}, vline{1-Z}={0.5pt},
|
||||||
|
row{1-Z}={ht=5.6mm, font=\Mn, valign=m, halign=l},
|
||||||
|
}%
|
||||||
|
}{%
|
||||||
|
\end{tblr}\par\endgroup}
|
||||||
|
|
||||||
|
%======================================================================
|
||||||
|
% 6. 标题与页首
|
||||||
|
%======================================================================
|
||||||
|
% 左上角「附件1」小字(无字号设置,随正文 9pt)
|
||||||
|
\newcommand{\oucmeetattach}[1]{%
|
||||||
|
\par\noindent{\Mn #1}\par\vspace*{4bp}}
|
||||||
|
|
||||||
|
% 标题:22pt 居中
|
||||||
|
\newcommand{\oucmeettitle}[1]{%
|
||||||
|
\par\begingroup\Mtw\heiti\centering #1\par\endgroup
|
||||||
|
\vspace*{8bp}}
|
||||||
|
|
||||||
|
% 填表日期 / 金额单位 那一行(左右分列,中间留白)
|
||||||
|
% 用一串空格撑开,这里用 \hfill 更稳
|
||||||
|
\newcommand{\oucmeetdateline}[1]{%
|
||||||
|
\par\noindent{\Mn #1}\par\vspace*{4bp}}
|
||||||
|
|
||||||
|
%======================================================================
|
||||||
|
% 6. 表尾说明
|
||||||
|
%
|
||||||
|
% ⚠️ 悬挂缩进不能用 \leftmargin=2em —— 实际报
|
||||||
|
% Overfull \hbox (26.71pt too wide)
|
||||||
|
% 因为「1、」「2、」是**全角字符 + 顿号**,9pt 下实际宽约 2.4em,
|
||||||
|
% 比 2em 宽,标签凸出到左边界外。⇒ \labelwidth 要给足 2.5em。
|
||||||
|
%
|
||||||
|
% ⚠️⚠️ \itemindent 不能设负值!
|
||||||
|
% 第一版写 \itemindent=-2.5em 想让「1、」顶格,结果整段被拉到
|
||||||
|
% x=65.95,而版心左界是 79.40 —— **说明文字跑到版心外左侧 13.45bp**,
|
||||||
|
% 且只报一个 5.1pt 的 Overfull(因为 \hbox 宽度的计算没把左溢算进去)。
|
||||||
|
% ⇒ 正确做法:\leftmargin 与 \labelwidth 相等,\itemindent=0,
|
||||||
|
% 标签自然落在左边界,「1、」后面直接接正文。
|
||||||
|
% \labelwidth 要 ≥ 标签实际宽度(「1、」9pt 全角约 2.4em),给 2.5em。
|
||||||
|
% 见下方 \oucmeetnote 的说明。环境只负责字号与上间距,不再用 list。
|
||||||
|
\newenvironment{oucmeetnotes}{%
|
||||||
|
\par\vspace*{2bp}\begingroup\Mn
|
||||||
|
}{\par\endgroup}
|
||||||
|
|
||||||
|
%----------------------------------------------------------------------
|
||||||
|
% 单条说明
|
||||||
|
%
|
||||||
|
% ⚠️ 为什么不用 list 环境:list 的 \leftmargin / \itemindent 组合极易
|
||||||
|
% 左外 13.45bp,日志里只有个无关的 5.1pt)。
|
||||||
|
%
|
||||||
|
% ⚠️ 也不要用 \hangindent 悬挂缩进。「2、」后面直接接正文,续行不需要
|
||||||
|
% 缩进;相反,\hangindent 会让续行可用宽度变窄,第 2 条
|
||||||
|
% (50 字,两行)因此溢出 5.1pt。
|
||||||
|
% ⇒ 就是普通的 \noindent + 段落,什么都不设。
|
||||||
|
%
|
||||||
|
% ⚠️⚠️ \tolerance / \emergencystretch 必须在**段落开始前**设置。
|
||||||
|
% 写成 `\noindent` 之后再改无效(\noindent 已开段落, 5.1pt
|
||||||
|
% 的 Overfull 纹丝不动)。
|
||||||
|
% ⇒ 这里用 \sloppy,它在内部改 \tolerance 和 \emergencystretch,
|
||||||
|
% 且必须在 \par 之前调用 —— 下面 #1#2 之前就调了,有效。
|
||||||
|
%
|
||||||
|
% ⚠️ 为什么会溢出:第 2 条说明正好 50 字,9pt 下版心一行放 49 字,
|
||||||
|
% 第 50 字「现」挤到第二行后,第一行欠宽极小、第二行只有「金;」
|
||||||
|
% 两个字,TeX 判定这比"溢出 5.1pt"更难看。\sloppy 允许更松的断行,
|
||||||
|
% 两害相权取其轻。这是内容长度与版心宽度的巧合冲突,不是排版错误。
|
||||||
|
%----------------------------------------------------------------------
|
||||||
|
\newcommand{\oucmeetnote}[2]{%
|
||||||
|
\par\noindent\sloppy #1#2\par
|
||||||
|
\vspace*{1bp}}
|
||||||
|
|
||||||
|
\endinput
|
||||||
Binary file not shown.
+197
@@ -0,0 +1,197 @@
|
|||||||
|
%======================================================================
|
||||||
|
% 中国海洋大学会议预算表(空表模板)
|
||||||
|
%
|
||||||
|
% 用途:演示 oucmeeting.sty 的用法,并作为可直接印刷使用的空表。
|
||||||
|
%
|
||||||
|
% 编译: xelatex 会议预算表.tex (单次即可)
|
||||||
|
%
|
||||||
|
% ⚠️ 这是**空表**。金额、卡号、日期、人名一律留空,供手填。
|
||||||
|
%
|
||||||
|
% ⚠️⚠️ 本文件的表格**只写内容,不写任何 \SetCell**。
|
||||||
|
% 所有合并规则都在 oucmeeting.sty 的 oucmeettable 环境里,
|
||||||
|
% 用 cell{行}{列}={c=n}{对齐} 矩阵式声明。
|
||||||
|
% 一写 \SetCell 就报一串 Missing number,且错误全指向 \end{tblr}。
|
||||||
|
% 详见 sty 第 4 节的记录。
|
||||||
|
%
|
||||||
|
% ⚠️ 被合并掉的格在内容里**留空**(写 `& &`),不要写 {}。
|
||||||
|
%
|
||||||
|
% 28 行的合并结构(行号 = 表格第几行,从 1 起):
|
||||||
|
% R1 会议名称 2+5
|
||||||
|
% R2 会议时间/地点 2+2+2+1
|
||||||
|
% R3 会议类型 2+5
|
||||||
|
% R4 参会人数 2+5
|
||||||
|
% R5 支出项目卡号 2+5
|
||||||
|
% R6 会议内容 2+5
|
||||||
|
% R7 会议收入预算 跨 7 列
|
||||||
|
% R8 收入表头 2+2+2+1
|
||||||
|
% R9 会务费收入 2+2+2+1
|
||||||
|
% R10 科研经费 2+2+2+1
|
||||||
|
% R11 财政拨款专项 2+2+2+1
|
||||||
|
% R12 学校预算经费 2+2+2+1
|
||||||
|
% R13 其他 2+2+2+1
|
||||||
|
% R14 合计 2+2+2+1
|
||||||
|
% R15 会议支出预算 跨 7 列
|
||||||
|
% R16 支出表头 3+2+2
|
||||||
|
% R17 专家咨询费 3+2+2
|
||||||
|
% R18 城市间交通费 3+2+2
|
||||||
|
% R19 住宿费 3+2+2
|
||||||
|
% R20 伙食费 3+2+2
|
||||||
|
% R21 其他费用/交通费 1+2+2+2
|
||||||
|
% R22 会议资料印刷费 1+2+2+2
|
||||||
|
% R23 会议室使用费 1+2+2+2
|
||||||
|
% R24 工作人员补助 1+2+2+2
|
||||||
|
% R25 其他 1+2+2+2
|
||||||
|
% R26 合计 3+2+2
|
||||||
|
% R27 意见栏 3+4
|
||||||
|
% R28 签字栏 3+4
|
||||||
|
%======================================================================
|
||||||
|
\documentclass[UTF8]{ctexart}
|
||||||
|
\usepackage{oucmeeting}
|
||||||
|
|
||||||
|
\begin{document}
|
||||||
|
|
||||||
|
\oucmeetattach{附件 1}
|
||||||
|
|
||||||
|
\oucmeettitle{中国海洋大学会议预算表}
|
||||||
|
|
||||||
|
\oucmeetdateline{填表日期:\hspace*{4em}年\hspace*{2em}月\hspace*{2em}日%
|
||||||
|
\hfill 金额单位:\hspace*{3em}元}
|
||||||
|
|
||||||
|
\begin{oucmeettable}
|
||||||
|
% ---- R1~R6 基本信息 ----
|
||||||
|
%
|
||||||
|
% ⚠️⚠️ 每行必须写满 7 段(6 个 `&`),被 cell{} 合并掉的格**留空**。
|
||||||
|
% 写 7 段 `甲 & & 乙 & & 丙 & & 丁` → 四个字全部正确
|
||||||
|
% 写 4 段 `甲 & 乙 & 丙 & 丁` → **乙、丁 被吞掉**
|
||||||
|
% ⇒ 段数 ≠ 列数时,多出来的内容会静默丢失,不报错。
|
||||||
|
%
|
||||||
|
% ⚠️ 标签落在哪一格,取决于 cell{} 的合并位置,不是"第几个字":
|
||||||
|
% R2 的 cell 配置是 2+2+2+1,即
|
||||||
|
% 格1(列1-2)=会议时间 格3(列3-4)=空值 格5(列5-6)=会议地点 格7(列7)=空值
|
||||||
|
% 所以「会议地点」必须写在**第 5 段**,写在第 3 段就会挤到左边、
|
||||||
|
会议名称 & & & & & & \\
|
||||||
|
会议时间 & & & & 会议地点 & & \\
|
||||||
|
% ⚠️ R3/R4 的填空横线用 \hspace 撑,宽度必须控制。
|
||||||
|
% 跨 5 列约 122mm,三个选项各带一对(\hspace{3em})就要 6×3em=18em
|
||||||
|
% 再加文字,撑到 529.7bp(版心止于 521.57),超 8bp。
|
||||||
|
% ⇒ 单个填空收到 2.2em(约 7mm,手写两三个字够用)。
|
||||||
|
会议类型 & & 国内业务会议(\hspace*{2.2em})\hspace*{1em}%
|
||||||
|
国内管理会议(\hspace*{2.2em})\hspace*{1em}%
|
||||||
|
在华举办国际会议(\hspace*{2.2em}) & & & & \\
|
||||||
|
参会人数 & & 总数\hspace*{2.2em}人\hspace*{1em}%
|
||||||
|
(其中参会代表\hspace*{2.2em}人;工作人员\hspace*{2.2em}人;%
|
||||||
|
外宾\hspace*{2.2em}人) & & & & \\
|
||||||
|
会议支出项目卡号 & & & & & & \\
|
||||||
|
会议内容 & & & & & & \\
|
||||||
|
|
||||||
|
% ---- R7~R14 收入预算 ----
|
||||||
|
\bfseries 会议收入预算 & & & & & & \\
|
||||||
|
收入项目 & & 项目经费卡号 & & 金额 & & 备注 \\
|
||||||
|
会务费收入 & & & & & & 每人\hspace*{2.5em}元 \\
|
||||||
|
科研经费 & & & & & & \\
|
||||||
|
财政拨款会议专项经费 & & & & & & \\
|
||||||
|
学校预算经费 & & & & & & \\
|
||||||
|
其他 & & & & & & \\
|
||||||
|
合计 & & & & & & \\
|
||||||
|
|
||||||
|
% ---- R15~R26 支出预算 ----
|
||||||
|
\bfseries 会议支出预算 & & & & & & \\
|
||||||
|
支出项目 & & & 预算金额 & & 实际支出金额(由财务处填写) & \\
|
||||||
|
专家咨询费(含讲课及评审费) & & & & & & \\
|
||||||
|
专家城市间交通费 & & & & & & \\
|
||||||
|
住宿费 & & & & & & \\
|
||||||
|
伙食费 & & & & & & \\
|
||||||
|
|
||||||
|
% R21~R25:「其他费用」**逐字竖排**,占 5 行高(不是旋转 90°)
|
||||||
|
% 纵向合并由 sty 里的 cell{21}{1}={r=5}{c} 声明,
|
||||||
|
% 这里用 \shortstack 让四个字上下堆叠。
|
||||||
|
% ⚠️ 不能用 \rotatebox{90}:那只是把横排整句转个角度,
|
||||||
|
% 不是"上下排列"(修正)。
|
||||||
|
% ⚠️ \shortstack 里的 \\ 是**普通换行**,tabularray 在 cell{} 语法下
|
||||||
|
% 不会把它误当行结束(旧版 \SetCell 语法下会崩,那是另一个坑)。
|
||||||
|
%
|
||||||
|
% ★ 字距取 4bp:文字块约 56bp,格高 82bp → **上下各留 13bp**,
|
||||||
|
% 既不贴格线,也能看出竖排拉开的效果。
|
||||||
|
%
|
||||||
|
% ⚠️⚠️ 字距不能给太大,会顶到格线。(9pt 字、格高 82bp):
|
||||||
|
% \\[17bp] → 文字块 94bp,**比格高还高**,头尾字距格线只有
|
||||||
|
% \\[8bp] → 文字块 67bp,上下各留 7.4bp ← 仍偏挤
|
||||||
|
% \\[4bp] → 文字块 56bp,上下各留 13bp ← 采用
|
||||||
|
% 不加参数 → 文字块 43bp,上下各留 19bp(字挤成一小团,不算竖排)
|
||||||
|
%
|
||||||
|
% ⚠️ 不能靠局部设 \baselineskip —— \shortstack 内部会重置它,
|
||||||
|
% 实际设 19bp 无效(字距仍是 11.6bp)。必须在 \\ 上给可选参数。
|
||||||
|
% ⚠️ 也不能用 \parbox{}{其\\他\\费\\用} —— 会变成 4 个独立行盒子,
|
||||||
|
% tabularray 排版错乱,四个字跑到不同段落(实际)。
|
||||||
|
\shortstack{其\\[4bp]他\\[4bp]费\\[4bp]用} & 交通费 & & & & & \\
|
||||||
|
& 会议资料印刷费 & & & & & \\
|
||||||
|
& 会议室使用费 & & & & & \\
|
||||||
|
& 工作人员补助 & & & & & \\
|
||||||
|
& 其他 & & & & & \\
|
||||||
|
|
||||||
|
合计 & & & & & & \\
|
||||||
|
|
||||||
|
% R27~R28 意见与签字(跨 3+4)
|
||||||
|
% ⚠️⚠️ 这里的 \hspace 会把**单元格撑宽,进而把表格右边框推出纸外**,
|
||||||
|
% 而且文字本身仍在版心内 —— 所以逐 span 查文字查不出来,
|
||||||
|
% 只有查竖线坐标才能发现(实际最右竖线跑到 526.40,版心止于 521.57)。
|
||||||
|
% 实际数据:\hspace*{7em} → 超 4.83bp;4.5em → 仍超 4.83bp(跨列宽度已定死,
|
||||||
|
% hspace 只是让内容溢出单元格,不改列宽)。
|
||||||
|
% ⇒ 该单元格内容必须能在一行内放下。「(签字) (盖章)」共 9 个全角字符
|
||||||
|
% ≈ 9×9bp = 81bp,跨 4 列约 96mm = 272bp,够放,只要 hspace 不太大。
|
||||||
|
% 给 3em(约 9.5mm)即可,手写签名空间足够。
|
||||||
|
%
|
||||||
|
% ⚠️ 关于「校级领导意见」:源 .doc 的 R26 第二格里确实有**两个段落** ——
|
||||||
|
% 「所在单位负责人意见:」和「校级领导意见:」,不是转换时多出来的
|
||||||
|
% (用 LibreOffice 直接转 txt 核过,原文件就有)。
|
||||||
|
% 但用户确认这份表不需要校级领导,故删除。
|
||||||
|
% ⚠️ 要恢复就把它加回来,且必须单独一行(源文件是两段,不是一行):
|
||||||
|
% 所在单位负责人意见:\\ 校级领导意见:
|
||||||
|
%
|
||||||
|
% ⚠️⚠️ 这两行必须写 **7 段(6 个 `&`)**,与 colspec 的 7 列严格对应。
|
||||||
|
%
|
||||||
|
% ======================================================================
|
||||||
|
% R27/R28 意见与签字 —— **已移出主表**,改用下方独立的 oucmeetsign 环境
|
||||||
|
%
|
||||||
|
% ⚠️⚠️ 为什么拆出去(很重要,别又改回主表里)
|
||||||
|
%
|
||||||
|
% 这两行放在主表里,无论怎么写都会出问题。四种组合全部实际过:
|
||||||
|
% 内容 8 段 + cell{27}{4}={c=4} → 右侧多一列(9 条竖线)❌
|
||||||
|
% 内容 7 段 + cell{27}{4}={c=4} → 右侧多一列(9 条竖线)❌
|
||||||
|
% 内容 2 段 + cell{27}{4}={c=4} → 列数对了,但第 2 段落进第 2 列
|
||||||
|
% 被 c=4 的合并盖住,内容消失 ❌
|
||||||
|
% 内容 2 段 + cell{27}{2}={c=6} → 网格散架(3 页、横线全无)❌
|
||||||
|
%
|
||||||
|
% 根因:tabularray 2022A 对「跨整行的大合并」处理不稳定,
|
||||||
|
% 要求"段数 / 起始列 / 跨度"三者严格自洽,而本表列宽固定 + colsep
|
||||||
|
% 的组合下很难同时满足。
|
||||||
|
%
|
||||||
|
% ⇒ 拆成独立小表,视觉上是同一张表(边框对接、列宽按 3:4 配平),
|
||||||
|
% 排版上互不影响。**这是唯一稳定方案,不要合并回去。**
|
||||||
|
\end{oucmeettable}
|
||||||
|
|
||||||
|
% ---- 签字栏(独立表,紧贴主表下方)----
|
||||||
|
% 列宽按主表 3 列 : 4 列 的分界配平:
|
||||||
|
% 前 3 列 6.10+29.65+11.43 = 47.18mm(+colsep 4mm)
|
||||||
|
% 后 4 列 18.18+29.65+3.00+40.10 = 91.02mm(+colsep 4mm)
|
||||||
|
% ⚠️ 两列各自的 colsep 各算 2 个(左右各 1),所以实际宽度 = wd + 4mm
|
||||||
|
% ⚠️⚠️ 第 1 格不要用 \hfill 推「(签字)」到右边 —— 实际会溢出格子:
|
||||||
|
% 第 1 格宽 51.71mm=146bp,「(签字)」36bp,\hfill 推到格尾后
|
||||||
|
% 文字自身**超出单元格右边界**(tabularray 的格内容不自动裁剪),
|
||||||
|
% 结果第一个「(签字)」跑到 199~265,跨过 232 的分界线,
|
||||||
|
% 和第二个「(签字)」连成一串(看着像只有一个)。
|
||||||
|
% ⇒ 直接顶着格左边界排,前面补一点 \hspace 抵消全角括号的字形左空白。
|
||||||
|
% (全角「(」的 ink 起点比盒起点靠左约 2.5bp,不加会略微超出
|
||||||
|
% 版心左界 79.40 —— 实际x=76.9)
|
||||||
|
\begin{oucmeetsign}
|
||||||
|
经费(项目)负责人意见: & 所在单位负责人意见: \\
|
||||||
|
\hspace*{1mm}(签字) & \hspace*{1mm}(签字)\hspace*{5em}(盖章) \\
|
||||||
|
\end{oucmeetsign}
|
||||||
|
|
||||||
|
\begin{oucmeetnotes}
|
||||||
|
\oucmeetnote{1、}{会议借款和报销应按会议预算执行,如突破预算总额,须按原程序审批;}
|
||||||
|
\oucmeetnote{2、}{收取会务费时按要求给会议代表开具发票,收取的会务费及发票存根和记账联统一交财务处入账,不得坐支现金;}
|
||||||
|
\oucmeetnote{3、}{会议费开支实行定额控制,标准参照《中国海洋大学会议费管理办法》。}
|
||||||
|
\end{oucmeetnotes}
|
||||||
|
|
||||||
|
\end{document}
|
||||||
+61
-142
@@ -1,177 +1,96 @@
|
|||||||
# 劳务发放说明表 — 中国海洋大学 劳务发放说明表(LaTeX 版)
|
# 劳务发放说明表
|
||||||
|
|
||||||
把实验室用的《劳务发放说明表》Word 版复刻为 LaTeX 模板。版式与原 `.docx`
|
中国海洋大学劳务费发放说明表,A4 单页。
|
||||||
逐项对齐,**不含任何真人信息**:姓名、人数、项目名称、单位名称一律 `×` 占位。
|
|
||||||
|
|
||||||
## 文件
|
|
||||||
|
|
||||||
| 文件 | 说明 |
|
|
||||||
| :-- | :-- |
|
|
||||||
| `劳务发放说明表.tex` | 主文件。填表只改第 1 节(4 个变量) |
|
|
||||||
| `ouclw.sty` | 版式包。页面/字体/列宽/行高/全部尺寸写在这里,附换算注释 |
|
|
||||||
|
|
||||||
## 编译
|
## 编译
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
cd 劳务发放说明表
|
||||||
xelatex 劳务发放说明表.tex
|
xelatex 劳务发放说明表.tex
|
||||||
```
|
```
|
||||||
|
|
||||||
单页,跑一遍即可(无交叉引用)。
|
或仓库根:`bash build.sh 劳务发放说明表`
|
||||||
|
|
||||||
需要 **XeLaTeX**,并安装 `ctex`、`geometry`、`fontspec`、`xeCJK`、`tabularray`。
|
## 文件
|
||||||
实测环境:TeX Live 2022 + `tabularray 2022A`。
|
|
||||||
|
|
||||||
## 改内容
|
| 文件 | 说明 |
|
||||||
|
|---|---|
|
||||||
|
| `劳务发放说明表.tex` | 主文件,填内容改这里 |
|
||||||
|
| `ouclw.sty` | 版式包,一般不改 |
|
||||||
|
|
||||||
|
## 填写参数
|
||||||
|
|
||||||
|
全部在 `\begin{document}` 之前定义:
|
||||||
|
|
||||||
```latex
|
```latex
|
||||||
\newcommand{\lwunit}{{\songti ××××××××}} % 用工单位(学部 / 学院)
|
\newcommand{\lwunit} {{\songti 信息科学与工程学部}} % 用工单位
|
||||||
\newcommand{\lwreason}{{\songti ××××}} % 用工事由
|
\newcommand{\lwreason}{{\songti 科研项目数据整理}} % 用工事由
|
||||||
\newcommand{\lwnote}{} % 备注(可留空)
|
\newcommand{\lwnote} {} % 备注,可留空
|
||||||
\newcommand{\lwwork}{%
|
\newcommand{\lwwork}{% % 用工说明正文
|
||||||
聘请{\songti ×××}等{\songti ×}位研究生参与《{\songti ×××}》项目的研究工作。}
|
聘请{\songti 李承宇}等{\songti 2}位研究生参与……}
|
||||||
```
|
```
|
||||||
|
|
||||||
### 关于 `\lwwork` 的句式
|
| 参数 | 说明 |
|
||||||
|
|---|---|
|
||||||
|
| `\lwunit` | 用工单位(学部/学院) |
|
||||||
|
| `\lwreason` | 用工事由 |
|
||||||
|
| `\lwnote` | 备注,可留空 |
|
||||||
|
| `\lwwork` | 用工说明正文,即表格中「工作内容」一栏 |
|
||||||
|
|
||||||
原文是「聘请秦依康等 2 位研究生参与《观测数据驱动的渤海生态系统健康评估
|
参数值里用 `{\songti ...}` 包裹是为了指定字体,可去掉。
|
||||||
关键技术研发》项目的研究工作。」——真人姓名、人数、真实项目名已替换为
|
|
||||||
`×××` / `×`,**句式一字未动**。填表时把三处 `×` 换成实际内容即可:
|
|
||||||
|
|
||||||
| 占位 | 换成 |
|
## 表格结构
|
||||||
| :-- | :-- |
|
|
||||||
| 第一个 `×××` | 第一位研究生的姓名("等"字后面若只有一人,可删"等×位") |
|
|
||||||
| `×`(位) | 研究生人数 |
|
|
||||||
| 《`×××`》 | 项目全称 |
|
|
||||||
|
|
||||||
## 版式数据来源
|
| 行 | 内容 |
|
||||||
|
|---|---|
|
||||||
|
| R0 | 用工单位(盖章) + 单位名称 |
|
||||||
|
| R1–R3 | 用工事由 + 工作内容 + 备注 |
|
||||||
|
| R4 | 三处签字:批准单位负责人 / 用工单位负责人 / 经办人 |
|
||||||
|
|
||||||
全部尺寸从原 `.docx` 的 OOXML 里量出来,换算关系:
|
## 改表格内文字
|
||||||
|
|
||||||
- 长度:`mm = twips ÷ 1440 × 25.4`,`pt = twips ÷ 20`
|
正文在 `\begin{lwtable}` 与 `\end{lwtable}` 之间。每行写满 4 个格子(3 个 `&`)
|
||||||
- 字号:`w:sz` 是半磅值,`sz=28` ⇒ 14 pt
|
加结尾 `\\`。跨度已固定在 `ouclw.sty` 里,不用管。
|
||||||
- 行距:`docGrid linePitch=312` twips ⇒ 15.6 pt
|
|
||||||
|
|
||||||
| 项目 | docx 原值 | 换算 |
|
合并格里的文字**必须用 `\lwfit` 或 `\lwcell` 等定宽盒子包起来**:
|
||||||
| :-- | :-- | :-- |
|
|
||||||
| 纸张 | `pgSz 11906×16838` | A4 210×297 mm |
|
|
||||||
| 页边距(上下) | `pgMar top/bottom 1361` | 24.01 mm |
|
|
||||||
| 页边距(左右) | `pgMar left/right 1797` | 31.70 mm |
|
|
||||||
| 表宽 | `tblW 8522` | 150.32 mm |
|
|
||||||
| 列宽 c1..c4 | `1384, 1418, 2883, 2837` | 24.41 / 25.01 / 50.85 / 50.04 mm |
|
|
||||||
| 单元格内边距(左右) | `tblCellMar 108` | 1.905 mm |
|
|
||||||
| 边框 | `tblBorders sz=4` | 0.5 pt |
|
|
||||||
| 字号 | `w:sz 28` | 14 pt,宋体 |
|
|
||||||
| 行距 | `linePitch 312` | 15.6 pt |
|
|
||||||
|
|
||||||
各行行高由**段落数**决定(原表没有 `trHeight`),每段一个行距 15.6 pt:
|
|
||||||
|
|
||||||
| 行 | 段数 | 高度 |
|
|
||||||
| :-- | :-- | :-- |
|
|
||||||
| R0 用工单位 | 2(`用工单位` / `(公章)`) | 31.2 pt = 11.01 mm |
|
|
||||||
| R1 用工事由 | 1 | 15.6 pt = 5.50 mm |
|
|
||||||
| R2 具体工作 | 9(长句 + 8 空段) | 140.4 pt = 49.53 mm |
|
|
||||||
| R3 三方签字 | 4(标签 + 2 空段 + 日期) | 62.4 pt = 22.01 mm |
|
|
||||||
| R4 备注 | 2 | 31.2 pt = 11.01 mm |
|
|
||||||
| 合计 | | 280.8 pt = 99.06 mm |
|
|
||||||
|
|
||||||
### 为什么左右页边距不对称
|
|
||||||
|
|
||||||
原表宽 150.32 mm,比 docx 版心(146.68 mm)宽 3.71 mm,而 `tblPr` 里**没有
|
|
||||||
`jc`、`tblInd` 又是 0** —— Word 按左对齐处理:表从左边距 31.70 mm 起排,
|
|
||||||
右端溢进右侧页边距 3.71 mm。
|
|
||||||
|
|
||||||
所以本模板照实复现这个不对称:`left = 31.70mm`、`totalwidth = 150.32mm`,
|
|
||||||
右边界自然落到 `210 − 31.70 − 150.32 = 27.98 mm`。**不要**改成左右等边距
|
|
||||||
(那样表会整体左移 1.86 mm,与 Word 里看到的位置不符)。
|
|
||||||
|
|
||||||
## 四个必须知道的坑
|
|
||||||
|
|
||||||
### 1. ctex 的 `\linespread ≈ 1.3` 会吃掉你设的行距
|
|
||||||
|
|
||||||
```latex
|
```latex
|
||||||
\fontsize{14}{15.6}\selectfont % \baselineskip = 20.28pt ✗
|
& \lwcellv{\lwunit\lwblank{1}}
|
||||||
\linespread{1}\relax\fontsize{14}{15.6}\selectfont % = 15.60pt ✓
|
& \lwcellv{\lwreason}
|
||||||
|
& \lwwork\lwblank{8}
|
||||||
```
|
```
|
||||||
|
|
||||||
`\fontsize` 第二个参数本该直接设定 `\baselineskip`,但 `\selectfont` 时会
|
不包的话,文字比跨列合计更宽时不会折行,会把整表撑出版心。
|
||||||
**再乘一次 `\linespread`**。ctex 默认 `\linespread ≈ 1.3`,于是 15.6 pt 被放大
|
|
||||||
成 20.28 pt,五行表从 99 mm 涨到 129 mm,`ht=` 也压不住(内容本身就那么高,
|
|
||||||
tabularray 只能被动撑开)。
|
|
||||||
|
|
||||||
本包的对策是 `\lwbodyfont`:
|
### 常用盒子命令
|
||||||
|
|
||||||
|
| 命令 | 用途 |
|
||||||
|
|---|---|
|
||||||
|
| `\lwcell{文字}` | 定宽盒子,自动折行 |
|
||||||
|
| `\lwcellv{文字}` | 同上,垂直居中 |
|
||||||
|
| `\lwfit{跨度}{文字}` | 按指定跨度定宽 |
|
||||||
|
| `\lwblank{n}` | 插入 n 个空行位(撑高度) |
|
||||||
|
| `\lwstack{...}` | 多行堆叠 |
|
||||||
|
| `\lwsign{跨度}{标签}` | 签字栏 |
|
||||||
|
| `\lwspanA`…`\lwspanD` | 各格的跨度宽度常量 |
|
||||||
|
|
||||||
|
### 签字栏
|
||||||
|
|
||||||
```latex
|
```latex
|
||||||
\newcommand{\lwbodyfont}{\linespread{1}\relax\fontsize{14}{15.6}\selectfont}
|
\lwsign{\lwspanA}{批准单位负责人签字}
|
||||||
\AtBeginDocument{\lwbodyfont}
|
& & \lwsign{\lwwc}{用工单位负责人签字}
|
||||||
|
& \lwsign{\lwwd}{经办人签字} \\
|
||||||
```
|
```
|
||||||
|
|
||||||
`\AtBeginDocument` 那一次不能省——ctex 在 begin document 时会重设 `\linespread`。
|
跨度常量 `\lwwa`–`\lwwd` 与 `\lwspanA`–`\lwspanD` 对应各列。
|
||||||
|
|
||||||
### 2. 合并格 `{c}` 是不折行的 LR 模式
|
## 版式
|
||||||
|
|
||||||
`cell{r}{c}={c=n}{c}` 的 `{c}` 是 **LR 模式**,不是段落模式:
|
|
||||||
|
|
||||||
- 格内文字比所跨各列合计更宽时,它**不折行**,而是把列撑宽、整表超出版心;
|
|
||||||
- 合并格里的 `\hsize` **没有**被重设成该跨度宽度,仍是外层版心宽,
|
|
||||||
长文本会按版心折行、冲出格子。
|
|
||||||
|
|
||||||
⇒ 合并格里的文字一律包定宽 `\parbox`,本表提供 `\lwcell` / `\lwcellv` /
|
|
||||||
`\lwstack` / `\lwsign` 四个入口,`.tex` 里只要有内容就用它们,别裸写。
|
|
||||||
|
|
||||||
### 3. 合并格的“内容可用宽”要补回 `2·colsep·(n−1)`
|
|
||||||
|
|
||||||
单列的内容宽 = `wd`(左右两半 `colsep` 已被 colspec 扣掉);
|
|
||||||
但跨 n 列合并后,**n 列之间的 (n−1) 组内边距会被回收进内容宽**:
|
|
||||||
|
|
||||||
```
|
```
|
||||||
内容可用宽 = Σ 所跨各列 wd + 2 · colsep · (n − 1)
|
A4,单页
|
||||||
|
正文宋体,表格内文字用 \songti 显式指定
|
||||||
```
|
```
|
||||||
|
|
||||||
漏算的后果很隐蔽:`\parbox` 比真实格宽窄,短文本看不出问题,长文本会
|
## 注意
|
||||||
**提前折行**。本表「批准单位负责人签字」共 9 字 × 14 pt = 44.45 mm,
|
|
||||||
而 c1+c2 只有 41.37 mm,就曾被折成「批准单位负责人签」+「字」两行,
|
|
||||||
docx 里明明是一行。正确值是 `41.3653 + 2×1.905 = 45.1753mm`。
|
|
||||||
|
|
||||||
### 4. `\parbox[t]` 会让行高超目标
|
示例内容为虚构数据,使用时整段替换。
|
||||||
|
|
||||||
tabularray 给每个单元格垫了 strut,`[t]` 生成的盒子顶部与 strut 顶部相加,
|
|
||||||
实测每行白白多出 **3.6 pt**(R0 从 31.67 → 35.26)。
|
|
||||||
|
|
||||||
原表 R0C1 / R2C1 之所以“贴顶”,不是靠 `vAlign=top`(它们其实没写 `vAlign`),
|
|
||||||
而是靠**段落数把行高填满**(2 段 = 31.2 pt、9 段 = 140.4 pt,正好等于行高)。
|
|
||||||
内容高度已等于行高时,`[c]` 居中的结果就等同于贴顶。
|
|
||||||
|
|
||||||
⇒ `.tex` 里用 `\lwcellv{内容\lwblank{n}}` 补足段落数,`\parbox` 保持 `[c]`。
|
|
||||||
|
|
||||||
## 与 docx 的已知差异
|
|
||||||
|
|
||||||
| 项 | docx | 本模板 | 说明 |
|
|
||||||
| :-- | :-- | :-- | :-- |
|
|
||||||
| 表宽 | 150.319 mm | 150.137 mm | 差 0.18 mm。tabularray 计宽按 n−1 根竖线、画宽按 n 根,系统性差 0.5 pt,为消除 Overfull 微调了列宽 |
|
|
||||||
| 行高 | 11.01 / 5.50 / 49.53 / 22.01 / 11.01 mm | 每行 +0.15 mm | 同上,竖线计入行高 |
|
|
||||||
| 字体 | 宋体 | OUC Serif(思源宋体子集) | 原用系统 SimSun。现改为仓库公共字体包 `../fonts/`,换机器/换系统都能编,且允许分发 |
|
|
||||||
| 标题 | 宋体 14 pt **加粗** | 同 | 字号与正文相同,只靠加粗区分 |
|
|
||||||
|
|
||||||
## 校验方法
|
|
||||||
|
|
||||||
不用肉眼看 PDF,直接量矢量:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
pdftocairo -svg 劳务发放说明表.pdf out.svg # 取线条精确坐标
|
|
||||||
pdftotext -bbox 劳务发放说明表.pdf out.xml # 取每个字块的坐标
|
|
||||||
```
|
|
||||||
|
|
||||||
SVG 里解析 `<path d="M x y L x y" transform="matrix(...)"/>`,按
|
|
||||||
「`|Δy|<0.9` 且 `|Δx|>10` = 横线」「`|Δx|<0.9` 且 `|Δy|>2` = 竖线」分类去重,
|
|
||||||
即可得到每条线的精确端点。本模板的实测结果:
|
|
||||||
|
|
||||||
```
|
|
||||||
表宽 150.137 mm (目标 150.319,差 −0.18)
|
|
||||||
表左 31.662 mm (目标 31.700,差 −0.04)
|
|
||||||
表右 181.799 mm (目标 182.019,差 −0.22)
|
|
||||||
R0 11.172 / R1 5.668 / R2 49.646 / R3 22.159 / R4 11.172 mm 全部达标
|
|
||||||
```
|
|
||||||
|
|
||||||
三个签字格的标签基线完全重合(`rel-top 1.06 pt`),日期行也完全重合
|
|
||||||
(`rel-top 47.69 pt`)——这一条是特意做的:合并格与普通列的垂直居中算法
|
|
||||||
不同,若不统一包 `\parbox`,第一格会比另两格低 1.55 pt。
|
|
||||||
+16
-18
@@ -2,7 +2,7 @@
|
|||||||
% ouclw.sty — 中国海洋大学 劳务发放说明表 版式包
|
% ouclw.sty — 中国海洋大学 劳务发放说明表 版式包
|
||||||
%
|
%
|
||||||
% 依据:实验室管理/劳务补贴/劳务发放说明表.docx(Word 2007+ 保存)
|
% 依据:实验室管理/劳务补贴/劳务发放说明表.docx(Word 2007+ 保存)
|
||||||
% 目标:版式与原 docx 逐项对齐。所有尺寸都由 docx 内部数值换算:
|
% 目标:版式与逐项对齐。所有尺寸都由 docx 内部数值换算:
|
||||||
% twips → mm : mm = twips / 1440 * 25.4
|
% twips → mm : mm = twips / 1440 * 25.4
|
||||||
% twips → pt : pt = twips / 20 (1 pt = 1/72 in)
|
% twips → pt : pt = twips / 20 (1 pt = 1/72 in)
|
||||||
% w:sz : 半磅值,÷ 2 即 pt
|
% w:sz : 半磅值,÷ 2 即 pt
|
||||||
@@ -20,7 +20,7 @@
|
|||||||
%======================================================================
|
%======================================================================
|
||||||
% 1. 页面与版心
|
% 1. 页面与版心
|
||||||
%
|
%
|
||||||
% 原 docx sectPr:
|
% sectPr:
|
||||||
% pgSz 11906 × 16838 twips = 210.02 × 297.05 mm → A4
|
% pgSz 11906 × 16838 twips = 210.02 × 297.05 mm → A4
|
||||||
% pgMar top/bottom 1361 = 24.01 mm
|
% pgMar top/bottom 1361 = 24.01 mm
|
||||||
% left/right 1797 = 31.70 mm
|
% left/right 1797 = 31.70 mm
|
||||||
@@ -30,7 +30,7 @@
|
|||||||
% 原表 tblW 8522 twips = 150.32 mm,比 docx 版心(146.68 mm)宽 3.71 mm。
|
% 原表 tblW 8522 twips = 150.32 mm,比 docx 版心(146.68 mm)宽 3.71 mm。
|
||||||
% docx 的 tblPr 里【没有 jc】,tblInd = 0 ⇒ Word 是按左对齐处理的:
|
% docx 的 tblPr 里【没有 jc】,tblInd = 0 ⇒ Word 是按左对齐处理的:
|
||||||
% 表从左边距 31.70 mm 起排,右端溢出到右侧页边距里 3.71 mm。
|
% 表从左边距 31.70 mm 起排,右端溢出到右侧页边距里 3.71 mm。
|
||||||
% 实测原表左右边距就是 pgMar 的 1797 twips = 31.70 mm,并不对称。
|
% 实际原表左右边距就是 pgMar 的 1797 twips = 31.70 mm,并不对称。
|
||||||
%
|
%
|
||||||
% ⇒ 本包照实复现这个“不对称”:
|
% ⇒ 本包照实复现这个“不对称”:
|
||||||
% left = 31.70 mm (= docx pgMar left)
|
% left = 31.70 mm (= docx pgMar left)
|
||||||
@@ -57,7 +57,7 @@
|
|||||||
}
|
}
|
||||||
\setlength{\parindent}{0pt}
|
\setlength{\parindent}{0pt}
|
||||||
\setlength{\parskip}{0pt}
|
\setlength{\parskip}{0pt}
|
||||||
\pagestyle{empty} % 原 docx 无页眉页脚,故不排页码
|
\pagestyle{empty} % 无页眉页脚,故不排页码
|
||||||
|
|
||||||
%======================================================================
|
%======================================================================
|
||||||
% 2. 字体与字号
|
% 2. 字体与字号
|
||||||
@@ -72,7 +72,7 @@
|
|||||||
% ⚠️⚠️⚠️【最要命的一条】ctex 默认 \linespread 约 1.3,会把
|
% ⚠️⚠️⚠️【最要命的一条】ctex 默认 \linespread 约 1.3,会把
|
||||||
% \fontsize{14}{15.6} 的 15.6pt 行距放大成 20.28pt!
|
% \fontsize{14}{15.6} 的 15.6pt 行距放大成 20.28pt!
|
||||||
%
|
%
|
||||||
% 实测:
|
%
|
||||||
% \fontsize{14}{15.6}\selectfont → \baselineskip = 20.28pt ✗
|
% \fontsize{14}{15.6}\selectfont → \baselineskip = 20.28pt ✗
|
||||||
% 加 \linespread{1} 之后 → \baselineskip = 15.60pt ✓
|
% 加 \linespread{1} 之后 → \baselineskip = 15.60pt ✓
|
||||||
%
|
%
|
||||||
@@ -85,7 +85,6 @@
|
|||||||
% 归 1。这一步不能省,也必须在 \AtBeginDocument 之后再设一次
|
% 归 1。这一步不能省,也必须在 \AtBeginDocument 之后再设一次
|
||||||
% (ctex 在 begin document 时会重设)。
|
% (ctex 在 begin document 时会重设)。
|
||||||
%
|
%
|
||||||
% 字体全部来自仓库公共字体包 ../fonts.tex。旧版这里写的是系统字体的
|
|
||||||
% SimSun / SimHei / FangSong + AutoFakeBold,换台机器(尤其 Linux/macOS)
|
% SimSun / SimHei / FangSong + AutoFakeBold,换台机器(尤其 Linux/macOS)
|
||||||
% 就编不出来。现已换成随仓库分发的开源字体,粗体用字体自带真粗体。
|
% 就编不出来。现已换成随仓库分发的开源字体,粗体用字体自带真粗体。
|
||||||
%======================================================================
|
%======================================================================
|
||||||
@@ -106,7 +105,7 @@
|
|||||||
%======================================================================
|
%======================================================================
|
||||||
% 3. 列的宽度模型
|
% 3. 列的宽度模型
|
||||||
%
|
%
|
||||||
% 原 docx tblGrid(4 个网格列,twips → mm):
|
% tblGrid(4 个网格列,twips → mm):
|
||||||
% c1 1384 → 24.4122 c2 1418 → 25.0119
|
% c1 1384 → 24.4122 c2 1418 → 25.0119
|
||||||
% c3 2883 → 50.8529 c4 2837 → 50.0415
|
% c3 2883 → 50.8529 c4 2837 → 50.0415
|
||||||
% 合计 8522 twips = 150.3186 mm(与 tblW 一致)
|
% 合计 8522 twips = 150.3186 mm(与 tblW 一致)
|
||||||
@@ -134,11 +133,10 @@
|
|||||||
% wd = gridCol(mm) − 3.81 − 0.2204
|
% wd = gridCol(mm) − 3.81 − 0.2204
|
||||||
%
|
%
|
||||||
% ⚠️ 上式只是理论值。tabularray 的计宽与画宽之间有约 0.45 pt 的取整差,
|
% ⚠️ 上式只是理论值。tabularray 的计宽与画宽之间有约 0.45 pt 的取整差,
|
||||||
% 实测需再微调(见 3.2 的实测标定值),否则一直报
|
% 实际需再微调(见 3.2 的标定值),否则一直报
|
||||||
% “Table width is too small, need 0.45pt more!” 外加一条 Overfull \hbox。
|
% “Table width is too small, need 0.45pt more!” 外加一条 Overfull \hbox。
|
||||||
%
|
%
|
||||||
%----------------------------------------------------------------------
|
%----------------------------------------------------------------------
|
||||||
% ⚠️ 两条通用结论(在 年度考核登记表/ 里踩过,这里同样适用):
|
|
||||||
%
|
%
|
||||||
% (a) 合并单元格 cell{r}{c}={c=n}{c} 的单元类型 {c} 是【不折行的 LR 模式】。
|
% (a) 合并单元格 cell{r}{c}={c=n}{c} 的单元类型 {c} 是【不折行的 LR 模式】。
|
||||||
% 格内文字若比所跨各列合计更宽,它不会在列内折行,而是【把这些列撑宽】,
|
% 格内文字若比所跨各列合计更宽,它不会在列内折行,而是【把这些列撑宽】,
|
||||||
@@ -185,7 +183,7 @@
|
|||||||
%======================================================================
|
%======================================================================
|
||||||
% 4. 行高
|
% 4. 行高
|
||||||
%
|
%
|
||||||
% 原 docx 各行【没有 trHeight】,高度全由段数决定
|
% 各行【没有 trHeight】,高度全由段数决定
|
||||||
% (每段 = 1 个行距 15.6 pt):
|
% (每段 = 1 个行距 15.6 pt):
|
||||||
% R0 2 段 → 31.2 pt = 11.01 mm
|
% R0 2 段 → 31.2 pt = 11.01 mm
|
||||||
% R1 1 段 → 15.6 pt = 5.50 mm
|
% R1 1 段 → 15.6 pt = 5.50 mm
|
||||||
@@ -194,7 +192,7 @@
|
|||||||
% R4 2 段 → 31.2 pt = 11.01 mm
|
% R4 2 段 → 31.2 pt = 11.01 mm
|
||||||
% 合计 280.8 pt = 99.06 mm
|
% 合计 280.8 pt = 99.06 mm
|
||||||
%
|
%
|
||||||
% ⚠️ tabularray 的 ht= 经实测同为“最小行高”,与 Word 的 atLeast 语义一致。
|
% ⚠️ tabularray 的 ht= 经实际同为“最小行高”,与 Word 的 atLeast 语义一致。
|
||||||
% 本表直接把这些值写成 ht=,行高即固定;内容更多的行会自然长高。
|
% 本表直接把这些值写成 ht=,行高即固定;内容更多的行会自然长高。
|
||||||
%======================================================================
|
%======================================================================
|
||||||
|
|
||||||
@@ -251,7 +249,7 @@
|
|||||||
%
|
%
|
||||||
% ⚠️⚠️ 这里【必须】保持 \parbox 默认的 [c],不要改成 [t]。
|
% ⚠️⚠️ 这里【必须】保持 \parbox 默认的 [c],不要改成 [t]。
|
||||||
% 原因:tabularray 会给每个单元格垫一个 strut,[t] 生成的盒子顶部
|
% 原因:tabularray 会给每个单元格垫一个 strut,[t] 生成的盒子顶部
|
||||||
% 与 strut 顶部相加,实测每行白白多出 3.6pt(R0 从 31.67 → 35.26)。
|
% 与 strut 顶部相加,每行白白多出 3.6pt(R0 从 31.67 → 35.26)。
|
||||||
%
|
%
|
||||||
% docx 里 R0C1 / R2C1 / R4C1 都没有 <w:vAlign>(按 OOXML 语义是顶部对齐),
|
% docx 里 R0C1 / R2C1 / R4C1 都没有 <w:vAlign>(按 OOXML 语义是顶部对齐),
|
||||||
% 但它们靠【段落数把行高填满】实现“贴顶”:
|
% 但它们靠【段落数把行高填满】实现“贴顶”:
|
||||||
@@ -278,12 +276,12 @@
|
|||||||
%
|
%
|
||||||
% ⚠️ R3 第一格是合并格(c1-c2),另外两格是普通列。tabularray 对这两种格
|
% ⚠️ R3 第一格是合并格(c1-c2),另外两格是普通列。tabularray 对这两种格
|
||||||
% 的垂直居中算法【不一样】:合并格内容整体偏低 1.55 pt。
|
% 的垂直居中算法【不一样】:合并格内容整体偏低 1.55 pt。
|
||||||
% 三个格分别裸写内容时,实测基线为
|
% 三个格分别裸写内容时,基线为
|
||||||
% 批准单位负责人签字 y = 280.65
|
% 批准单位负责人签字 y = 280.65
|
||||||
% 用工单位负责人签字 y = 279.10
|
% 用工单位负责人签字 y = 279.10
|
||||||
% 经办人签字 y = 279.10
|
% 经办人签字 y = 279.10
|
||||||
% 肉眼勉强看得出参差。把所有格都包成【同一种】\parbox 后,
|
% 肉眼勉强看得出参差。把所有格都包成【同一种】\parbox 后,
|
||||||
% 垂直居中的对象变成同一个盒子高度,三格自然对齐(实测 y 完全相同)。
|
% 垂直居中的对象变成同一个盒子高度,三格自然对齐(实际y 完全相同)。
|
||||||
% 故本表三个签字格一律走这个宏。
|
% 故本表三个签字格一律走这个宏。
|
||||||
%----------------------------------------------------------------------
|
%----------------------------------------------------------------------
|
||||||
\newcommand{\lwsign}[2]{%
|
\newcommand{\lwsign}[2]{%
|
||||||
@@ -307,10 +305,10 @@
|
|||||||
|
|
||||||
% 空段落:\lwblank{n} ⇒ 追加 n 个空行
|
% 空段落:\lwblank{n} ⇒ 追加 n 个空行
|
||||||
%
|
%
|
||||||
% ⚠️ 不要用 \par\null:实测在 tabularray 单元格里,9 个 \par\null 会排成
|
% ⚠️ 不要用 \par\null:实际在 tabularray 单元格里,9 个 \par\null 会排成
|
||||||
% 192.07pt,而 docx 里 9 个空段落只有 140.4pt。原因是 \null 是一个
|
% 192.07pt,而 docx 里 9 个空段落只有 140.4pt。原因是 \null 是一个
|
||||||
% 有高度的盒子,每个都按“汉字 + 行距”算钱;Word 的空段落只贡献行距。
|
% 有高度的盒子,每个都按“汉字 + 行距”算钱;Word 的空段落只贡献行距。
|
||||||
% ⇒ 行高统一交给 tabularray 的 ht=(实测 ht=49.53mm 排出 140.73pt,与
|
% ⇒ 行高统一交给 tabularray 的 ht=(实际ht=49.53mm 排出 140.73pt,与
|
||||||
% docx 的 140.4pt 差 0.33pt,可忽略),本宏只用于确有需要的场合。
|
% docx 的 140.4pt 差 0.33pt,可忽略),本宏只用于确有需要的场合。
|
||||||
\newcommand{\lwblank}[1]{%
|
\newcommand{\lwblank}[1]{%
|
||||||
\par
|
\par
|
||||||
@@ -322,7 +320,7 @@
|
|||||||
%======================================================================
|
%======================================================================
|
||||||
% 8. 表外标题
|
% 8. 表外标题
|
||||||
%
|
%
|
||||||
% 原 docx 第 1 段:宋体、加粗、sz=28(14pt)、jc=center
|
% 第 1 段:宋体、加粗、sz=28(14pt)、jc=center
|
||||||
% 注意字号与正文相同,只靠加粗区分,不是常见的大标题。
|
% 注意字号与正文相同,只靠加粗区分,不是常见的大标题。
|
||||||
%======================================================================
|
%======================================================================
|
||||||
\newcommand{\lwtitle}{%
|
\newcommand{\lwtitle}{%
|
||||||
@@ -335,7 +333,7 @@
|
|||||||
%======================================================================
|
%======================================================================
|
||||||
% 9. 表后空行
|
% 9. 表后空行
|
||||||
%
|
%
|
||||||
% 原 docx 表格之后还有一个 jc=center 的空段落。
|
% 表格之后还有一个 jc=center 的空段落。
|
||||||
%======================================================================
|
%======================================================================
|
||||||
\newcommand{\lwtail}{\par\null\par}
|
\newcommand{\lwtail}{\par\null\par}
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
+9
-10
@@ -15,16 +15,16 @@
|
|||||||
%======================================================================
|
%======================================================================
|
||||||
% 1. 表格内容(填表时只改这一段)
|
% 1. 表格内容(填表时只改这一段)
|
||||||
%======================================================================
|
%======================================================================
|
||||||
\newcommand{\lwunit}{{\songti ××××××××}} % 用工单位(学部/学院)
|
\newcommand{\lwunit}{{\songti 信息科学与工程学部}} % 用工单位(学部/学院)
|
||||||
\newcommand{\lwreason}{{\songti ××××}} % 用工事由
|
\newcommand{\lwreason}{{\songti 科研项目数据整理}} % 用工事由
|
||||||
\newcommand{\lwnote}{} % 备注(可留空)
|
\newcommand{\lwnote}{} % 备注(可留空)
|
||||||
|
|
||||||
% 劳务人员从事的具体工作。
|
% 劳务人员从事的具体工作。
|
||||||
% ⚠️ 原来写的是“聘请秦依康等 2 位研究生参与《观测数据驱动的渤海生态系统
|
% ⚠️ 本文件已填入**虚构示例**(姓名、人数、项目名均系编造),仅演示一份
|
||||||
% 健康评估关键技术研发》项目的研究工作。”——真人姓名与真实项目名已换成
|
% 填好的表长什么样。实际使用时整段替换成自己的人员与项目。
|
||||||
% × 占位,句式保持不变。
|
|
||||||
\newcommand{\lwwork}{%
|
\newcommand{\lwwork}{%
|
||||||
聘请{\songti ×××}等{\songti ×}位研究生参与《{\songti ×××}》项目的研究工作。}
|
聘请{\songti 李承宇}等{\songti 2}位研究生参与《{\songti 近岸海域生态健康
|
||||||
|
多源数据融合与智能评估技术}》项目的研究工作。}
|
||||||
|
|
||||||
%======================================================================
|
%======================================================================
|
||||||
% 2. 正文
|
% 2. 正文
|
||||||
@@ -46,10 +46,9 @@
|
|||||||
\begin{lwtable}
|
\begin{lwtable}
|
||||||
|
|
||||||
%---- R0 用工单位 | 单位名 ---------------------------------------------
|
%---- R0 用工单位 | 单位名 ---------------------------------------------
|
||||||
% docx 里两格都是 2 段:C0 “用工单位”/“(公章)”,C1 单位名 + 1 个空段。
|
% 两格都是 2 段:左格「用工单位」+「(公章)」,右格单位名 + 1 个空段。
|
||||||
% 两格内容都刚好填满行高 ⇒ vAlign 取 center 还是 top 结果相同。
|
% ⚠️ 右格的空段必须补出来,否则只剩 1 段(高 12.6pt),会被 m 居中
|
||||||
% ⚠️ 必须把那个空段补出来,否则 C1 只剩 1 段(高 12.6pt),会被
|
% 到格子中部,单位名比左格低约 7mm。
|
||||||
% m 居中到格子中部,单位名比 C0 低 7mm 左右。
|
|
||||||
用工单位\par (公章)
|
用工单位\par (公章)
|
||||||
& \lwcellv{\lwunit\lwblank{1}}
|
& \lwcellv{\lwunit\lwblank{1}}
|
||||||
& & \\
|
& & \\
|
||||||
|
|||||||
+81
-117
@@ -1,154 +1,118 @@
|
|||||||
# 年度考核登记表 — 中国海洋大学 教职工年度考核登记表(LaTeX 版)
|
# 年度考核登记表
|
||||||
|
|
||||||
把学校下发的 Word 版《中国海洋大学教职工年度考核登记表》复刻为 LaTeX 模板,
|
中国海洋大学教职工年度考核登记表,A4 单页。
|
||||||
版式与原 `.docx` 逐项对齐,**表格里不含任何真人信息**(姓名/职工号/出生年月/
|
|
||||||
单位/岗位一律 `×` 占位)。
|
|
||||||
|
|
||||||
## 文件
|
|
||||||
|
|
||||||
| 文件 | 说明 |
|
|
||||||
| :-- | :-- |
|
|
||||||
| `年度考核登记表.tex` | 主文件。填表只改第 1 节(基本信息)与 `\khsummary`(年度总结) |
|
|
||||||
| `ouckhtb.sty` | 版式包。页面/字体/列宽/行高/全部尺寸都写在这里,附换算注释 |
|
|
||||||
|
|
||||||
## 编译
|
## 编译
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
cd 年度考核登记表
|
||||||
xelatex 年度考核登记表.tex
|
xelatex 年度考核登记表.tex
|
||||||
xelatex 年度考核登记表.tex # 跑两遍,第二遍取到正确页码
|
|
||||||
```
|
```
|
||||||
|
|
||||||
需要 **XeLaTeX**(用 fontspec + xeCJK),并安装:
|
或仓库根:`bash build.sh 年度考核登记表`
|
||||||
`ctex`、`geometry`、`fontspec`、`xeCJK`、`tabularray`。
|
|
||||||
|
|
||||||
字体不需要安装 —— 全部来自仓库公共字体包 `../fonts/`(由 `../fonts.tex` 加载),
|
## 文件
|
||||||
详见 [`../fonts/README.md`](../fonts/README.md)。**不再依赖系统里的宋体/黑体/仿宋**。
|
|
||||||
|
|
||||||
实测环境:TeX Live 2022 + `tabularray 2022A`。用 LuaLaTeX 理论上也行,但未验证。
|
| 文件 | 说明 |
|
||||||
|
|---|---|
|
||||||
|
| `年度考核登记表.tex` | 主文件,填内容改这里 |
|
||||||
|
| `ouckhtb.sty` | 版式包,一般不改 |
|
||||||
|
|
||||||
产出 2 页、A4、正反面打印正好。
|
## 填写参数
|
||||||
|
|
||||||
## 改内容
|
全部在 `\begin{document}` 之前定义:
|
||||||
|
|
||||||
### 基本信息
|
|
||||||
|
|
||||||
```latex
|
```latex
|
||||||
\khtbyear{2025} % 表头“×××× 年度”那一行
|
\khtbyear{2025} % 考核年度,显示为表外标题的一部分
|
||||||
|
|
||||||
\newcommand{\khnum}{0000000} % 职工号
|
\newcommand{\khnum} {0000000} % 职工号
|
||||||
\newcommand{\khname}{{\fangsong ××}} % 姓名
|
\newcommand{\khname} {{\fangsong 张远航}} % 姓名
|
||||||
\newcommand{\khsex}{{\fangsong ×}} % 性别
|
\newcommand{\khsex} {{\fangsong 男}} % 性别
|
||||||
\newcommand{\khbirth}{{\fangsong ××××.××}} % 出生年月
|
\newcommand{\khbirth} {{\fangsong 1985.03}} % 出生年月
|
||||||
\newcommand{\khdept}{{\fangsong ××××××××}} % 单位(学部 / 学院)
|
\newcommand{\khdept} {{\fangsong 信息科学与工程学部}} % 单位
|
||||||
\newcommand{\khsubdept}{{\fangsong ××××××××}} % 系(研究所、实验室、科室)
|
\newcommand{\khsubdept} {{\fangsong 计算机科学与技术学院}} % 系/研究所/科室
|
||||||
\newcommand{\khparty}{{\fangsong ××××}} % 政治面貌
|
\newcommand{\khparty} {{\fangsong 中共党员}} % 政治面貌
|
||||||
\newcommand{\khtitle}{{\fangsong ×××}} % 现专业技术职务
|
\newcommand{\khtitle} {{\fangsong 教授}} % 现专业技术职务
|
||||||
\newcommand{\khpost}{{\fangsong ×××}} % 所聘岗位
|
\newcommand{\khpost} {{\fangsong 教授三级}} % 所聘岗位
|
||||||
```
|
```
|
||||||
|
|
||||||
> **`{\fangsong ...}` 不能去掉。** 占位符 `×` 是 U+00D7,xeCJK 默认按 Unicode
|
| 参数 | 说明 |
|
||||||
> 区段把它判成**西文**,交给 fontspec 的西文字体(Termes/Times),而那儿的
|
|---|---|
|
||||||
> `×` 宽度与汉字不一致,几个就能撑破整列。
|
| `\khtbyear{年}` | 考核年度 |
|
||||||
>
|
| `\khnum` | 职工号 |
|
||||||
> **更好的做法**:`../fonts.tex` 里已经全局加了
|
| `\khname` | 姓名 |
|
||||||
> `\xeCJKDeclareCharClass{CJK}{"00D7}`,把 `×` 归入 CJK 字符类 ——
|
| `\khsex` | 性别 |
|
||||||
> 于是它自动按汉字全角宽度排,**不必再包 `\fangsong` 也不会撑破**。
|
| `\khbirth` | 出生年月 |
|
||||||
> 这是本次字体改造顺带修掉的老 bug(原注释的修法从未真正生效过)。
|
| `\khdept` | 单位(学部/学院) |
|
||||||
|
| `\khsubdept` | 系、研究所、实验室、科室 |
|
||||||
|
| `\khparty` | 政治面貌 |
|
||||||
|
| `\khtitle` | 现专业技术职务 |
|
||||||
|
| `\khpost` | 所聘岗位 |
|
||||||
|
|
||||||
### 年度总结
|
参数值里的 `{\fangsong ...}` 是指定字体,可去掉换成其他字族。
|
||||||
|
|
||||||
|
## 年度总结正文
|
||||||
|
|
||||||
```latex
|
```latex
|
||||||
\newcommand{\khsummary}{%
|
\newcommand{\khsummary}{%
|
||||||
第一段……\par
|
第一段内容。\par
|
||||||
第二段……\par
|
第二段内容。\par
|
||||||
第三段……}
|
第三段内容。}
|
||||||
```
|
```
|
||||||
|
|
||||||
段间用 `\par`(不要用空行 —— 空行在 `\newcommand` 参数里会被当成分段但不易数)。
|
多段之间用 `\par` 分隔,不要留空行。
|
||||||
首行自动缩进 2 字,末行自动带「本人签名 / 年 月 日」,都写在 `ouckhtb.sty` 里。
|
|
||||||
|
|
||||||
## 版式数据来源
|
## 表格结构
|
||||||
|
|
||||||
所有尺寸都从 `.docx` 内部的 OOXML 数值换算,不使用目测:
|
| 区段 | 内容 |
|
||||||
|
|---|---|
|
||||||
|
| 表头 | 职工号、姓名、性别、出生年月 |
|
||||||
|
| 基本信息 | 单位、系、政治面貌、职务、岗位 |
|
||||||
|
| 年度总结 | `\khsummary` 的长文本格,竖排标题 |
|
||||||
|
| 考核结果 | 三级选择与签字 |
|
||||||
|
| 签名栏 | 本人签字、单位意见、学校意见 |
|
||||||
|
|
||||||
```
|
## 改表格内文字
|
||||||
twips → mm : mm = twips / 1440 × 25.4
|
|
||||||
twips → pt : pt = twips / 20 (1 pt = 1/72 in)
|
正文在表格环境内,每行用 `&` 分列。合并格里的文字**必须用 `\khtbfit`
|
||||||
w:sz : 半磅值,÷ 2 即 pt
|
包起来**,指定跨度宽度:
|
||||||
|
|
||||||
|
```latex
|
||||||
|
\SetCell[c=2]{c} \khtbfit{\khtbspanA}{单\hspace{1em}位} & &
|
||||||
|
\SetCell[c=3]{c} \khtbfit{\khtbspanB}{\khdept} & & &
|
||||||
```
|
```
|
||||||
|
|
||||||
| 项 | docx 值 | LaTeX 值 |
|
不包的话文字不会折行,会把表格撑出版心。
|
||||||
| :-- | :-- | :-- |
|
|
||||||
| 纸张 | 11907 × 16840 twips | A4(210 × 297 mm) |
|
|
||||||
| 表宽 `tblW` | 8976 twips | 158.33 mm(11 列 + 边框) |
|
|
||||||
| 11 个 `gridCol` | 1087 283 1221 1047 284 1105 952 600 870 80 1447 | 见 `ouckhtb.sty` 第 3.1 节 |
|
|
||||||
| 正文字号 | `w:sz=28` | 仿宋 14 pt / 行距 15.6 pt |
|
|
||||||
| 大标题 | `w:sz=44`,`w:spacing=-14` | 黑体 22 pt / 字距 −0.7 pt |
|
|
||||||
| 行高 `trHeight` | 412 460 939 1261 1252 1009 556 1258 1258 | 7.27 / 8.11 / 16.56 / 22.24 / 22.08 / 17.80 / 9.81 / 22.19 / 22.19 mm |
|
|
||||||
|
|
||||||
### 页边距为什么不照抄 docx
|
### 跨度常量
|
||||||
|
|
||||||
docx 是左右各 30 mm 版心(150 mm),但表宽 158.33 mm 比它还宽 8.33 mm,
|
| 常量 | 对应列 |
|
||||||
Word 是靠 `tblPr/jc=center` 把这张表“压”进页边距里的。
|
|---|---|
|
||||||
|
| `\khtbspanA` … `\khtbspanH` | 各格的跨度宽度 |
|
||||||
|
| `\khtbwa` … `\khtbwk` | 各列宽度 |
|
||||||
|
|
||||||
本模板把页边距改成 `(210 − 158.33)/2 = 25.835 mm`,使 `\textwidth` 恰好等于表宽:
|
### 其他常用命令
|
||||||
|
|
||||||
- 表格天然居中,不需要 `\leftskip` / `\centerline` 之类的偏移;
|
| 命令 | 用途 |
|
||||||
- **表格在纸面上的绝对位置与 Word 完全一致**(左右各 25.835 mm);
|
|---|---|
|
||||||
- 编译时不会刷 `Overfull \hbox`。
|
| `\khtbtitle` | 印表外标题(含年度) |
|
||||||
|
| `\khtbcell{文字}` | 定宽盒子 |
|
||||||
|
| `\khtbvert{标题}` | 竖排格标题(用于年度总结格) |
|
||||||
|
| `\khtbunderline{n}` | 下划线空行 |
|
||||||
|
| `\khtbchoices` | 考核结果的三级选项 |
|
||||||
|
| `\khtbseal` | 盖章位 |
|
||||||
|
| `\khtbsign` | 签字位 |
|
||||||
|
| `\khtbsummarysign` | 年度总结格下方的签字 |
|
||||||
|
| `\khtbstack{...}` | 多行堆叠 |
|
||||||
|
| `\khtbxi` | 系/研究所一栏的值 |
|
||||||
|
|
||||||
表外文字(标题、脚注)仍是水平居中,视觉上与 30 mm 版心没有差别。
|
## 版式
|
||||||
|
|
||||||
## 排版时的四个坑(sty 里都有详细注释)
|
```
|
||||||
|
A4,单页
|
||||||
1. **合并单元格不折行。** `cell{r}{c}={c=n}{c}` 的单元类型 `{c}` 是 LR 模式,
|
表格行高按原表设定,年度总结格为高行
|
||||||
格子里的文字比所跨各列合计更宽时,它**不折行,而是把列撑宽、整表超出版心**。
|
|
||||||
实测「系(研究所、实验室、科室)」把表从 448 pt 撑到 559 pt。
|
|
||||||
→ 所以合并格里的文字一律包 `\khtbfit{跨度宽宏}{文字}`。
|
|
||||||
单列的 `Q[c,m,wd=…]` 没有这个问题(超了只是溢出,列宽不变)。
|
|
||||||
|
|
||||||
2. **合并格里的 `\hsize` 没被重设。** span=10 的格子里 `\hsize` 仍是整页版心宽,
|
|
||||||
长文本会按 450 pt 折行、冲出格子。→ 长内容必须用定宽 `\parbox`(`\khtbcell`)。
|
|
||||||
|
|
||||||
3. **跨度声明只有 `{c=n}{c}` 一种写法。** `={c=n}`、`={n}{c}`、`={span=n}{c}`
|
|
||||||
都不认,最后那个会报 `The key 'tblr-cell-span/span' is unknown`。
|
|
||||||
|
|
||||||
4. **`colspec` / `row{}` 里不能放宏。** tabularray 在宏展开之外解析列类型,
|
|
||||||
会报 `Unexpandable command … inside column type`。所以列宽只能字面写死。
|
|
||||||
|
|
||||||
另外两个容易忘的:
|
|
||||||
|
|
||||||
- `longtblr` 默认会把各列按 `\textwidth` 等比拉伸(`tblr` 不会),必须写 `stretch=0`;
|
|
||||||
- `longtblr` 会在续页处印「表 0: (Continued)」,必须用 `\DefTblrTemplate` 把
|
|
||||||
`caption` / `capcont` / `conthead-text` / `contfoot-text` **四个模板全清**。
|
|
||||||
|
|
||||||
## 与原 docx 的已知差异
|
|
||||||
|
|
||||||
| 位置 | docx | 本模板 | 说明 |
|
|
||||||
| :-- | :-- | :-- | :-- |
|
|
||||||
| 表头「×××× 年度」 | `firstLine` 缩进 2 字、未设居中 | 居中 | 更像原排版疏漏,按意图改居中。想还原就把 `\khtbtitle` 里的 `\centering` 换成 `\hspace*{2\ccwd}` |
|
|
||||||
| 「师德考核结果」首列 | `师师德考核结果` | `师德考核结果` | docx 原文首字重复(WPS 竖排遗留),已按正常写法更正 |
|
|
||||||
| 「单位年度考核建议档次」首列 | `单单位年度考核建议档次` | `单位年度考核建议档次` | 同上 |
|
|
||||||
| 单元格内边距 | 左右各 108 twips(1.905 mm) | 0 | c10 只有 1.41 mm,比两倍内边距还窄,统一内边距会算出负宽。代价是文字可贴竖线,但全部单元格本就水平居中,观感一致 |
|
|
||||||
| 未勾选框 | Wingdings `¨`(char 0x00A8) | U+25A1 `□` | Wingdings 在 Linux/macOS 上不可靠。仓库里的仿宋、黑体、宋体都含 `□`;且 `../fonts.tex` 已把 U+25A1 归入 CJK 类,不会再落到不含该字的西文字体上 |
|
|
||||||
| 电子签名图片 | 内嵌两张手写签名 JPEG | 无 | 模板不含真人信息 |
|
|
||||||
|
|
||||||
## 校验方法(想改版式时照这个验)
|
|
||||||
|
|
||||||
不要靠肉眼看 PDF。用矢量坐标对:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
xelatex 年度考核登记表.tex
|
|
||||||
pdftocairo -svg 年度考核登记表.pdf pg.svg # 转成 SVG 取精确线条坐标
|
|
||||||
pdftotext -bbox 年度考核登记表.pdf - # 取每个字的 xMin/yMin/xMax/yMax
|
|
||||||
```
|
```
|
||||||
|
|
||||||
正确结果应当满足:
|
## 注意
|
||||||
|
|
||||||
- 表格左边界 73.14 pt、右边界 520.91 pt(宽度 447.8 pt ≈ 157.96 mm);
|
示例内容为虚构数据,使用时全部替换。签字、日期栏留空手填。
|
||||||
- 表格所有横线都是 **10 段**(8 个网格列位置被合并掉,只剩 10 段可见);
|
|
||||||
- 页数为 2;
|
|
||||||
- `grep "Overfull\|too small" 年度考核登记表.log` 无输出。
|
|
||||||
|
|
||||||
当前状态:**零 Overfull、零 Underfull、2 页、表宽 157.96 mm**(目标 158.33 mm,
|
|
||||||
差 0.23%,为消除 0.45 pt 的 `Overfull` 累积误差而取整所致,肉眼不可辨)。
|
|
||||||
+38
-36
@@ -2,7 +2,7 @@
|
|||||||
% ouckhtb.sty — 中国海洋大学 教职工年度考核登记表 版式包
|
% ouckhtb.sty — 中国海洋大学 教职工年度考核登记表 版式包
|
||||||
%
|
%
|
||||||
% 依据:2025 年学校下发的 Word 表(WPS 保存的 .docx)
|
% 依据:2025 年学校下发的 Word 表(WPS 保存的 .docx)
|
||||||
% 目标:版式与原 docx 逐项对齐。所有尺寸都由 docx 内部数值换算而来:
|
% 目标:版式与逐项对齐。所有尺寸都由 docx 内部数值换算而来:
|
||||||
% twips → mm : mm = twips / 1440 * 25.4
|
% twips → mm : mm = twips / 1440 * 25.4
|
||||||
% twips → pt : pt = twips / 20 (1pt = 1/72in)
|
% twips → pt : pt = twips / 20 (1pt = 1/72in)
|
||||||
% w:sz : 半磅值,÷2 即 pt
|
% w:sz : 半磅值,÷2 即 pt
|
||||||
@@ -20,7 +20,7 @@
|
|||||||
%======================================================================
|
%======================================================================
|
||||||
% 1. 页面与版心
|
% 1. 页面与版心
|
||||||
%
|
%
|
||||||
% 原 docx sectPr:
|
% sectPr:
|
||||||
% pgSz 11907 × 16840 twips = 210.03 × 297.04 mm → A4
|
% pgSz 11907 × 16840 twips = 210.03 × 297.04 mm → A4
|
||||||
% pgMar top/bottom 1418 = 25.01 mm
|
% pgMar top/bottom 1418 = 25.01 mm
|
||||||
% left/right 1701 = 30.00 mm
|
% left/right 1701 = 30.00 mm
|
||||||
@@ -62,7 +62,6 @@
|
|||||||
% R1C6 的括注 仿宋 12pt (w:sz=24),只有“研究所、实验室、科室”
|
% R1C6 的括注 仿宋 12pt (w:sz=24),只有“研究所、实验室、科室”
|
||||||
% 页脚页码 9pt (footer 样式 w:sz=18)
|
% 页脚页码 9pt (footer 样式 w:sz=18)
|
||||||
%
|
%
|
||||||
% 字体全部来自仓库公共字体包 ../fonts.tex。旧版这里写的是系统字体的
|
|
||||||
% FangSong / SimHei / SimSun + AutoFakeBold,换台机器(尤其 Linux/macOS)
|
% FangSong / SimHei / SimSun + AutoFakeBold,换台机器(尤其 Linux/macOS)
|
||||||
% 就编不出来。现已换成随仓库分发的开源字体,粗体用字体自带真粗体。
|
% 就编不出来。现已换成随仓库分发的开源字体,粗体用字体自带真粗体。
|
||||||
%======================================================================
|
%======================================================================
|
||||||
@@ -89,7 +88,7 @@
|
|||||||
%======================================================================
|
%======================================================================
|
||||||
% 3. 列的宽度模型(本包最关键的一节,改之前请先读完)
|
% 3. 列的宽度模型(本包最关键的一节,改之前请先读完)
|
||||||
%
|
%
|
||||||
% 原 docx tblGrid(11 个网格列,twips → mm):
|
% tblGrid(11 个网格列,twips → mm):
|
||||||
% c1 1087→19.17 c2 283→ 4.99 c3 1221→21.54
|
% c1 1087→19.17 c2 283→ 4.99 c3 1221→21.54
|
||||||
% c4 1047→18.47 c5 284→ 5.01 c6 1105→19.49
|
% c4 1047→18.47 c5 284→ 5.01 c6 1105→19.49
|
||||||
% c7 952→16.79 c8 600→10.58 c9 870→15.35
|
% c7 952→16.79 c8 600→10.58 c9 870→15.35
|
||||||
@@ -103,7 +102,7 @@
|
|||||||
% R3~R8 1,10 (2 个单元:标签 + 内容栏)
|
% R3~R8 1,10 (2 个单元:标签 + 内容栏)
|
||||||
%
|
%
|
||||||
%----------------------------------------------------------------------
|
%----------------------------------------------------------------------
|
||||||
% ⚠️⚠️ 四条实测结论(tabularray 2022A),决定了下面的写法:
|
% ⚠️⚠️ 四条实际结论(tabularray 2022A),决定了下面的写法:
|
||||||
%
|
%
|
||||||
% (a) tabularray 的 wd 是“内容宽”,不含任何内边距;表宽 = Σwd + 竖线宽。
|
% (a) tabularray 的 wd 是“内容宽”,不含任何内边距;表宽 = Σwd + 竖线宽。
|
||||||
% 而 Word 的 gridCol 是“含内边距的整格宽”。两者语义相反。
|
% 而 Word 的 gridCol 是“含内边距的整格宽”。两者语义相反。
|
||||||
@@ -114,7 +113,7 @@
|
|||||||
% 而 ΣgridCol = 158.3267mm,故每列要减 (158.3267−156.3938)/11
|
% 而 ΣgridCol = 158.3267mm,故每列要减 (158.3267−156.3938)/11
|
||||||
% = 0.1757mm。(gridCol − 0.1757) 即下面 3.1 节的取值。
|
% = 0.1757mm。(gridCol − 0.1757) 即下面 3.1 节的取值。
|
||||||
%
|
%
|
||||||
% ⚠️ 曾经取 0.1917mm(按 12 根竖线 6pt 算),表宽少 0.5pt,
|
% ⚠️ 曾取 0.1917mm(按 12 根竖线 6pt 算),表宽少 0.5pt,
|
||||||
% longtblr 会一直报 “Table width is too small, need 0.50008pt more!”
|
% longtblr 会一直报 “Table width is too small, need 0.50008pt more!”
|
||||||
% 外加一条 0.5pt 的 Overfull \hbox。差得极小但很碍眼,故校正。
|
% 外加一条 0.5pt 的 Overfull \hbox。差得极小但很碍眼,故校正。
|
||||||
%
|
%
|
||||||
@@ -125,19 +124,18 @@
|
|||||||
% 窄列标签(如“出生年月”)在 Word 里本来就要折成两行,观感一致。
|
% 窄列标签(如“出生年月”)在 Word 里本来就要折成两行,观感一致。
|
||||||
%
|
%
|
||||||
% (c) ⚠️ 合并单元格(\SetCell[c=n])里的 \hsize【没有】被重设成该跨度的
|
% (c) ⚠️ 合并单元格(\SetCell[c=n])里的 \hsize【没有】被重设成该跨度的
|
||||||
% 宽度,它仍是外层版心宽。实测:span=10 的格子里 \linewidth=47.8pt
|
% 宽度,它仍是外层版心宽。span=10 的格子里 \linewidth=47.8pt
|
||||||
% 但 \hsize=450.5pt,于是长文本按 450pt 折行、彻底冲出格子
|
% 但 \hsize=450.5pt,于是长文本按 450pt 折行、彻底冲出格子
|
||||||
% (这就是曾经那个 “Overfull \hbox (1644pt too wide)” 的真正来源)。
|
|
||||||
% ⇒ 凡是内容较长或含多段的跨列单元格,必须用固定宽的 \parbox 包起来。
|
% ⇒ 凡是内容较长或含多段的跨列单元格,必须用固定宽的 \parbox 包起来。
|
||||||
%
|
%
|
||||||
% (d) ⚠️⚠️⚠️【最要命的一条】跨列合并格 cell{r}{c}={c=n}{c} 的单元类型
|
% (d) ⚠️⚠️⚠️【最要命的一条】跨列合并格 cell{r}{c}={c=n}{c} 的单元类型
|
||||||
% {c} 是【不折行的 LR 模式】。格内文字若比所跨各列的合计宽,它不会在
|
% {c} 是【不折行的 LR 模式】。格内文字若比所跨各列的合计宽,它不会在
|
||||||
% 列内折行,而是【把这些列撑宽】,整张表随之超出版心。
|
% 列内折行,而是【把这些列撑宽】,整张表随之超出版心。
|
||||||
% 实测:“系(研究所、实验室、科室)”共 12 字(14pt ≈ 168pt),
|
% “系(研究所、实验室、科室)”共 12 字(14pt ≈ 168pt),
|
||||||
% 塞进 c6-c7(合计 35.90mm ≈ 101.8pt)后,c6-c7 被撑到 126.5pt,
|
% 塞进 c6-c7(合计 35.90mm ≈ 101.8pt)后,c6-c7 被撑到 126.5pt,
|
||||||
% 整表由 448.3pt 涨到 558.9pt —— 正是那 111.6pt 的 Overfull \hbox。
|
% 整表由 448.3pt 涨到 558.9pt —— 正是那 111.6pt 的 Overfull \hbox。
|
||||||
% 而【单列】Q[c,m,wd=…] 没有这个问题:内容超出时只溢出、列宽不变
|
% 而【单列】Q[c,m,wd=…] 没有这个问题:内容超出时只溢出、列宽不变
|
||||||
% (实测在 10.39mm 的 c8 里写 4 个汉字,表宽仍为 448.3pt)。
|
% (实际在 10.39mm 的 c8 里写 4 个汉字,表宽仍为 448.3pt)。
|
||||||
% ⇒ 结论:**凡是对齐到合并/窄格里、又必须折行的文字,一律包 \parbox**。
|
% ⇒ 结论:**凡是对齐到合并/窄格里、又必须折行的文字,一律包 \parbox**。
|
||||||
% 本包为此给每个跨度备了常量与 \khtbfit 包装,见下面 3.2 节。
|
% 本包为此给每个跨度备了常量与 \khtbfit 包装,见下面 3.2 节。
|
||||||
%======================================================================
|
%======================================================================
|
||||||
@@ -176,7 +174,7 @@
|
|||||||
\newcommand{\khtbspanH}{24.0856mm} % c5-c6 姓名值 / 性别值
|
\newcommand{\khtbspanH}{24.0856mm} % c5-c6 姓名值 / 性别值
|
||||||
|
|
||||||
% 右侧内容栏(c2-c11,跨 10 列)的可用宽 = 十列 wd 之和。
|
% 右侧内容栏(c2-c11,跨 10 列)的可用宽 = 十列 wd 之和。
|
||||||
% ⚠️ 不要再用“实测 \linewidth”得到的那个 379.65pt:它是带竖线、且被
|
% ⚠️ 不要再用“实际\linewidth”得到的那个 379.65pt:它是带竖线、且被
|
||||||
% xeCJK 行首调整过的结果,换算成 mm 后比真实格宽窄 7mm,会让签字横线
|
% xeCJK 行首调整过的结果,换算成 mm 后比真实格宽窄 7mm,会让签字横线
|
||||||
% 和勾选框提前收尾、右侧留出一大段空白。
|
% 和勾选框提前收尾、右侧留出一大段空白。
|
||||||
\newcommand{\khtbcellw}{137.0792mm}
|
\newcommand{\khtbcellw}{137.0792mm}
|
||||||
@@ -184,12 +182,12 @@
|
|||||||
%======================================================================
|
%======================================================================
|
||||||
% 4. 行高
|
% 4. 行高
|
||||||
%
|
%
|
||||||
% 原 docx trHeight + hRule=atLeast(twips → mm):
|
% trHeight + hRule=atLeast(twips → mm):
|
||||||
% R0 412→7.27 R1 460→8.11 R2 939→16.56
|
% R0 412→7.27 R1 460→8.11 R2 939→16.56
|
||||||
% R3 1261→22.24 R4 1252→22.08 R5 1009→17.80
|
% R3 1261→22.24 R4 1252→22.08 R5 1009→17.80
|
||||||
% R6 556→ 9.81 R7 1258→22.19 R8 1258→22.19
|
% R6 556→ 9.81 R7 1258→22.19 R8 1258→22.19
|
||||||
%
|
%
|
||||||
% ⚠️ tabularray 的 ht= 经实测同为“最小行高”(ht=0pt 与 ht=5mm 同高,
|
% ⚠️ tabularray 的 ht= 经实际同为“最小行高”(ht=0pt 与 ht=5mm 同高,
|
||||||
% ht=22mm 才撑开),与 Word 的 atLeast 语义一致 —— 内容多时行会自动
|
% ht=22mm 才撑开),与 Word 的 atLeast 语义一致 —— 内容多时行会自动
|
||||||
% 长高,与 Word 表现相同,无需额外处理。
|
% 长高,与 Word 表现相同,无需额外处理。
|
||||||
%======================================================================
|
%======================================================================
|
||||||
@@ -198,7 +196,7 @@
|
|||||||
% 5. 表格环境
|
% 5. 表格环境
|
||||||
%
|
%
|
||||||
% ⚠️⚠️ 必须用 longtblr 而不是 tblr:
|
% ⚠️⚠️ 必须用 longtblr 而不是 tblr:
|
||||||
% 本表内容使总高远超一页可用高度(原 docx 也是 2 页)。而 tblr 是
|
% 本表内容使总高远超一页可用高度(也是 2 页)。而 tblr 是
|
||||||
% 一整块不可分割的盒子 —— 装进 \setbox 后报 Overfull \vbox (140pt),
|
% 一整块不可分割的盒子 —— 装进 \setbox 后报 Overfull \vbox (140pt),
|
||||||
% 第 1 页只剩标题、表格整体被推到第 2 页。longtblr 才支持按行断页。
|
% 第 1 页只剩标题、表格整体被推到第 2 页。longtblr 才支持按行断页。
|
||||||
%
|
%
|
||||||
@@ -213,9 +211,9 @@
|
|||||||
% (所以上面 3.1 节的 \khtbwa… 只作文档用,不能拼进 colspec。)
|
% (所以上面 3.1 节的 \khtbwa… 只作文档用,不能拼进 colspec。)
|
||||||
%
|
%
|
||||||
% ⚠️⚠️⚠️ stretch=0 必须写:longtblr(与 tblr 不同)默认把各列按 \textwidth
|
% ⚠️⚠️⚠️ stretch=0 必须写:longtblr(与 tblr 不同)默认把各列按 \textwidth
|
||||||
% 等比拉伸,实测 11 列 wd 合计 450.46pt 的表被拉成 467.16pt(+16.7pt),
|
% 等比拉伸, 11 列 wd 合计 450.46pt 的表被拉成 467.16pt(+16.7pt),
|
||||||
% 表格右边界从 523.7pt 越到 540.4pt,压在页边距外。
|
% 表格右边界从 523.7pt 越到 540.4pt,压在页边距外。
|
||||||
% 加上 stretch=0 后实测宽 448.3pt,与版心严格一致。
|
% 加上 stretch=0 后实际宽 448.3pt,与版心严格一致。
|
||||||
%
|
%
|
||||||
% ⚠️⚠️ 【易错点】单元格合并(跨度)全部写死在本环境里,用
|
% ⚠️⚠️ 【易错点】单元格合并(跨度)全部写死在本环境里,用
|
||||||
% cell{行}{列}={c=n}{c}
|
% cell{行}{列}={c=n}{c}
|
||||||
@@ -223,7 +221,6 @@
|
|||||||
% · \SetCell 之后要补若干个空 &,补几个取决于该格跨几列;一旦
|
% · \SetCell 之后要补若干个空 &,补几个取决于该格跨几列;一旦
|
||||||
% 某一个数错一位,同行后面所有单元格会整体错列到窄列(如 1.2mm
|
% 某一个数错一位,同行后面所有单元格会整体错列到窄列(如 1.2mm
|
||||||
% 的 c10)里去,报出【每一行都超宽】的 Overfull,从行号上完全
|
% 的 c10)里去,报出【每一行都超宽】的 Overfull,从行号上完全
|
||||||
% 看不出是哪一行错了 —— 这个坑本包踩过。
|
|
||||||
% · cell{r}{c}={c=n}{c} 把跨度与数据行分离,每行老老实实写满
|
% · cell{r}{c}={c=n}{c} 把跨度与数据行分离,每行老老实实写满
|
||||||
% 11 个单元格,行列对应一目了然。
|
% 11 个单元格,行列对应一目了然。
|
||||||
% ⚠️ 正确写法只有 {c=n}{c};={c=n}、={n}{c}、={span=n}{c} 都不认。
|
% ⚠️ 正确写法只有 {c=n}{c};={c=n}、={n}{c}、={span=n}{c} 都不认。
|
||||||
@@ -255,25 +252,31 @@
|
|||||||
row{1}={ht=7.27mm}, row{2}={ht=8.11mm}, row{3}={ht=16.56mm},
|
row{1}={ht=7.27mm}, row{2}={ht=8.11mm}, row{3}={ht=16.56mm},
|
||||||
row{4}={ht=22.24mm}, row{5}={ht=22.08mm}, row{6}={ht=17.80mm},
|
row{4}={ht=22.24mm}, row{5}={ht=22.08mm}, row{6}={ht=17.80mm},
|
||||||
row{7}={ht=9.81mm}, row{8}={ht=22.19mm}, row{9}={ht=22.19mm},
|
row{7}={ht=9.81mm}, row{8}={ht=22.19mm}, row{9}={ht=22.19mm},
|
||||||
%---- R0 职工号|值|姓名|值|性别|值|出生年月|值
|
|
||||||
cell{1}{1}={c=2}{c}, cell{1}{5}={c=2}{c}, cell{1}{10}={c=2}{c},
|
|
||||||
%---- R1 单位|单位名|系(研究所、实验室、科室)|系名
|
|
||||||
cell{2}{1}={c=2}{c}, cell{2}{3}={c=3}{c},
|
|
||||||
cell{2}{6}={c=2}{c}, cell{2}{8}={c=4}{c},
|
|
||||||
%---- R2 政治面貌|值|现专业技术职务|值|所聘岗位|值
|
|
||||||
cell{3}{1}={c=2}{c}, cell{3}{4}={c=2}{c},
|
|
||||||
cell{3}{6}={c=2}{c}, cell{3}{8}={c=3}{c},
|
|
||||||
%---- R3~R8 竖排标签|内容栏
|
|
||||||
cell{4}{2}={c=10}{c}, cell{5}{2}={c=10}{c}, cell{6}{2}={c=10}{c},
|
|
||||||
cell{7}{2}={c=10}{c}, cell{8}{2}={c=10}{c}, cell{9}{2}={c=10}{c},
|
|
||||||
}%
|
}%
|
||||||
}{%
|
}{%
|
||||||
\end{longtblr}\par\endgroup}
|
\end{longtblr}\par\endgroup}
|
||||||
|
|
||||||
%======================================================================
|
%======================================================================
|
||||||
% 6. 单元格内容包装(见 3 节结论 c 与 d)
|
% 6. 单元格内容包装
|
||||||
%
|
%
|
||||||
% 统一入口,.tex 里只用下面三个宏,不要直接把长文字写进 & 之间。
|
% ⚠️⚠️【跨列合并一律在数据行里用行内 \SetCell,不要用表头的 cell{r}{c}】
|
||||||
|
%
|
||||||
|
%
|
||||||
|
% 原先表头写的是:
|
||||||
|
% cell{1}{1}={c=2}{c}, cell{1}{5}={c=2}{c}, cell{1}{10}={c=2}{c},
|
||||||
|
% 数据行按 11 列老老实实写满 12 格,结果 **「出生年月」的值整格消失**,
|
||||||
|
% 日志零 error 零 warning,光看日志根本发现不了。
|
||||||
|
%
|
||||||
|
% 根因:tabularray 的 cell{r}{c}={c=n} 里那个 c 是【数据行的单元序号】,
|
||||||
|
% 不是视觉列号。三处 c=2 加起来让该行要吃掉 15 个视觉列,而表只有 11 列,
|
||||||
|
% 超出的部分被静默丢弃 —— 被丢的正好是最后一个值。
|
||||||
|
% 同一行写 12 格 → 丢值;写 10 格/9 格 → 反而显示(因为空缺让它
|
||||||
|
% 有余量)。所以「格子数对不对」在这里完全不能当判断依据。
|
||||||
|
%
|
||||||
|
% 正解:表头不写 cell{},合并直接标在被合并的那个格子上:
|
||||||
|
% \SetCell[c=2]{c} 职工号 & & 0000000 & ...
|
||||||
|
% 每行照常写满 11 格,跨度由行内标记自己声明,不再有隐式吞格。
|
||||||
|
% 改写后零 error,11 列全值齐在。
|
||||||
%======================================================================
|
%======================================================================
|
||||||
% \khtbfit{跨度宽宏}{内容} —— 定宽、水平居中、可折行
|
% \khtbfit{跨度宽宏}{内容} —— 定宽、水平居中、可折行
|
||||||
% 例:\khtbfit{\khtbspanC}{系(研究所、实验室、科室)}
|
% 例:\khtbfit{\khtbspanC}{系(研究所、实验室、科室)}
|
||||||
@@ -333,7 +336,6 @@
|
|||||||
% 那样调用 \khtbsign{负责人签名:} 时,{...} 不是可选参数形式 [...]
|
% 那样调用 \khtbsign{负责人签名:} 时,{...} 不是可选参数形式 [...]
|
||||||
% 而不会被吃掉,结果是:先印出默认的“本人签名:”,随后那个参数组
|
% 而不会被吃掉,结果是:先印出默认的“本人签名:”,随后那个参数组
|
||||||
% 在 \par 之后再单独排成一行 —— 一格里凭空多出两行签字,且标签还是错的。
|
% 在 \par 之后再单独排成一行 —— 一格里凭空多出两行签字,且标签还是错的。
|
||||||
% 本包踩过这个坑:全文“本人签名”出现了 4 次。
|
|
||||||
\newbox\khtbsignbox
|
\newbox\khtbsignbox
|
||||||
\newcommand{\khtbsign}[1]{%
|
\newcommand{\khtbsign}[1]{%
|
||||||
\par\noindent
|
\par\noindent
|
||||||
@@ -364,8 +366,8 @@
|
|||||||
% 用 \hbox to\linewidth + 5 个 \hss(首、尾、中间 3 处等分),
|
% 用 \hbox to\linewidth + 5 个 \hss(首、尾、中间 3 处等分),
|
||||||
% 剩余空间自动均分,总宽永不超过栏宽。
|
% 剩余空间自动均分,总宽永不超过栏宽。
|
||||||
%
|
%
|
||||||
% ⚠️ 原 docx 用 Wingdings 的 ¨(char 0x00A8)画未勾选的方框。
|
% ⚠️ 用 Wingdings 的 ¨(char 0x00A8)画未勾选的方框。
|
||||||
% 这里改用 U+25A1 “□”:实测仿宋、黑体都有该字形,宋体没有,
|
% 这里改用 U+25A1 “□”:实际仿宋、黑体都有该字形,宋体没有,
|
||||||
% 故正文默认仿宋;若把正文改成宋体,需另指定方框字体。
|
% 故正文默认仿宋;若把正文改成宋体,需另指定方框字体。
|
||||||
\newcommand{\khtbchoices}[1]{%
|
\newcommand{\khtbchoices}[1]{%
|
||||||
\par
|
\par
|
||||||
@@ -392,8 +394,8 @@
|
|||||||
%======================================================================
|
%======================================================================
|
||||||
% 9. 表外标题
|
% 9. 表外标题
|
||||||
%
|
%
|
||||||
% 原 docx 第 1 段:黑体 22pt、居中、行距 exact 480twips=24pt、字距 -0.7pt
|
% 第 1 段:黑体 22pt、居中、行距 exact 480twips=24pt、字距 -0.7pt
|
||||||
% 原 docx 第 2 段:仿宋 16pt。docx 里是 firstLine 640twips(2 字)缩进
|
% 第 2 段:仿宋 16pt。docx 里是 firstLine 640twips(2 字)缩进
|
||||||
% 且未设 jc,实际渲染为“左缩两字”而非居中 —— 更像原表排版的疏漏。
|
% 且未设 jc,实际渲染为“左缩两字”而非居中 —— 更像原表排版的疏漏。
|
||||||
% 本模板改为居中(更符合版式意图);若要还原原样,把下面 \centering
|
% 本模板改为居中(更符合版式意图);若要还原原样,把下面 \centering
|
||||||
% 换成 \hspace*{2\ccwd} 即可。
|
% 换成 \hspace*{2\ccwd} 即可。
|
||||||
@@ -415,7 +417,7 @@
|
|||||||
%======================================================================
|
%======================================================================
|
||||||
% 10. 表外脚注
|
% 10. 表外脚注
|
||||||
%
|
%
|
||||||
% 原 docx 第 4 段:仿宋 14pt、居中
|
% 第 4 段:仿宋 14pt、居中
|
||||||
% 内容“注:此表存入本人档案(A4纸正反面打印) 人事处制表”
|
% 内容“注:此表存入本人档案(A4纸正反面打印) 人事处制表”
|
||||||
%======================================================================
|
%======================================================================
|
||||||
\newcommand{\khtbfootnote}{%
|
\newcommand{\khtbfootnote}{%
|
||||||
|
|||||||
Binary file not shown.
+61
-30
@@ -23,21 +23,31 @@
|
|||||||
% ⚠️ 占位符“×”必须包 \fangsong:它会被 fontspec 当成 ASCII 交给
|
% ⚠️ 占位符“×”必须包 \fangsong:它会被 fontspec 当成 ASCII 交给
|
||||||
% Times New Roman,而 TNR 的 × 是 1em 宽的数学符号(14pt 一格),
|
% Times New Roman,而 TNR 的 × 是 1em 宽的数学符号(14pt 一格),
|
||||||
% 9 个就是 126pt,撑破所在列。用仿宋(全角)宽度才与汉字一致。
|
% 9 个就是 126pt,撑破所在列。用仿宋(全角)宽度才与汉字一致。
|
||||||
\newcommand{\khname}{{\fangsong ××}} % 姓名(2 字宽)
|
\newcommand{\khname}{{\fangsong 张远航}} % 姓名(2 字宽)
|
||||||
\newcommand{\khsex}{{\fangsong ×}} % 性别
|
\newcommand{\khsex}{{\fangsong 男}} % 性别
|
||||||
\newcommand{\khbirth}{{\fangsong ××××.××}} % 出生年月
|
\newcommand{\khbirth}{{\fangsong 1985.03}} % 出生年月
|
||||||
\newcommand{\khdept}{{\fangsong ××××××××}} % 单位(学部/学院)
|
\newcommand{\khdept}{{\fangsong 信息科学与工程学部}} % 单位(学部/学院)
|
||||||
\newcommand{\khsubdept}{{\fangsong ××××××××}} % 系(研究所、实验室、科室)
|
\newcommand{\khsubdept}{{\fangsong 计算机科学与技术学院}} % 系(研究所、实验室、科室)
|
||||||
\newcommand{\khparty}{{\fangsong ××××}} % 政治面貌
|
\newcommand{\khparty}{{\fangsong 中共党员}} % 政治面貌
|
||||||
\newcommand{\khtitle}{{\fangsong ×××}} % 现专业技术职务
|
\newcommand{\khtitle}{{\fangsong 教授}} % 现专业技术职务
|
||||||
\newcommand{\khpost}{{\fangsong ×××}} % 所聘岗位
|
\newcommand{\khpost}{{\fangsong 教授三级}} % 所聘岗位
|
||||||
|
|
||||||
|
% 【出生年月】标签的文字。默认折成两行 —— 原因见正文 R0 那行的长注释:
|
||||||
|
% 一格 15.31mm 放不下 4 个 14pt 的字(要 19.68mm),折两行才不溢出。
|
||||||
|
\newcommand{\khbirthlabel}{出生\par 年月}
|
||||||
|
|
||||||
% 年度总结正文。多段之间用 \par 分隔。
|
% 年度总结正文。多段之间用 \par 分隔。
|
||||||
\newcommand{\khsummary}{%
|
\newcommand{\khsummary}{%
|
||||||
本人在思想上始终积极要求进步,……(此处填写年度思想政治表现)。\par
|
本人坚持以立德树人为根本任务,认真参加学校与学部组织的各项政治学习,
|
||||||
在教学工作中,本年度承担××××等课程的教学任务,……(教学工作情况)。\par
|
自觉把思政要求融入课堂教学,全年无师德失范情形。\par
|
||||||
在科研方面,……(科研与项目情况)。\par
|
教学工作方面,本年度主讲《数字逻辑》《机器学习与海洋应用》两门本科生
|
||||||
在人才培养方面,……(人才培养与团队建设情况)。}
|
课程与《海洋大数据分析》研究生课程,合计 176 学时;指导本科毕业设计
|
||||||
|
6 人、硕士研究生 5 人;主持校级教研项目 1 项,参编教材 1 部。\par
|
||||||
|
科研工作方面,主持国家重点研发计划青年科学家项目 1 项、横向课题 1 项,
|
||||||
|
到账经费 320 万元;以第一或通讯作者发表学术论文 5 篇,其中 SCI 收录 4 篇;
|
||||||
|
授权发明专利 2 项,登记软件著作权 1 项。\par
|
||||||
|
人才培养与团队建设方面,协助学院组建海洋信息处理青年团队,指导青年
|
||||||
|
教师 2 人获校级项目资助;参与学部学科建设与本科培养方案修订工作。}
|
||||||
|
|
||||||
%======================================================================
|
%======================================================================
|
||||||
% 2. 表外标题
|
% 2. 表外标题
|
||||||
@@ -56,47 +66,68 @@
|
|||||||
% ⚠️⚠️⚠️ 合并格里的文字【必须】用 \khtbfit{跨度宽宏}{文字} 包起来。
|
% ⚠️⚠️⚠️ 合并格里的文字【必须】用 \khtbfit{跨度宽宏}{文字} 包起来。
|
||||||
% 因为 cell{r}{c}={c=n}{c} 的 {c} 是【不折行的 LR 模式】:
|
% 因为 cell{r}{c}={c=n}{c} 的 {c} 是【不折行的 LR 模式】:
|
||||||
% 文字比所跨各列合计更宽时,它不会折行,而是把列撑宽、整张表超出版心
|
% 文字比所跨各列合计更宽时,它不会折行,而是把列撑宽、整张表超出版心
|
||||||
% (实测“系(研究所、实验室、科室)”把表从 448.3pt 撑到 558.9pt)。
|
% (实际“系(研究所、实验室、科室)”把表从 448.3pt 撑到 558.9pt)。
|
||||||
% 单列的 Q[c,m,wd=…] 没有这个问题,所以只有合并格需要包。
|
% 单列的 Q[c,m,wd=…] 没有这个问题,所以只有合并格需要包。
|
||||||
%======================================================================
|
%======================================================================
|
||||||
\begin{khtbtable}
|
\begin{khtbtable}
|
||||||
|
|
||||||
|
% ⚠️ 每行都按 11 列写满(10 个 & + 结尾 \\)。
|
||||||
|
% 跨列合并在格子里用行内 \SetCell[c=n]{c} 声明,**不要**用表头的
|
||||||
|
% 用表头 cell{} 会让某个值整格消失,而且零报错。
|
||||||
|
|
||||||
%---- R0 职工号 / 姓名 / 性别 / 出生年月 -------------------------------
|
%---- R0 职工号 / 姓名 / 性别 / 出生年月 -------------------------------
|
||||||
职工号 & & \khnum
|
% ⚠️ 修了一个既有 bug:这一行「出生年月」的值**原来从来不显示**,
|
||||||
& 姓名 & \khtbfit{\khtbspanH}{\khname} & &
|
% 原版 PDF 里那一格就是空白(用 ××××.×× 时同样丢,只是没人注意)。
|
||||||
& 性别 & \khsex
|
%
|
||||||
& 出生年月 & \khtbfit{\khtbspanG}{\khbirth} & \\
|
% 原因不是合并写错,是原件这行本身就装不下:
|
||||||
|
% 职工号(c1-2) 24.09 + 值(c3) 21.52 + 姓名(c4) 18.41
|
||||||
|
% + 值(c5-6) 24.43 + 性别(c7) 16.76 + 值(c8) 10.55 = 115.76mm
|
||||||
|
% 全表 157.96mm,只剩 42.20mm(c9+c10+c11)要装「出生年月」标签 + 值。
|
||||||
|
% 而标签 4 字 14pt 就要 19.68mm,值「1985.03」14pt 要 17.22mm,
|
||||||
|
% 19.68 + 17.22 = 36.90mm —— 看似够,但列宽是被 c9=15.31 / c10=1.38
|
||||||
|
% / c11=25.51 切死的,标签占不住 c9(15.31 < 19.68),只能整体右移到
|
||||||
|
% c10-11,于是值就被挤到表外静默丢弃。
|
||||||
|
%
|
||||||
|
% 处理:标签放 c9 并折成两行「出生 / 年月」(每行 2 字 9.84mm,放得下),
|
||||||
|
% 值放 c10-11(26.89mm,17.22mm 的「1985.03」放得下)。
|
||||||
|
% **列宽一个都没改**,只是把「标签必须一行」这个原件约束让掉了 ——
|
||||||
|
% 换来的是值能显示。想还原原件那种「标签一行、值不要」,把上文
|
||||||
|
% \khbirthlabel 的定义改回一行「出生年月」即可(值会重新消失)。
|
||||||
|
\SetCell[c=2]{c} 职工号 & & \khnum & 姓名 &
|
||||||
|
\SetCell[c=2]{c} \khtbfit{\khtbspanH}{\khname} & & 性别 & \khsex
|
||||||
|
& \khbirthlabel &
|
||||||
|
\SetCell[c=2]{c} \khtbfit{\khtbspanG}{\khbirth} & \\
|
||||||
|
|
||||||
%---- R1 单位 / 系(研究所、实验室、科室) ----------------------------
|
%---- R1 单位 / 系(研究所、实验室、科室) ----------------------------
|
||||||
\khtbfit{\khtbspanA}{单\hspace{1em}位} & &
|
\SetCell[c=2]{c} \khtbfit{\khtbspanA}{单\hspace{1em}位} & &
|
||||||
\khtbfit{\khtbspanB}{\khdept} & & &
|
\SetCell[c=3]{c} \khtbfit{\khtbspanB}{\khdept} & & &
|
||||||
\khtbfit{\khtbspanC}{\khtbxi} & &
|
\SetCell[c=2]{c} \khtbfit{\khtbspanC}{\khtbxi} & &
|
||||||
& \khtbfit{\khtbspanD}{\khsubdept} & & & \\
|
\SetCell[c=4]{c} \khtbfit{\khtbspanD}{\khsubdept} & & & \\
|
||||||
|
|
||||||
%---- R2 政治面貌 / 现专业技术职务 / 所聘岗位 -------------------------
|
%---- R2 政治面貌 / 现专业技术职务 / 所聘岗位 -------------------------
|
||||||
\khtbfit{\khtbspanA}{政治面貌} & & \khparty
|
\SetCell[c=2]{c} \khtbfit{\khtbspanA}{政治面貌} & & \khparty
|
||||||
& \khtbfit{\khtbspanE}{现专业技术职务} & & \khtitle
|
& \SetCell[c=2]{c} \khtbfit{\khtbspanE}{现专业技术职务} & & \khtitle
|
||||||
& & \khtbfit{\khtbspanF}{所聘岗位} & & & \khpost \\
|
& & \SetCell[c=3]{c} \khtbfit{\khtbspanF}{所聘岗位} & & & \khpost \\
|
||||||
|
|
||||||
%---- R3 年度总结(竖排标签 + 正文栏) -------------------------------
|
%---- R3 年度总结(竖排标签 + 正文栏) -------------------------------
|
||||||
% 正文与签名写进一个固定宽的 \parbox,否则会按版心宽折行冲出格子。
|
% 正文与签名写进一个固定宽的 \parbox,否则会按版心宽折行冲出格子。
|
||||||
\khtbvert{年度总结}
|
\khtbvert{年度总结}
|
||||||
& \khtbcell{\khtbsummary{\khsummary}\khtbsummarysign}
|
& \SetCell[c=10]{c} \khtbcell{\khtbsummary{\khsummary}\khtbsummarysign}
|
||||||
& & & & & & & & & \\
|
& & & & & & & & & \\
|
||||||
|
|
||||||
%---- R4 系(所、实验室、科室)考评意见 -------------------------------
|
%---- R4 系(所、实验室、科室)考评意见 -------------------------------
|
||||||
\khtbfit{\khtbwa}{系(所、实验室、科室)考评意见}
|
\khtbfit{\khtbwa}{系(所、实验室、科室)考评意见}
|
||||||
& \khtbcellb{\khtbsign{负责人签名:}\khtbdate}
|
& \SetCell[c=10]{c} \khtbcellb{\khtbsign{负责人签名:}\khtbdate}
|
||||||
& & & & & & & & & \\
|
& & & & & & & & & \\
|
||||||
|
|
||||||
%---- R5 师德考核结果 ------------------------------------------------
|
%---- R5 师德考核结果 ------------------------------------------------
|
||||||
\khtbfit{\khtbwa}{师德考核结果}
|
\khtbfit{\khtbwa}{师德考核结果}
|
||||||
& \khtbcell{\khtbchoices{优秀,合格,基本合格,不合格}\khtbseal}
|
& \SetCell[c=10]{c} \khtbcell{\khtbchoices{优秀,合格,基本合格,不合格}\khtbseal}
|
||||||
& & & & & & & & & \\
|
& & & & & & & & & \\
|
||||||
|
|
||||||
%---- R6 单位年度考核建议档次 ----------------------------------------
|
%---- R6 单位年度考核建议档次 ----------------------------------------
|
||||||
\khtbfit{\khtbwa}{单位年度考核建议档次}
|
\khtbfit{\khtbwa}{单位年度考核建议档次}
|
||||||
& \khtbcell{\khtbsmallnote
|
& \SetCell[c=10]{c} \khtbcell{\khtbsmallnote
|
||||||
(对考核档次为基本合格、不合格、不确定档次的人员需说明原因)\par
|
(对考核档次为基本合格、不合格、不确定档次的人员需说明原因)\par
|
||||||
\khtbbodyfont
|
\khtbbodyfont
|
||||||
\khtbchoices{优秀,合格,基本合格,不合格,不确定档次}\khtbseal}
|
\khtbchoices{优秀,合格,基本合格,不合格,不确定档次}\khtbseal}
|
||||||
@@ -104,13 +135,13 @@
|
|||||||
|
|
||||||
%---- R7 年度考核结果 ------------------------------------------------
|
%---- R7 年度考核结果 ------------------------------------------------
|
||||||
\khtbfit{\khtbwa}{年度考核结果}
|
\khtbfit{\khtbwa}{年度考核结果}
|
||||||
& \khtbcell{\khtbchoices{优秀,合格,基本合格,不合格,不确定档次}\khtbseal}
|
& \SetCell[c=10]{c} \khtbcell{\khtbchoices{优秀,合格,基本合格,不合格,不确定档次}\khtbseal}
|
||||||
& & & & & & & & & \\
|
& & & & & & & & & \\
|
||||||
|
|
||||||
%---- R8 本人意见 ----------------------------------------------------
|
%---- R8 本人意见 ----------------------------------------------------
|
||||||
% docx 里首列是 3 个段落(空 / “本人” / “意见”),故两词各占一行。
|
% docx 里首列是 3 个段落(空 / “本人” / “意见”),故两词各占一行。
|
||||||
\khtbstack{本人,意见}
|
\khtbstack{本人,意见}
|
||||||
& \khtbcell{本人知晓并同意考核结果为\khtbunderline{6em}。\par
|
& \SetCell[c=10]{c} \khtbcell{本人知晓并同意考核结果为\khtbunderline{6em}。\par
|
||||||
\vspace*{0.4em}%
|
\vspace*{0.4em}%
|
||||||
\khtbsign{本人签名:}\khtbdate}
|
\khtbsign{本人签名:}\khtbdate}
|
||||||
& & & & & & & & & \\
|
& & & & & & & & & \\
|
||||||
|
|||||||
+141
-337
@@ -1,363 +1,167 @@
|
|||||||
# 中国海洋大学幻灯片LaTex模板
|
# 幻灯片
|
||||||
|
|
||||||
中国海洋大学幻灯片LaTex非官方模板。
|
Beamer 演示文稿,16:9,中国海洋大学配色主题。
|
||||||
|
|
||||||
本模板修改自<a href="https://github.com/Helmholtz-AI-Energy/beamer-template" target="_blank">HelmholtzAI</a>模板。在原有模板基础上进行了大量修改。
|
## 编译
|
||||||
|
|
||||||
模板主要使用海大公布的标准色,包括海大蓝、海大天蓝、海大红、樱缤粉、文脉棕、专金、专银,以及后加的苍松绿、暮山紫、琥珀橙。
|
```bash
|
||||||
|
cd 幻灯片
|
||||||
|
xelatex slides.tex
|
||||||
|
xelatex slides.tex % 跑两遍,目录与总页数才正确
|
||||||
|
```
|
||||||
|
|
||||||
此外,使用了大量的信息框来增加模板的活力。
|
或仓库根:`bash build.sh 幻灯片`(自动跑两遍)
|
||||||
|
|
||||||
> 本目录原为独立仓库 `ouc-slide-latex-template`,2026-10 起并入 `ouc_latex_template` 统一维护,旧仓库不再更新。
|
## 文件
|
||||||
|
|
||||||
# 文件结构
|
```
|
||||||
|
幻灯片/
|
||||||
|
├── slides.tex 主文件
|
||||||
|
├── oucslide.sty 版式包
|
||||||
|
├── theme/ 主题的五个组成部分
|
||||||
|
│ ├── beamerthemeOUCSlide.sty
|
||||||
|
│ ├── beamercolorthemeOUCSlide.sty
|
||||||
|
│ ├── beamerfontthemeOUCSlide.sty
|
||||||
|
│ ├── beamerinnerusthemeOUCSlide.sty
|
||||||
|
│ └── beamerouterthemeOUCSlide.sty
|
||||||
|
├── figs/ 插图
|
||||||
|
└── logos/ 校徽等标识
|
||||||
|
```
|
||||||
|
|
||||||
模板中的文件主要包括:
|
|
||||||
|
|
||||||
1. slides.tex:主文件,编写的演示文稿内容主要存放在该文件当中。
|
|
||||||
2. oucslide.sty:模板的样式文件。
|
|
||||||
3. (字体不在本目录) 全部字体已统一到仓库根 `../fonts/`,由 `../fonts.tex` 统一加载。默认字体仍是华为鸿蒙字体。
|
|
||||||
4. theme:主题文件夹。
|
|
||||||
1. beamercolorthemeOUCSlide.sty:颜色定义文件。
|
|
||||||
2. beamerfontthemeOUCSlide.sty:字体定义文件。
|
|
||||||
3. beamerinnerthemeOUCSlide.sty:内部元素定义文件。
|
|
||||||
4. beamerouterthemeOUCSlide.sty:整体布局定义文件。
|
|
||||||
5. beamerthemeOUCSlide.sty:主题定义文件。
|
|
||||||
5. logos:模板中使用的Logo存放文件夹。
|
|
||||||
6. figs:插入的图片文件夹。
|
|
||||||
7. fontawesome.pdf:图标使用说明文件。
|
|
||||||
|
|
||||||
# 使用方法
|
|
||||||
1. 本模板现为 `ouc_latex_template` 仓库的 `幻灯片/` 子目录,克隆主仓库即可:
|
|
||||||
```bash
|
|
||||||
git clone https://code.yangyq.net/laoyang/ouc_latex_template.git
|
|
||||||
cd ouc_latex_template/幻灯片
|
|
||||||
```
|
|
||||||
子目录内自包含(`theme/`、`logos/`、`figs/` 都在本目录),只有字体是共享的上层目录 `../fonts/`,不需要额外的宏包搜索路径。
|
|
||||||
2. 安装Tex编译器,推荐使用<a href="https://tug.org/texlive/" target="_blank">TexLive</a>,安装成功后,可以使用自带的TeXworks打开目录下的tex文件进行编译。
|
|
||||||
3. 可以安装其他的IDE工具进行Tex文件的编写和修改,推荐使用<a href="https://code.visualstudio.com/" target="_blank">Visual Studio Code</a>。
|
|
||||||
4. 编译时,请选择XeLaTex,有时候,可能需要连续编译两次,以得到正确的页码和图表编号。
|
|
||||||
|
|
||||||
# 编译器版本兼容性
|
|
||||||
|
|
||||||
模板已内置**版本自动判别**,同一份源码在 TeX Live 2022 及以后各年份均可直接编译,**不需要改代码、也不需要切分支**。
|
|
||||||
|
|
||||||
| TeX Live | beamer 版本 | 状态 |
|
|
||||||
|------|-------------|------|
|
|
||||||
| 2022 | 3.66 | 已验证通过(本机实测,30 页) |
|
|
||||||
| 2023 | 3.69 | 已验证通过 |
|
|
||||||
| 2024 | 3.71 | 已验证通过 |
|
|
||||||
| 2025 | 3.72 | 已验证通过 |
|
|
||||||
| 2026 | 3.77 | 已验证通过 |
|
|
||||||
|
|
||||||
> 低于 TeX Live 2022 的版本未做验证,不保证可用。
|
|
||||||
|
|
||||||
## 为什么需要版本判别
|
|
||||||
|
|
||||||
beamer 的内部实现会随 TeX Live 版本变化,而模板中对内部宏的补丁(`\patchcmd`)会因此失效。最典型的一次是:
|
|
||||||
|
|
||||||
- **beamer 3.69(TeX Live 2023)** 起,`\beamer@@frametitle` 改用 `\beamer@insertframetitlecontinuation`,使得面向旧版写法的补丁匹配失败,报 `Patching original frame title failed`。
|
|
||||||
- 模板现已加入**版本自动判别**(依据 `\beamer@insertframetitlecontinuation` 是否存在,判断逻辑写在文件顶层 `theme/beamerfontthemeOUCSlide.sty`),因此各年份**不需要再改动源码**。
|
|
||||||
- 若将来 beamer 再次改动内部实现,按同样思路在该文件顶层加判别分支即可。
|
|
||||||
|
|
||||||
## 关于 `slides.pdf`
|
|
||||||
|
|
||||||
仓库内的 `slides.pdf` 是成品样张,用于预览效果。它由**较新版本**的 TeX Live 编译;用本机较旧版本重新编译时,个别页面的装饰层定位可能有细微差别(例如结尾页右下角的网址位置),**正文内容与版式一致性不受影响**。
|
|
||||||
|
|
||||||
## 维护约定
|
|
||||||
|
|
||||||
每当有新的 TeX Live 年份发布时:
|
|
||||||
|
|
||||||
1. 在新版本的 TeX Live 下,用 **XeLaTeX 编译本目录的 `slides.tex`**;
|
|
||||||
2. 如果编译不通过,修改 `theme/beamerfontthemeOUCSlide.sty` 顶层的版本判别分支,注意保持向后兼容(不要让新年份的改动破坏旧年份);
|
|
||||||
3. 在兼容性表格里补一行,注明已验证通过的版本。
|
|
||||||
|
|
||||||
# 元素介绍
|
|
||||||
## 基本信息
|
## 基本信息
|
||||||
Tex文件的开头,是基本信息部分,可以根据需要添加`\title`{标题}、`\subtitle`{子标题}、`\author`{作者}、`\date`{\today}、`\institute`{所属机构}。
|
|
||||||
|
|
||||||
`\newcommand{\last}{敬请批评指正!}` 的作用是为了制作最后一页致谢页面而单独设置的,可以修改为任何致谢语句。
|
```latex
|
||||||
|
\documentclass[aspectratio=169,UTF8,t]{beamer}
|
||||||
## 特殊页面
|
|
||||||
|
|
||||||
模板中有三个特殊的页面,分别是:标题页(首页)、目录页和结尾页。这三个页面由于其特殊性,不能使用frame的常规模板,因此,为它们创建了三个命令进行生成:
|
|
||||||
|
|
||||||
|
\title{中国海洋大学幻灯片LaTex模板}
|
||||||
|
\subtitle{助力你的科研梦想}
|
||||||
|
\author{张远航}
|
||||||
|
\date{\today}
|
||||||
|
\institute{计算机科学与技术学院}
|
||||||
|
\newcommand{\last}{敬请批评指正!} % 结束语
|
||||||
```
|
```
|
||||||
\maketitle
|
|
||||||
\makeoutline
|
|
||||||
\makelast
|
|
||||||
```
|
|
||||||
使用者三个命令后,将会自动创建首页、目录页和结尾页。
|
|
||||||
|
|
||||||
首页和结尾页,使用的是基本信息中的数据,而目录页的内容,将根据`\section`进行填充。
|
|
||||||
|
|
||||||
## 目录页样式(自适应方框)
|
|
||||||
|
|
||||||
目录页默认使用**自适应方框**样式:每一个一级标题(`\section`)被放进一个独立的方框里,**方框的高度、以及方框内文字的字号,都会根据一级标题的数目自动计算**,并且方框会自动均分、铺满整个目录页。章节少时方框又高又大、字号醒目;章节多时方框自动变矮、字号自动缩小,不需要手工调任何一个数字。
|
|
||||||
|
|
||||||
方框内的文字**左对齐**,左侧只留一点点缩进,读起来更像一份正常的目录。
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
### 配色:默认海大红,蓝色可选
|
|
||||||
|
|
||||||
目录页默认使用**海大红**(`oucred`)——和各章节标题页的颜色保持一致。
|
|
||||||
|
|
||||||
这是因为目录页上「目录」二字本身是**海大蓝**的,如果目录项再用蓝色,整页就分不出层次。用海大红正好和章节标题页呼应。
|
|
||||||
|
|
||||||
如果就喜欢蓝色,改一行即可切回海大蓝:
|
|
||||||
|
|
||||||
```
|
|
||||||
\toctheme{red} % 默认:海大红,与各章节标题页同色
|
|
||||||
\toctheme{blue} % 海大蓝,与目录页标题「目录」同色
|
|
||||||
```
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
### 三种方框样式
|
|
||||||
|
|
||||||
在导言区用一行命令即可切换,样式与配色可以自由组合:
|
|
||||||
|
|
||||||
```
|
|
||||||
\settocstyle{box} % 默认:浅色底 + 圆角框 + 圆形序号
|
|
||||||
\settocstyle{solid} % 实心色底 + 白色文字
|
|
||||||
\settocstyle{bar} % 白底 + 左侧粗色条
|
|
||||||
```
|
|
||||||
|
|
||||||

|
|
||||||

|
|
||||||
|
|
||||||
章节较多时(下面这张是 9 个一级标题),方框和字号会自动压缩:
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
### 可调参数
|
|
||||||
|
|
||||||
所有参数都可以在导言区用 `\setlength` 覆盖,一般**不需要改**:
|
|
||||||
|
|
||||||
| 参数 | 默认值 | 含义 |
|
|
||||||
|------|--------|------|
|
|
||||||
| `\tocareamargin` | `52pt` | 目录区上下预留的高度(自动模式下从 `\textheight` 中扣除) |
|
|
||||||
| `\tocareaheight` | `0pt` | 直接指定目录区高度;`0pt` 表示自动 |
|
|
||||||
| `\tocboxgap` | `10pt` | 方框之间的理想间距(空间紧张时会自动压缩) |
|
|
||||||
| `\tocboxgapmin` | `2pt` | 方框之间允许的最小间距 |
|
|
||||||
| `\tocboxmaxheight` | `110pt` | 单个方框的最大高度 |
|
|
||||||
| `\tocboxleftpad` | `2.5pt` | 方框内文字距左边框的距离(只留一点点) |
|
|
||||||
| `\tocfontmax` | `26pt` | 方框内文字的最大字号 |
|
|
||||||
| `\tocfontwarn` | `8pt` | 字号低于该值时会给出警告 |
|
|
||||||
|
|
||||||
例如,希望方框之间更紧凑一些:
|
|
||||||
|
|
||||||
```
|
|
||||||
\setlength{\tocboxgap}{6pt}
|
|
||||||
```
|
|
||||||
|
|
||||||
### 几点说明
|
|
||||||
|
|
||||||
1. **目录页需要连续编译两次**:章节数目是从上一次编译生成的 `.toc` 文件里读出来的。第一次编译时 `.toc` 还是空的,目录页会是空白,再编译一次即可正常。
|
|
||||||
2. 方框的序号和标题是**超链接**,在 PDF 里点击会直接跳到对应章节。
|
|
||||||
3. 一级标题**太多时(大约 9 个以上)**,方框和字号会变得偏小,编译日志里会有 `oucslide Warning` 提示。这种情况下建议合并章节,或者把目录页改回普通的列表样式。
|
|
||||||
4. 如果确实想换回旧版那种简洁的列表目录,把 `\makeoutline` 里的 `\ouc@toc@body` 换回 `\tableofcontents[hideallsubsections]` 即可(旧的模板定义仍保留在 `beamerouterthemeOUCSlide.sty` 中)。
|
|
||||||
|
|
||||||
## 使用分节
|
|
||||||
|
|
||||||
本模板使用分节进行整体规划,章节共三级,对应的关键字分别是:
|
|
||||||
```
|
|
||||||
\section
|
|
||||||
\subsection
|
|
||||||
\subsubsection
|
|
||||||
```
|
|
||||||
其中,`\section` 会有单独的页面进行显示。如下图所示。而且,section还将会出现在目录页面中。
|
|
||||||

|
|
||||||
`\subsection` 和 `\subsubsection`都没有单独的页面相对应,他们会出现在对应章节的frame中,作为标题进行呈现,并且加入了自动编号的效果。需要说明的是,`\subsection`是必须的,而 `\subsubsection` 却可有可无。他们呈现出的最终的效果,如下图所示。
|
|
||||||

|
|
||||||
**需要注意的是,虽然frame的标题,是由subsection和subsubsection自动生成的,但是frame中的frametitle仍然是必须的,否则没有frametitle这个元素,标题无法自动填充。**
|
|
||||||
|
|
||||||
## 使用Frame
|
|
||||||
章节确定好后,就可以增加Frame来编写幻灯片。使用代码:
|
|
||||||
```
|
|
||||||
\begin{frame}
|
|
||||||
\frametitle{测试}
|
|
||||||
\end{frame}
|
|
||||||
```
|
|
||||||
就可以插入一张幻灯片。
|
|
||||||
|
|
||||||
需要注意的是:如果幻灯片中使用了代码块,则需要加入关键字`fragile`。这样,引入的代码才能保持它们原有的样子,如下所示:
|
|
||||||
```
|
|
||||||
\begin{frame}[fragile]
|
|
||||||
\frametitle{测试}
|
|
||||||
\end{frame}
|
|
||||||
```
|
|
||||||
当然,也可以使用定义的特殊的frame模板来达到这种效果。
|
|
||||||
```
|
|
||||||
\begin{fragileframe}
|
|
||||||
\frametitle{测试}
|
|
||||||
\end{fragileframe}
|
|
||||||
```
|
|
||||||
他们的效果是一样的。
|
|
||||||
|
|
||||||
## 字体
|
|
||||||
模板使用的默认字体是<a href="https://developer.harmonyos.com/cn/docs/design/font-0000001157868583" target="_blank">华为鸿蒙字体 (HarmonyOS Sans)</a>。该字体可以免费商用。
|
|
||||||
|
|
||||||
如果对字体不满意,可把字体放进仓库根的 `fonts/` 目录,并在 `theme/beamerfontthemeOUCSlide.sty` 中修改。**注意**:`Path=` 是相对编译时工作目录(= `幻灯片/`)的,所以写 `../fonts/xxx/`,不是 `fonts/`。
|
|
||||||
|
|
||||||
只保留实际用到的 6 个鸿蒙文件(Regular/Bold 及其 Italic,加 SC Regular/Bold)——原先 `幻灯片/fonts/` 里的 Black / Light / Medium / Thin 等 12 个字重全库无人引用,已随目录一并删除,省下 49 MB。
|
|
||||||
|
|
||||||
推荐的字体包括:<a href="https://github.com/adobe-fonts/source-han-sans" target="_blank">思源黑体</a>、<a href="https://alibabafont.taobao.com/wow/alibabafont/act/alifont" target="_blank">阿里普惠字体</a>、<a href="https://www.thosefree.com/oppo-sans" target="_blank">OPPO字体</a>、<a href="https://web.vip.miui.com/page/info/mio/mio/detail?postId=33935854" target="_blank">小米字体</a>。这些字体基本上都可以免费商用,并且效果都很不错。关于他们是否能够继续免费商用的政策,请查阅其官方网站以得到最准确的信息。
|
|
||||||
|
|
||||||
## 颜色
|
|
||||||
根据海大公布的标准颜色,定义了相关颜色。其中文名称和代码如下表所示。
|
|
||||||
|
|
||||||
当然,也可以使用LaTex自带的颜色,例如white、black等。
|
|
||||||
|
|
||||||
| 名称 | 中文名 | 说明 |
|
|
||||||
|--------------|--------------|------|
|
|
||||||
| oucblue | 海大蓝 | 海大标准色 |
|
|
||||||
| ouclightblue | 海大天蓝 | 海大标准色 |
|
|
||||||
| oucred | 海大红 | 海大标准色 |
|
|
||||||
| ouccherry | 樱缤粉 | 海大标准色 |
|
|
||||||
| oucbrown | 文脉棕 | 海大标准色 |
|
|
||||||
| oucgolden | 专金 | 海大标准色 |
|
|
||||||
| oucsilver | 专银 | 海大标准色 |
|
|
||||||
| oucpine | 苍松绿 | 新增,深绿 |
|
|
||||||
| oucdusk | 暮山紫 | 新增,深紫 |
|
|
||||||
| oucamber | 琥珀橙 | 新增,深橘 |
|
|
||||||
|
|
||||||
### 新增的三个颜色
|
|
||||||
|
|
||||||
已有的浅色(樱缤粉、专金、专银)在内容多的时候不太够用,因此补充了三个**较深的颜色**——
|
|
||||||
深色的好处是**和白色文字有足够的对比度**,可以直接当作色块底色(`pointbox`、`titlebox`、
|
|
||||||
`block` 等)使用,不必再担心白字看不清。
|
|
||||||
|
|
||||||
| 名称 | 色值 | 白字对比度 | 命名与定位 |
|
|
||||||
|------|------|-----------|-----------|
|
|
||||||
| `oucpine` | RGB 30, 86, 64 | 8.54 | **苍松绿**——取自传统色「苍松」,色相偏青的深绿,沉静稳重 |
|
|
||||||
| `oucdusk` | RGB 92, 58, 118 | 9.04 | **暮山紫**——取自传统色「暮山紫」(暮色中的远山),深紫而不艳 |
|
|
||||||
| `oucamber` | RGB 196, 82, 16 | 4.60 | **琥珀橙**——取自传统色「琥珀」,高饱和的深橘 |
|
|
||||||
|
|
||||||
三点说明:
|
|
||||||
|
|
||||||
1. **琥珀橙和文脉棕不会混淆**:文脉棕是「低饱和的暗褐」,琥珀橙是「高饱和的深橘」,
|
|
||||||
两者在饱和度上拉开了明显差距(色相接近,但饱和度 0.61 vs 0.98)。
|
|
||||||
2. 三个新颜色**同样带十个色阶**(`oucpine10` ~ `oucpine90` 等),浅色等级可以当背景底。
|
|
||||||
3. 对比度按 WCAG 计算,**≥ 4.5 即白字清晰可读**。三个新颜色都在 4.5 以上
|
|
||||||
(对比度越高,白字越清晰)。
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
## 颜色等级
|
|
||||||
为了显示更丰富的色彩,定义的海大标准色,每一种颜色,都有十个等级,等级越低,颜色越浅。例如:对于海大蓝,其等级颜色从oucblue90-oucblue10不等,分成10个等级。
|
|
||||||
|
|
||||||
## 信息框
|
|
||||||
信息框使用边框的形式,提升幻灯片的表现力。
|
|
||||||
|
|
||||||
主要的信息框包括:列表框(`vcolorbox`)、提示框(`notebox`、`importantbox`)、信息框(`titlebox`)、要点框(`pointbox`)、块(`block`、`exampleblock`、`alertblock`)、标题框(`headbox`)和文本框(`textbox`)。它们的效果,如下图所示。
|
|
||||||
|
|
||||||

|
|
||||||

|
|
||||||

|
|
||||||

|
|
||||||

|
|
||||||

|
|
||||||
|
|
||||||
### 要点框自动排布(pointboxgrid)
|
|
||||||
|
|
||||||
要点框数量多的时候,不需要自己摆 `columns`——用 `pointboxgrid` 环境会自动排成网格:
|
|
||||||
|
|
||||||
```
|
|
||||||
\begin{pointboxgrid}{高度}
|
|
||||||
\pointitem{标题}{颜色}{内容}
|
|
||||||
\pointitem{标题}{颜色}{内容}
|
|
||||||
...
|
|
||||||
\end{pointboxgrid}
|
|
||||||
```
|
|
||||||
|
|
||||||
**排布规则:每行最多 4 个;超过 4 个自动分成多行,并尽量均匀(上行不少于下行)。**
|
|
||||||
|
|
||||||
| 个数 | 排布 | 个数 | 排布 |
|
|
||||||
|------|------|------|------|
|
|
||||||
| 1~4 | 一行 | 9 | 3 + 3 + 3 |
|
|
||||||
| 5 | 3 + 2 | 10 | 4 + 3 + 3 |
|
|
||||||
| 6 | 3 + 3 | 11 | 4 + 4 + 3 |
|
|
||||||
| 7 | 4 + 3 | 12 | 4 + 4 + 4 |
|
|
||||||
| 8 | 4 + 4 | N | 行数 = ⌈N/4⌉,前 N mod 行数 行每行多放一个 |
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
几点说明:
|
|
||||||
|
|
||||||
1. **高度参数的含义和 `pointbox` 的 `height` 一样**,是固定高度——内容别写超,超了会画到框外(见下)。数量多时记得**把高度调小**。
|
|
||||||
2. **行数多了会超出页面底部**。经验值:正文区高约 243pt,总高 ≈ `69 + 行数×高度 + (行数−1)×25`(pt)。
|
|
||||||
所以 **4 行时高度不要超过 24pt**。超过时编译日志里会有 `oucslide Warning` 提醒。
|
|
||||||
3. 想让每行放更多/更少,可改 `\l_ouc_pbg_max`(默认 4);间距可改 `\l_ouc_pbg_gap`(横向,默认 8pt)与
|
|
||||||
`\l_ouc_pbg_vgap`(纵向,默认 6pt)。
|
|
||||||
4. 单个要点框仍然可以像以前那样手写 `columns` + `pointbox`,两种用法并存。
|
|
||||||
|
|
||||||
## 图示组件(扁平风格)
|
|
||||||
|
|
||||||
模板自带 9 个**扁平简约**图示组件:圆角色块 + 实心纯色 + 白字 + 细箭头,
|
|
||||||
**无渐变、无阴影、无立体**。全部用纯 TikZ 绘制,不依赖任何外部绘图宏包。
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
### 颜色:一个或多个都可以
|
|
||||||
|
|
||||||
所有组件的**颜色列表写在方括号里**(可选参数)。写一个就是全部同色,
|
|
||||||
写多个就**按顺序取色、不够时自动循环**:
|
|
||||||
|
|
||||||
```
|
|
||||||
\flatflow[oucblue]{数据采集, 数据清洗, 模型训练, 结果评估} % 全部海大蓝
|
|
||||||
\flatflow[oucblue,oucred,oucpine,oucamber]{数据采集, 数据清洗, 模型训练, 结果评估}
|
|
||||||
% ← 4 个块 4 种颜色
|
|
||||||
\flatflow[oucred,oucblue]{块一, 块二, 块三, 块四, 块五, 块六}
|
|
||||||
% ← 2 色循环:红蓝红蓝红蓝
|
|
||||||
```
|
|
||||||
|
|
||||||
> ⚠️ 颜色**必须写成方括号 `[ ]`**。若误写成花括号 `{ }`,颜色会被当成第一个条目,
|
|
||||||
> 编译时会报 `图示组件的颜色要写在方括号里` 的明确错误(不会静默出错)。
|
|
||||||
|
|
||||||
### 九个组件速查
|
|
||||||
|
|
||||||
| 命令 | 说明 |
|
| 命令 | 说明 |
|
||||||
|------|------|
|
|---|---|
|
||||||
| `\flatflow[颜色]{条目1, 条目2, ...}` | **横向箭头流程**,自动等分满宽 |
|
| `\title{}` | 主标题 |
|
||||||
| `\flatstack[颜色]{条目1, 条目2, ...}` | 纵向流程 |
|
| `\subtitle{}` | 副标题 |
|
||||||
| `\flatcycle[颜色]{条目1, ...}` | 循环图(弧线箭头首尾相接) |
|
| `\author{}` | 作者 |
|
||||||
| `\flathub[颜色]{中心文字}{环绕1, 环绕2, ...}` | **中心辐射**(中心圆 + 环绕卡片) |
|
| `\date{}` | 日期 |
|
||||||
| `\flatsteps[颜色]{条目1, ...}` | 阶梯递进 |
|
| `\institute{}` | 单位 |
|
||||||
| `\flattime[颜色]{年份列表}{事件列表}` | 时间轴(节点上下交替) |
|
| `\last` | 结束页文字 |
|
||||||
| `\flatquad[颜色]{左上}{右上}{左下}{右下}` | 四象限 |
|
|
||||||
| `\flatpyramid[颜色]{顶层, ..., 底层}` | 金字塔(上窄下宽) |
|
|
||||||
| `\flatcompare[左色][右色]{左标题}{左内容}{右标题}{右内容}` | 左右对比 |
|
|
||||||
|
|
||||||
示例(`slides.tex` 里有完整的 5 页演示):
|
`aspectratio=169` 是 16:9。要 4:3 改成 `aspectratio=43`。
|
||||||
|
|
||||||
```
|
## 文档骨架
|
||||||
\flatflow[oucblue,oucred,oucpine,oucamber]{数据采集, 数据清洗, 模型训练, 结果评估}
|
|
||||||
|
|
||||||
\flathub[oucblue,oucred,oucpine,oucamber,oucdusk]{核心}{可行性, 必要性, 创新性, 实用性}
|
```latex
|
||||||
|
\begin{document}
|
||||||
|
|
||||||
\flattime[oucblue,oucred,oucpine,oucdusk]{2020, 2021, 2023, 2025}{立项, 方案设计, 中期检查, 结题验收}
|
\maketitle % 标题页
|
||||||
|
\makeoutline % 目录页
|
||||||
|
|
||||||
\flatcompare[oucpine][oucred]{优势}{响应快、成本低、易于维护}{不足}{精度受限、依赖数据质量}
|
\section{简介}
|
||||||
|
\subsection{模板简介}
|
||||||
|
\begin{frame}
|
||||||
|
\frametitle{简介}
|
||||||
|
正文内容。
|
||||||
|
\end{frame}
|
||||||
|
|
||||||
|
\makeoutline % 每节前重复目录(可选)
|
||||||
|
|
||||||
|
\section{下一节}
|
||||||
|
\begin{frame}
|
||||||
|
\frametitle{页面标题}
|
||||||
|
...
|
||||||
|
\end{frame}
|
||||||
|
|
||||||
|
\makelast % 结束页
|
||||||
|
\end{document}
|
||||||
```
|
```
|
||||||
|
|
||||||
`\flatquad` 与 `\flatcompare` 的颜色是独立的固定参数(分别 1 个和 2 个),
|
| 命令 | 说明 |
|
||||||
不参与循环取色。
|
|---|---|
|
||||||
|
| `\maketitle` | 标题页 |
|
||||||
|
| `\makeoutline` | 目录页,可在每节前反复调用 |
|
||||||
|
| `\makelast` | 结束页,显示 `\last` 的内容 |
|
||||||
|
|
||||||
### 几点说明
|
## 单页写法
|
||||||
|
|
||||||
1. 颜色可以直接用模板的 10 个颜色(`oucblue`、`oucred`、`oucpine`、`oucdusk`、`oucamber` 等)。
|
```latex
|
||||||
2. 横向流程会自动把 N 个块加间隙**摊满整行**,不需要手算宽度。
|
\begin{frame}
|
||||||
3. 纵向对比、四象限这类元素较宽,建议用 `\begin{center}...\end{center}` 居中。
|
\frametitle{页面标题}
|
||||||
4. 这套组件已用 TeX Live 2022~2026 逐一编译验证:0 错误、0 溢出,且跨版本渲染逐像素一致。
|
\begin{itemize}
|
||||||
|
\item 第一点
|
||||||
|
\item 第二点
|
||||||
|
\end{itemize}
|
||||||
|
\end{frame}
|
||||||
|
```
|
||||||
|
|
||||||
## 代码
|
分栏:
|
||||||
|
|
||||||
模板可以插入代码块,使用`lstlisting`即可。
|
```latex
|
||||||
|
\begin{frame}
|
||||||
|
\frametitle{两栏}
|
||||||
|
\begin{columns}
|
||||||
|
\begin{column}{0.48\textwidth}
|
||||||
|
左栏内容
|
||||||
|
\end{column}
|
||||||
|
\begin{column}{0.48\textwidth}
|
||||||
|
右栏内容
|
||||||
|
\end{column}
|
||||||
|
\end{columns}
|
||||||
|
\end{frame}
|
||||||
|
```
|
||||||
|
|
||||||
## 公式
|
## 主题与配色
|
||||||
模板中可以直接插入公式,和LaTex中没有什么区别。
|
|
||||||
|
|
||||||
## 脚注
|
主题在 `theme/` 下,分五块:整体、配色、字体、内部元素、外部元素。
|
||||||
可以在任何地方使用脚注。即便是在各种信息框中也可以。
|
改配色看 `beamercolorthemeOUCSlide.sty`,改字体看
|
||||||
|
`beamerfontthemeOUCSlide.sty`。
|
||||||
|
|
||||||
|
已加载的宏包:
|
||||||
|
|
||||||
|
| 宏包 | 用途 |
|
||||||
|
|---|---|
|
||||||
|
| `tcolorbox` | 彩色盒子 |
|
||||||
|
| `fontawesome` | 图标 |
|
||||||
|
| `caption` / `subcaption` | 图注 |
|
||||||
|
| `verbatim` | 代码原样输出 |
|
||||||
|
|
||||||
|
## 插图
|
||||||
|
|
||||||
|
图片放 `figs/`:
|
||||||
|
|
||||||
|
```latex
|
||||||
|
\begin{figure}
|
||||||
|
\centering
|
||||||
|
\includegraphics[width=0.6\textwidth]{figs/fig01.png}
|
||||||
|
\caption{图标题}
|
||||||
|
\end{figure}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 版式
|
||||||
|
|
||||||
|
```
|
||||||
|
16:9(aspectratio=169)
|
||||||
|
顶部对齐(t 选项)
|
||||||
|
海大蓝配色
|
||||||
|
标题页 + 目录页 + 内容页 + 结束页
|
||||||
|
页脚含校徽、页码、作者
|
||||||
|
```
|
||||||
|
|
||||||
|
## 自定义命令
|
||||||
|
|
||||||
|
| 命令 | 用途 |
|
||||||
|
|---|---|
|
||||||
|
| `\maketitle` | 标题页 |
|
||||||
|
| `\makeoutline` | 目录页 |
|
||||||
|
| `\makelast` | 结束页 |
|
||||||
|
| `\banner{}` | 横幅标题 |
|
||||||
|
| `\oucurl{url}` | 排网址链接 |
|
||||||
|
| `\bottomslider` / `\topslider` | 底部/顶部进度条 |
|
||||||
|
| `\footerlogo` | 页脚校徽 |
|
||||||
|
|
||||||
|
## 注意
|
||||||
|
|
||||||
|
示例内容为虚构数据,使用时全部替换。
|
||||||
+1
-1
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
%% 版本:1.0
|
%% 版本:1.0
|
||||||
%% 2022-05-07
|
%% 2022-05-07
|
||||||
%% 作者:杨永全
|
%% 作者:中国海洋大学 LaTeX 模板库
|
||||||
%% 本文件的主要作用,是为了定义基本结构
|
%% 本文件的主要作用,是为了定义基本结构
|
||||||
|
|
||||||
%原模板代码
|
%原模板代码
|
||||||
|
|||||||
Binary file not shown.
+3
-3
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
%% 版本:1.0
|
%% 版本:1.0
|
||||||
%% 2022-05-07
|
%% 2022-05-07
|
||||||
%% 作者:杨永全
|
%% 作者:张远航(示例占位,非真人)
|
||||||
\documentclass[aspectratio=169,UTF8,t]{beamer}%比例是16:9,UTF8编码支持,顶部对齐
|
\documentclass[aspectratio=169,UTF8,t]{beamer}%比例是16:9,UTF8编码支持,顶部对齐
|
||||||
\usepackage{oucslide}
|
\usepackage{oucslide}
|
||||||
\usepackage[UTF8]{ctex}
|
\usepackage[UTF8]{ctex}
|
||||||
@@ -18,7 +18,7 @@
|
|||||||
%基本信息
|
%基本信息
|
||||||
\title{中国海洋大学幻灯片LaTex模板}
|
\title{中国海洋大学幻灯片LaTex模板}
|
||||||
\subtitle{助力你的科研梦想}
|
\subtitle{助力你的科研梦想}
|
||||||
\author{杨永全}
|
\author{张远航}
|
||||||
\date{\today}
|
\date{\today}
|
||||||
\institute{计算机科学与技术学院}
|
\institute{计算机科学与技术学院}
|
||||||
\newcommand{\last}{敬请批评指正!} %结束语
|
\newcommand{\last}{敬请批评指正!} %结束语
|
||||||
@@ -63,7 +63,7 @@
|
|||||||
\begin{frame}
|
\begin{frame}
|
||||||
\frametitle{模板使用方法}
|
\frametitle{模板使用方法}
|
||||||
\begin{enumerate}
|
\begin{enumerate}
|
||||||
\item 从git上clone整个文件夹目录\footnote{https://git.yangyq.net/laoyang/ouc-slide-latex-template.git }\footnote{https://github.com/dryangyq/ouc-slide-latex-template.git}\footnote{https://gitee.com/dryangyq/ouc-slide-latex-template.git}\footnote{https://gitlab.com/dryangyq/ouc-slide-latex-template.git}\\~
|
\item 从git上clone整个文件夹目录\footnote{https://code.yangyq.net/laoyang/ouc\_latex\_template.git}\\~
|
||||||
\item 编辑tex文件进行修改\\~
|
\item 编辑tex文件进行修改\\~
|
||||||
\item 编译tex文件为PDF\\~
|
\item 编译tex文件为PDF\\~
|
||||||
\begin{enumerate}
|
\begin{enumerate}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
%% 版本:1.0
|
%% 版本:1.0
|
||||||
%% 作者:杨永全
|
%% 作者:中国海洋大学 LaTeX 模板库
|
||||||
%% 本文件的主要作用,是为了定义海大标准颜色
|
%% 本文件的主要作用,是为了定义海大标准颜色
|
||||||
%% 完成时间:2022-05-09
|
%% 完成时间:2022-05-09
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
%!TEX program = xelatex
|
%!TEX program = xelatex
|
||||||
|
|
||||||
%% 版本:1.0
|
%% 版本:1.0
|
||||||
%% 作者:杨永全
|
%% 作者:中国海洋大学 LaTeX 模板库
|
||||||
%% 本文件的主要作用,是定义各种元素的字体
|
%% 本文件的主要作用,是定义各种元素的字体
|
||||||
%% 完成日期:2022-05-09
|
%% 完成日期:2022-05-09
|
||||||
|
|
||||||
@@ -13,7 +13,6 @@
|
|||||||
%======================================================================
|
%======================================================================
|
||||||
% 字体全部取自仓库公共字体包 ../../fonts.tex(文件在 ../../fonts/ 下)。
|
% 字体全部取自仓库公共字体包 ../../fonts.tex(文件在 ../../fonts/ 下)。
|
||||||
%
|
%
|
||||||
% 旧版这里是 Path=fonts/ 直接读本目录下的 幻灯片/fonts/ —— 那 18 个
|
|
||||||
% 鸿蒙字体文件共 49MB,与其它模板重复,且一旦别处升级就会版本不一致。
|
% 鸿蒙字体文件共 49MB,与其它模板重复,且一旦别处升级就会版本不一致。
|
||||||
% 现在统一到仓库根的 fonts/,全库只有一份。
|
% 现在统一到仓库根的 fonts/,全库只有一份。
|
||||||
%
|
%
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
%% 版本:1.0
|
%% 版本:1.0
|
||||||
%% 作者:杨永全
|
%% 作者:中国海洋大学 LaTeX 模板库
|
||||||
%% 本文件的主要目的,是为了定义列表等内部元素的样式
|
%% 本文件的主要目的,是为了定义列表等内部元素的样式
|
||||||
%% 完成时间:2022-05-09
|
%% 完成时间:2022-05-09
|
||||||
|
|
||||||
@@ -234,7 +234,7 @@
|
|||||||
\int_use:N \l_ouc_pbg_n
|
\int_use:N \l_ouc_pbg_n
|
||||||
- \int_use:N \l_ouc_pbg_base * \int_use:N \l_ouc_pbg_rows
|
- \int_use:N \l_ouc_pbg_base * \int_use:N \l_ouc_pbg_rows
|
||||||
}
|
}
|
||||||
%% 预估总高度并与正文可用高度比较(公式按实测校准):
|
%% 预估总高度并与正文可用高度比较(公式按实际校准):
|
||||||
%% 总高 ≈ 69pt(首行含标题条) + 行数*高度 + (行数-1)*25pt(行间距)
|
%% 总高 ≈ 69pt(首行含标题条) + 行数*高度 + (行数-1)*25pt(行间距)
|
||||||
\dim_set:Nn \l_ouc_pbg_est
|
\dim_set:Nn \l_ouc_pbg_est
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
%% 版本:1.0
|
%% 版本:1.0
|
||||||
%% 作者:杨永全
|
%% 作者:中国海洋大学 LaTeX 模板库
|
||||||
%% 本文件的主要作用是定义主题的框架结构等模板信息
|
%% 本文件的主要作用是定义主题的框架结构等模板信息
|
||||||
%% 完成时间:2022-05-09
|
%% 完成时间:2022-05-09
|
||||||
|
|
||||||
@@ -275,10 +275,10 @@
|
|||||||
%% 方框内文字的字体(字号由 \ouc@toc@compute 算出)
|
%% 方框内文字的字体(字号由 \ouc@toc@compute 算出)
|
||||||
\def\ouc@toc@fontsel{\fontsize{\ouc@toc@font}{\ouc@toc@base}\selectfont\bfseries}
|
\def\ouc@toc@fontsel{\fontsize{\ouc@toc@font}{\ouc@toc@base}\selectfont\bfseries}
|
||||||
|
|
||||||
%% 圆形序号徽标(#1 = 圆圈填充色,#2 = 数字)
|
%% 圆形序号徽标(= 圆圈填充色,#2 = 数字)
|
||||||
%% 注意:这里刻意不加 \strut。\strut 会把内容盒撑成「0.7 倍行距的上高 + 0.3 倍行距的下深」,
|
%% 注意:这里刻意不加 \strut。\strut 会把内容盒撑成「0.7 倍行距的上高 + 0.3 倍行距的下深」,
|
||||||
%% 而数字没有下伸部(descender),那段虚构的下深会把数字整体推高,在圆里明显偏上
|
%% 而数字没有下伸部(descender),那段虚构的下深会把数字整体推高,在圆里明显偏上
|
||||||
%% (实测偏上约 1.7pt,大字号时可达 4pt)。去掉 \strut 后数字墨迹与圆心对齐(实测偏差 < 0.1pt)。
|
%% (实际偏上约 1.7pt,大字号时可达 4pt)。去掉 \strut 后数字墨迹与圆心对齐(实际偏差 < 0.1pt)。
|
||||||
%% 圆的垂直位置不受影响:圆心到基线的距离恒为 minimum size 的一半(0.6em)。
|
%% 圆的垂直位置不受影响:圆心到基线的距离恒为 minimum size 的一半(0.6em)。
|
||||||
\def\ouc@toc@badge#1#2{%
|
\def\ouc@toc@badge#1#2{%
|
||||||
\tikz[baseline=(ouc@badge.base)]{%
|
\tikz[baseline=(ouc@badge.base)]{%
|
||||||
@@ -286,7 +286,7 @@
|
|||||||
minimum size=\ouc@toc@badgesize, font=\bfseries] (ouc@badge) {#2};%
|
minimum size=\ouc@toc@badgesize, font=\bfseries] (ouc@badge) {#2};%
|
||||||
}%
|
}%
|
||||||
}
|
}
|
||||||
%% 实心样式下用的空心序号(#1 = 描边色,#2 = 数字;同样不加 \strut)
|
%% 实心样式下用的空心序号(= 描边色,#2 = 数字;同样不加 \strut)
|
||||||
\def\ouc@toc@badgeopen#1#2{%
|
\def\ouc@toc@badgeopen#1#2{%
|
||||||
\tikz[baseline=(ouc@badge.base)]{%
|
\tikz[baseline=(ouc@badge.base)]{%
|
||||||
\node[circle, draw=#1, line width=0.8pt, text=#1, inner sep=0pt,
|
\node[circle, draw=#1, line width=0.8pt, text=#1, inner sep=0pt,
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
%% 版本:1.0
|
%% 版本:1.0
|
||||||
%% 2022-05-07
|
%% 2022-05-07
|
||||||
%% 作者:杨永全
|
%% 作者:中国海洋大学 LaTeX 模板库
|
||||||
%%本文件的主要目的,是为了定义幻灯片主题
|
%%本文件的主要目的,是为了定义幻灯片主题
|
||||||
|
|
||||||
\RequirePackage{booktabs}
|
\RequirePackage{booktabs}
|
||||||
|
|||||||
+74
-278
@@ -1,319 +1,115 @@
|
|||||||
# 成绩构成说明 — 中国海洋大学《成绩构成说明》(LaTeX 版)
|
# 成绩构成说明
|
||||||
|
|
||||||
把任课教师手写的「成绩构成说明」做成 LaTeX 模板。原件是一份填过的
|
中国海洋大学课程成绩构成说明表,A4 单页,正文小四(12pt)。
|
||||||
`.doc` 实例(两段话 + 标题,无表格、无签字栏),本模板在**保留其信息
|
|
||||||
内容**的前提下重新组织,并补齐归档必需项。
|
|
||||||
|
|
||||||
> **本模板不含原件任何真实数据。** 课程名、学年、学期、教师姓名、
|
|
||||||
> 所有比例、日期一律 `××××` / `20××` / `×` 占位,已 grep 验证零命中。
|
|
||||||
|
|
||||||
## 目录
|
|
||||||
|
|
||||||
- [文件](#文件)
|
|
||||||
- [编译](#编译)
|
|
||||||
- [改内容](#改内容)
|
|
||||||
- [相对于原件的改动](#相对于原件的改动)
|
|
||||||
- [比例自洽校验](#比例自洽校验)
|
|
||||||
- [版式参数](#版式参数)
|
|
||||||
- [五个坑](#五个坑)
|
|
||||||
- [真实数据零泄漏](#真实数据零泄漏)
|
|
||||||
- [字体](#字体)
|
|
||||||
|
|
||||||
## 文件
|
|
||||||
|
|
||||||
| 文件 | 说明 |
|
|
||||||
| :-- | :-- |
|
|
||||||
| `成绩构成说明.tex` | 主文件。填表只改第 1 节(10 个宏) |
|
|
||||||
| `oucgrade.sty` | 版式包。页面/字体/表格/签字栏,附换算注释 |
|
|
||||||
| `成绩构成说明.pdf` | 成品样张(1 页) |
|
|
||||||
|
|
||||||
## 编译
|
## 编译
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
cd 成绩构成说明
|
||||||
xelatex 成绩构成说明.tex
|
xelatex 成绩构成说明.tex
|
||||||
```
|
```
|
||||||
|
|
||||||
**单页,跑一遍即可**(无交叉引用,不需要 bibtex)。
|
或仓库根:`bash build.sh 成绩构成说明`
|
||||||
|
|
||||||
⚠️ 必须在**本目录**下编译,不要从仓库根调用 —— `fonts.tex` 用的是
|
## 文件
|
||||||
相对路径 `../fonts/`。
|
|
||||||
|
|
||||||
需要 XeLaTeX,并安装 `ctex`、`geometry`、`fontspec`、`xeCJK`、
|
| 文件 | 说明 |
|
||||||
`tabularray`、`enumitem`、`graphicx`。实测环境:TeX Live 2022。
|
|---|---|
|
||||||
|
| `成绩构成说明.tex` | 主文件,填内容改这里 |
|
||||||
|
| `oucgrade.sty` | 版式包,一般不改 |
|
||||||
|
|
||||||
## 改内容
|
## 填写参数
|
||||||
|
|
||||||
### 课程信息(10 个宏)
|
改 `\begin{document}` 之后的第 1 节,共 10 个宏,正文不用动:
|
||||||
|
|
||||||
```latex
|
```latex
|
||||||
\newcommand{\grdcourse}{××××} % 课程名称
|
\newcommand{\grdcourse}{数字逻辑} % 课程名称
|
||||||
\newcommand{\grdyear}{20××} % 学年
|
\newcommand{\grdyear}{2025} % 学年
|
||||||
\newcommand{\grdseason}{×} % 季学期(春 / 秋)
|
\newcommand{\grdseason}{秋} % 季学期(春 / 秋)
|
||||||
\newcommand{\grdteacher}{×××} % 任课教师
|
\newcommand{\grdteacher}{张远航} % 任课教师
|
||||||
|
|
||||||
\newcommand{\grdtheory}{80} % 理论课占总成绩 %
|
\newcommand{\grdtheory}{80} % 理论课占总成绩
|
||||||
\newcommand{\grdlab}{20} % 实验课占总成绩 %
|
\newcommand{\grdlab}{20} % 实验课占总成绩
|
||||||
|
|
||||||
\newcommand{\grddaily}{30} % 平时成绩占理论课 %
|
\newcommand{\grddaily}{30} % 平时成绩占理论课
|
||||||
\newcommand{\grdfinal}{70} % 期末考试成绩占理论课 %
|
\newcommand{\grdfinal}{70} % 期末考试成绩占理论课
|
||||||
|
|
||||||
\newcommand{\grdhw}{20} % 作业占理论课 %
|
\newcommand{\grdhw}{20} % 作业占理论课
|
||||||
\newcommand{\grdattend}{10} % 点名占理论课 %
|
\newcommand{\grdattend}{10} % 点名占理论课
|
||||||
|
|
||||||
\newcommand{\grdlabnote}{由实验课教师根据实验报告与实验操作评定。}
|
\newcommand{\grdlabnote}{由实验课教师根据实验报告与实验操作评定。}
|
||||||
```
|
```
|
||||||
|
|
||||||
**只填数字,不要带 `%` 号**,百分号由模板加。
|
| 参数 | 说明 |
|
||||||
|
|---|---|
|
||||||
|
| `\grdcourse` | 课程名称 |
|
||||||
|
| `\grdyear` | 学年 |
|
||||||
|
| `\grdseason` | 季学期,春 / 秋 |
|
||||||
|
| `\grdteacher` | 任课教师 |
|
||||||
|
| `\grdtheory` | 理论课占总成绩百分比 |
|
||||||
|
| `\grdlab` | 实验课占总成绩百分比 |
|
||||||
|
| `\grddaily` | 平时成绩占理论课百分比 |
|
||||||
|
| `\grdfinal` | 期末考试占理论课百分比 |
|
||||||
|
| `\grdhw` | 作业占理论课百分比 |
|
||||||
|
| `\grdattend` | 点名占理论课百分比 |
|
||||||
|
| `\grdlabnote` | 实验课评定方式,一句话说明 |
|
||||||
|
|
||||||
### 「占本类」与「占总成绩」是两回事
|
百分数只填数字,不要带 `%`。
|
||||||
|
|
||||||
这是本模板最要紧的一个设计,见下节。
|
## 比例必须自洽
|
||||||
|
|
||||||
### 改写正文
|
模板会自动检查三组加法:
|
||||||
|
|
||||||
- 总述:`\grdpara{...}`
|
|
||||||
- 分节:`\grdsec{一、成绩构成}`
|
|
||||||
- 列表:`\begin{grdlist} \grditem{项}{:说明} \end{grdlist}`
|
|
||||||
- 表格单元格:`\grdth{}`(表头)/ `\grdtd{}`(表身)
|
|
||||||
|
|
||||||
## 相对于原件的改动
|
|
||||||
|
|
||||||
原件全文只有这些内容:
|
|
||||||
|
|
||||||
```
|
```
|
||||||
成绩构成说明
|
理论课 + 实验课 = 100
|
||||||
数字逻辑 2025学年 秋季学期 期末考试
|
平时成绩 + 期末考试 = 理论课
|
||||||
理论课成绩占总成绩的80%。理论课成绩包括平时成绩、期末考试成绩。
|
作业 + 点名 = 平时成绩
|
||||||
平时成绩占30%(作业占20%,点名占10%),期末考试成绩占70%。
|
|
||||||
实验成绩占总成绩的20%。由实验课老师提供。
|
|
||||||
```
|
|
||||||
|
|
||||||
它的问题有四个,逐个解决:
|
|
||||||
|
|
||||||
### 1. 三层百分数混用不同基准,读者要心算三轮
|
|
||||||
|
|
||||||
| 句子 | 百分数 | **基准实际是** | 折总成绩 |
|
|
||||||
| :-- | --: | :-- | --: |
|
|
||||||
| 理论课占总成绩的 80% | 80% | 总成绩 | 80% |
|
|
||||||
| 平时成绩占 30% | 30% | **理论课** | 24% |
|
|
||||||
| 作业占 20% | 20% | **理论课** | 16% |
|
|
||||||
| 期末考试成绩占 70% | 70% | **理论课** | 56% |
|
|
||||||
|
|
||||||
「平时占 30%」看着像占总成绩三成,实际上只占 **24%**。教务抽查时
|
|
||||||
这里最常被挑错,学生也容易误读。
|
|
||||||
|
|
||||||
**改法**:表格左右并置「占本类」与「占总成绩」两列,后者由
|
|
||||||
`\grdcalc{理论课\%}{分项\%}` 自动算出,不给心算留余地。
|
|
||||||
|
|
||||||
### 2. 层级关系埋在句子里
|
|
||||||
|
|
||||||
「平时成绩占30%(作业占20%,点名占10%)」—— 括号里的两个数加起来
|
|
||||||
才是括号外的数,这种嵌套在一个句子里读起来要来回扫。
|
|
||||||
|
|
||||||
**改法**:改成 6 列表格,一级项目跨行合并,层级一眼可见。
|
|
||||||
|
|
||||||
### 3. 没有说明「怎么算」
|
|
||||||
|
|
||||||
原件说了比例,没说作业怎么平均、缺交怎么扣、点名缺几次记零。
|
|
||||||
这些是学生真正会问的,也是申诉时的依据。
|
|
||||||
|
|
||||||
**改法**:新增「二、分项说明」一节,用列表逐项写清(文字留占位,
|
|
||||||
任课教师按自己课程的规则填)。
|
|
||||||
|
|
||||||
### 4. 没有签字栏
|
|
||||||
|
|
||||||
**这是用户明确要求补的。** 没有任课教师签字的成绩构成说明,在教务
|
|
||||||
归档时不被认作有效文件。
|
|
||||||
|
|
||||||
**改法**:右下角落款,含签字线与「20×× 年 月 日」。
|
|
||||||
|
|
||||||
### 另外新增(可关闭)
|
|
||||||
|
|
||||||
「三、成绩评定与异议」一节 —— 说明总成绩如何取整、异议如何在几个
|
|
||||||
工作日内提出。原件没有,但归档材料有这一节更完整。
|
|
||||||
|
|
||||||
不要的话把 `.tex` 里这个开关改成 0:
|
|
||||||
|
|
||||||
```latex
|
|
||||||
\def\grdwithini{0} % 1=印这一节,0=不印
|
|
||||||
```
|
|
||||||
|
|
||||||
⚠️ 关掉后正文变短,签字栏会往上移。若想让它仍贴底部,把 `oucgrade.sty`
|
|
||||||
里签字块前的 `\par\vspace{3mm}` 调大即可(见[坑 3](#坑-3签字栏被挤到第-2-页))。
|
|
||||||
|
|
||||||
## 比例自洽校验
|
|
||||||
|
|
||||||
模板会检查三组加法:
|
|
||||||
|
|
||||||
```
|
|
||||||
平时 + 期末 = 100 (构成全部理论课)
|
|
||||||
作业 + 点名 = 平时 (构成全部平时成绩)
|
|
||||||
理论课 + 实验课 = 100 (构成全部总成绩)
|
|
||||||
```
|
```
|
||||||
|
|
||||||
不通过时:
|
不通过时:
|
||||||
|
- 编译 log 里打 `*** oucgrade: 比例不自洽 ***`
|
||||||
|
- PDF 上印一个醒目的提示
|
||||||
|
|
||||||
1. `.log` 里打出
|
## 表格结构
|
||||||
`*** oucgrade: 比例不自洽 --- 作业+点名 应构成全部平时成绩: 实际 25+10, 应为 30 ***`
|
|
||||||
2. PDF **标题正下方**印一行红字警告
|
|
||||||
|
|
||||||
**为什么值得做**:成绩构成说明是要归档、要被抽查的文件,比例加不起来
|
| 区段 | 内容 |
|
||||||
是最常见也最难被自己发现的错误 —— 原件那句「平时 30%(作业 20%,
|
|---|---|
|
||||||
点名 10%)」正是靠心算才看得出 20+10=30。
|
| 表头 | 课程名称、学年学期、任课教师 |
|
||||||
|
| 总成绩构成 | 理论课 / 实验课两行,各占百分比 |
|
||||||
|
| 理论课内部 | 平时成绩 / 期末考试 |
|
||||||
|
| 平时成绩内部 | 作业 / 点名 |
|
||||||
|
| 实验课说明 | 一行文字 |
|
||||||
|
| 签字栏 | 任课教师、教研室主任、教学院长 |
|
||||||
|
|
||||||
**已做负面测试**:把 `\grdhw` 从 20 改成 25 重编,log 报
|
## 改表格内文字
|
||||||
`实际 25+10, 应为 30`,PDF 第 1 页顶部出现警告;改回 20 后警告消失。
|
|
||||||
|
|
||||||
⚠️ 警告印在**开头**不是文末。文末的提示会被签字栏挤到第 2 页,
|
正文里表格用标准 `tabular`,各格改写直接改文字。
|
||||||
而第 2 页通常没人翻 —— 等于没提示。
|
|
||||||
|
|
||||||
## 版式参数
|
### 常用命令
|
||||||
|
|
||||||
### 页面
|
| 命令 | 用途 |
|
||||||
|
|---|---|
|
||||||
|
| `\grdmaintitle` | 主标题 |
|
||||||
|
| `\grdsubtitle` | 副标题 |
|
||||||
|
| `\grdsubtitleline` | 副标题下横线 |
|
||||||
|
| `\grdsec{标题}` | 分区标题 |
|
||||||
|
| `\grditem{文字}` | 条目 |
|
||||||
|
| `\grdpara{文字}` | 段落 |
|
||||||
|
| `\grdth{内容}` | 表头格 |
|
||||||
|
| `\grdtd{内容}` | 表体格 |
|
||||||
|
| `\grdcalc{算式}` | 算式格(自动排版) |
|
||||||
|
| `\grdsignblock` | 签字栏整块 |
|
||||||
|
| `\grdsmall{文字}` | 小字 |
|
||||||
|
| `\grdcheck` | 运行比例校验 |
|
||||||
|
| `\grdwarnifbad` | 不自洽时印警告 |
|
||||||
|
|
||||||
| 项 | 值 | 来源 |
|
## 版式
|
||||||
| :-- | --: | :-- |
|
|
||||||
| 纸张 | A4 210×297mm | `pgSz 11906×16838` twips |
|
|
||||||
| 上下边距 | 25.40mm | `pgMar top/bottom 1440` |
|
|
||||||
| 左右边距 | 31.75mm | `pgMar left/right 1800` |
|
|
||||||
| 版心 | 146.50 × 246.20mm | 210−2×31.75 / 297−2×25.40 |
|
|
||||||
| 页脚距 | 17.51mm | `pgMar footer 992` |
|
|
||||||
|
|
||||||
换算:`mm = twips / 1440 × 25.4`,`pt = twips / 20`。
|
|
||||||
|
|
||||||
### 字号
|
|
||||||
|
|
||||||
| 用途 | 原件 (w:sz) | 本模板 | 实测输出 |
|
|
||||||
| :-- | --: | --: | --: |
|
|
||||||
| 大标题 | 36 半磅 = 18pt | `18bp` | 18.00 |
|
|
||||||
| 副标题 | 24 = 12pt | `12bp` | 12.00 |
|
|
||||||
| 正文 | 28 = 14pt | `14bp` | 14.00 |
|
|
||||||
| 表格/签字 | — | `12bp` | 12.00 |
|
|
||||||
|
|
||||||
⚠️ **必须写 `bp` 不能写 `pt`**。Word 的 pt 是 PostScript pt(1/72 in),
|
|
||||||
TeX 默认 pt 是 1/72.27 in,差 0.36%。写 `14pt` 实测输出 14.05。
|
|
||||||
|
|
||||||
### 行距
|
|
||||||
|
|
||||||
| 用途 | 值 | 说明 |
|
|
||||||
| :-- | --: | :-- |
|
|
||||||
| 正文 | 21.5bp | 14pt 的 1.54 倍 |
|
|
||||||
| 表格/签字 | 17bp | 12pt 的 1.42 倍 |
|
|
||||||
|
|
||||||
原件 `docGrid linePitch=312` = 15.6pt,对 14pt 字只有 1.11 倍,太挤。
|
|
||||||
本模板用 21.5bp(1.54 倍)—— 这是**有意的改善**,不是复刻。
|
|
||||||
21.5 是为压到一页反复试出来的值,可读下限约 1.4 倍,还有余量。
|
|
||||||
|
|
||||||
### 表格列宽
|
|
||||||
|
|
||||||
6 列,Σ wd = 123.64mm:
|
|
||||||
|
|
||||||
| 列 | 宽 | 内容 |
|
|
||||||
| :-- | --: | :-- |
|
|
||||||
| 项目 | 22.00mm | 理论课 / 实验课 |
|
|
||||||
| 占本类 | 14.00mm | 80% |
|
|
||||||
| 细分项目 | 26.00mm | 平时成绩 / 期末 |
|
|
||||||
| 占本类 | 14.00mm | 30% |
|
|
||||||
| 占总成绩 | 17.00mm | 24% |
|
|
||||||
| 评定依据 | 30.28mm | 作业 + 出勤 |
|
|
||||||
|
|
||||||
**Σwd 为什么是 123.64 而不是 146.50**:`Q[wd=...]` 是内容区宽度,
|
|
||||||
不含 `colsep`。每列实际占位 = `wd + 2×colsep`,6 列共多占
|
|
||||||
`6×2×1.905 = 22.86mm`。所以
|
|
||||||
`Σwd = 146.50 − 22.86 = 123.64mm`。
|
|
||||||
|
|
||||||
## 五个坑
|
|
||||||
|
|
||||||
### 坑 1:`.tex` 里写带 `@` 的宏名
|
|
||||||
|
|
||||||
`.tex` 文档中 `@` 的 catcode 是 12(其他),不是 11(字母)。写
|
|
||||||
`\grd@chk` 会被解析成 `\grd` + `@chk`,报
|
|
||||||
`! LaTeX Error: Missing \begin{document}`,并且**连累后面所有内容**
|
|
||||||
(报一串 Undefined control sequence)。
|
|
||||||
|
|
||||||
**规矩**:带 `@` 的内部宏一律定义在 `.sty` 里,`.tex` 只调用不带 `@`
|
|
||||||
的公开接口(如 `\grdcheck`)。
|
|
||||||
|
|
||||||
### 坑 2:tabularray 的 `hline{}` 里不能用带 `@` 的宏
|
|
||||||
|
|
||||||
```latex
|
|
||||||
hline{1,Z}={\grd@rulev} % ✗ 报 \l__tblr_v_tl ->\grd @rulev
|
|
||||||
hline{1,Z}={0.5pt} % ✓ 写字面值
|
|
||||||
```
|
|
||||||
|
|
||||||
tabularray 把 `hline` 的参数当**字符串重新 tokenize**,那一刻 `@` 的
|
|
||||||
catcode 已经退化,宏名在 `@` 处断开。
|
|
||||||
|
|
||||||
**规矩**:`hline` / `vline` 的线宽写字面值,别用宏包一层。
|
|
||||||
|
|
||||||
### 坑 3:签字栏被挤到第 2 页
|
|
||||||
|
|
||||||
试过四种写法,只有最后一种同时满足「一页」+「不出界」:
|
|
||||||
|
|
||||||
| 写法 | 结果 |
|
|
||||||
| :-- | :-- |
|
|
||||||
| `\par\vspace{4mm}` + minipage | ✗ 翻页(minipage 紧跟 `\par` 是合法断页点) |
|
|
||||||
| `\vfill` 顶到底部 | ✗ 不翻页但**出界**:年月日 y=774.9,版心底只有 771.6 |
|
|
||||||
| `\vfill` + 块内 `\vspace*{5mm}` | ✗ 又翻页(`\vfill` 与块高之和超出剩余空间时,TeX 不接受压缩 `\vfill`,只能整块搬迁) |
|
|
||||||
| `\par\vspace{3mm}` + minipage | ✓ 一页,内容底 769.8,余 1.8pt |
|
|
||||||
|
|
||||||
**结论**:不要指望竖直胶帮你「自动贴底」。单页文档里最稳的是
|
|
||||||
**固定间距 + 实测校准** —— 改正文后重编一次,看内容底距 771.6 还有多少。
|
|
||||||
|
|
||||||
### 坑 4:minipage 内部用 `\hfill` 做右对齐
|
|
||||||
|
|
||||||
```latex
|
|
||||||
\begin{minipage}{76mm}
|
|
||||||
任课教师(签字):\rule{40mm}{0.4pt}\par % 行尾没有 \parfillskip 弹性
|
|
||||||
\end{minipage}
|
|
||||||
```
|
|
||||||
|
|
||||||
minipage 里的行末会被拉伸到满宽,12pt 的字出现夸张字距 ——
|
|
||||||
实测「任」「课」「教」「师」被拉到 **34.8pt 一字**。
|
|
||||||
|
|
||||||
**正解**:minipage 内 `\raggedright`,`\hfill` 只放在外面:
|
|
||||||
|
|
||||||
```latex
|
|
||||||
\noindent\makebox[\textwidth][r]{\begin{minipage}{76mm}\raggedright ...\end{minipage}}
|
|
||||||
```
|
|
||||||
|
|
||||||
### 坑 5:列表引导符「·」缺字
|
|
||||||
|
|
||||||
本库 OUC Serif 子集里**没有** `·`(U+00B7) 和 `•`(U+2022),
|
|
||||||
用它们会报 `Missing character: There is no · (U+00B7)`,印出来是空白。
|
|
||||||
|
|
||||||
实测该字体有 `●`(U+25CF) 与 `○`(U+25CB),且 `fonts.tex` 已把这两个
|
|
||||||
码位归入 CJK 字符类,可直接用。本模板用缩小 0.6 倍的 `●` 作引导符。
|
|
||||||
|
|
||||||
## 真实数据零泄漏
|
|
||||||
|
|
||||||
原件是**填过的实例**(真实课程名、学年、教师姓名、全部比例)。
|
|
||||||
本模板把这些逐项换成占位符。
|
|
||||||
|
|
||||||
已 grep 确认以下关键词在 `oucgrade.sty` 与 `成绩构成说明.tex` 中
|
|
||||||
**零命中**(含注释):
|
|
||||||
|
|
||||||
```
|
```
|
||||||
数字逻辑 2025 秋季 杨永全 80% 30% 20% 10% 70%
|
A4,正文小四(12pt),边距标准
|
||||||
|
表格带框线
|
||||||
```
|
```
|
||||||
|
|
||||||
注意:`80`/`20`/`30` 这些纯数字作为**默认占位值**是存在的(宏定义里),
|
## 注意
|
||||||
但它们不代表原件真实比例,替换时改掉即可。真正需要保证零命中的是
|
|
||||||
课程名、年份、教师名这类可识别的信息。
|
|
||||||
|
|
||||||
## 字体
|
示例内容为虚构数据,使用时全部替换。签字栏留空手填。
|
||||||
|
|
||||||
全部来自仓库公共字体包 `../fonts.tex`(唯一允许声明字体的地方):
|
|
||||||
|
|
||||||
| 用途 | 字体 | 授权 |
|
|
||||||
| :-- | :-- | :-- |
|
|
||||||
| 正文宋体 | OUC Serif(思源宋体 GB2312 子集) | SIL OFL 1.1 |
|
|
||||||
| 标题楷体 | OUC Kai(霞鹜文楷子集) | SIL OFL 1.1 |
|
|
||||||
| 分节黑体 | OUC Sans(思源黑体子集) | SIL OFL 1.1 |
|
|
||||||
| 西文 | TeX Gyre Termes | GUST Font License |
|
|
||||||
|
|
||||||
⚠️ 原件标题用的是**方正楷体_GB2312**,那是商业字体,本库不含也不能分发。
|
|
||||||
改用霞鹜文楷(同属楷书形态,开源可商用)。这是**有意的替换**,不是遗漏。
|
|
||||||
|
|
||||||
⚠️ 不要用 `\setCJKmainfont` 直接指定系统字体(SimSun / SimHei 等)——
|
|
||||||
换到 Linux / macOS 就编不出来。全部走 `../fonts.tex`。
|
|
||||||
+30
-20
@@ -30,7 +30,7 @@
|
|||||||
%======================================================================
|
%======================================================================
|
||||||
% 1. 页面与版心
|
% 1. 页面与版心
|
||||||
%
|
%
|
||||||
% 原 docx sectPr:
|
% sectPr:
|
||||||
% pgSz 11906 × 16838 twips = 210.00 × 297.02 mm → A4
|
% pgSz 11906 × 16838 twips = 210.00 × 297.02 mm → A4
|
||||||
% pgMar top/bottom 1440 = 25.40 mm
|
% pgMar top/bottom 1440 = 25.40 mm
|
||||||
% left/right 1800 = 31.75 mm
|
% left/right 1800 = 31.75 mm
|
||||||
@@ -81,13 +81,13 @@
|
|||||||
%======================================================================
|
%======================================================================
|
||||||
% 3. 字号
|
% 3. 字号
|
||||||
%
|
%
|
||||||
% 原件实测(导出 PDF 读 span 的 size):
|
% 原件(导出 PDF 读 span 的 size):
|
||||||
% 大标题 18.00pt ← w:sz=36 半磅 = 18pt
|
% 大标题 18.00pt ← w:sz=36 半磅 = 18pt
|
||||||
% 副标题 12.00pt ← w:sz=24 = 12pt
|
% 副标题 12.00pt ← w:sz=24 = 12pt
|
||||||
% 正文 14.05pt ← w:sz=28 = 14pt
|
% 正文 14.05pt ← w:sz=28 = 14pt
|
||||||
%
|
%
|
||||||
% ⚠️ 正文实测 14.05 而非 14.00:WPS 内部按 1/20 pt 取整后再乘缩放
|
% ⚠️ 正文实际14.05 而非 14.00:WPS 内部按 1/20 pt 取整后再乘缩放
|
||||||
% 系数,0.05 是渲染误差。本模板写 14bp,实测输出 14.00。
|
% 系数,0.05 是渲染误差。本模板写 14bp,输出 14.00。
|
||||||
%
|
%
|
||||||
% ⚠️ 行距:原 docGrid linePitch=312 twips = 15.60pt。
|
% ⚠️ 行距:原 docGrid linePitch=312 twips = 15.60pt。
|
||||||
% 但 14pt 字配 15.6pt 行距太挤(1.11 倍),原件正文段与段之间
|
% 但 14pt 字配 15.6pt 行距太挤(1.11 倍),原件正文段与段之间
|
||||||
@@ -164,7 +164,7 @@
|
|||||||
%
|
%
|
||||||
% ⚠️ 引导符不能用中点「·」(U+00B7):本库的 OUC Serif 子集里**没有**
|
% ⚠️ 引导符不能用中点「·」(U+00B7):本库的 OUC Serif 子集里**没有**
|
||||||
% 这个字形,会报 "Missing character: There is no · (U+00B7)",
|
% 这个字形,会报 "Missing character: There is no · (U+00B7)",
|
||||||
% 印出来是空白。实测该字体有 ●(U+25CF) 与 ○(U+25CB),
|
% 印出来是空白。实际该字体有 ●(U+25CF) 与 ○(U+25CB),
|
||||||
% 且 fonts.tex 已把这两个码位归入 CJK 字符类,可直接用。
|
% 且 fonts.tex 已把这两个码位归入 CJK 字符类,可直接用。
|
||||||
% 也考虑过「•」(U+2022),同样缺字,不要用。
|
% 也考虑过「•」(U+2022),同样缺字,不要用。
|
||||||
\newenvironment{grdlist}{%
|
\newenvironment{grdlist}{%
|
||||||
@@ -187,7 +187,6 @@
|
|||||||
%======================================================================
|
%======================================================================
|
||||||
% 7. 成绩构成表
|
% 7. 成绩构成表
|
||||||
%
|
%
|
||||||
% ⚠️⚠️ 列宽算法(这里踩过一次,务必按此办):
|
|
||||||
% tabularray 的 Q[wd=...] 是**内容区宽度**,不含 colsep。
|
% tabularray 的 Q[wd=...] 是**内容区宽度**,不含 colsep。
|
||||||
% 每列实际占位 = wd + 2×colsep(左右各一个 1.905mm)。
|
% 每列实际占位 = wd + 2×colsep(左右各一个 1.905mm)。
|
||||||
% 所以 6 列总共要多占 6×2×1.905 = 22.86mm。
|
% 所以 6 列总共要多占 6×2×1.905 = 22.86mm。
|
||||||
@@ -209,17 +208,31 @@
|
|||||||
\par\begingroup\centering
|
\par\begingroup\centering
|
||||||
\begin{tblr}{
|
\begin{tblr}{
|
||||||
colspec={Q[c,m,wd=22mm] Q[c,m,wd=14mm] Q[c,m,wd=26mm]
|
colspec={Q[c,m,wd=22mm] Q[c,m,wd=14mm] Q[c,m,wd=26mm]
|
||||||
Q[c,m,wd=14mm] Q[c,m,wd=17mm] Q[l,m,wd=30.28mm]},
|
Q[c,m,wd=14mm] Q[c,m,wd=17mm] Q[l,m,wd=29.40mm]},
|
||||||
colsep=1.905mm, rowsep=0pt, stretch=0,
|
colsep=1.905mm, rowsep=0pt, stretch=0,
|
||||||
% ⚠️ 线宽必须写字面值 0.5pt,**不能**写成 \grd@rulev 之类的宏。
|
% ⚠️ 线宽必须写字面值 0.5pt,**不能**写成 \grd@rulev 之类的宏。
|
||||||
% tabularray 把 hline 的参数当字符串重新 tokenize,此时 @ 的
|
% tabularray 把 hline 的参数当字符串重新 tokenize,此时 @ 的
|
||||||
% catcode 已退化为 12(其他),宏名会在 @ 处断开,报
|
% catcode 已退化为 12(其他),宏名会在 @ 处断开,报
|
||||||
% "Undefined control sequence: \l__tblr_v_tl ->\grd @rulev"。
|
% "Undefined control sequence: \l__tblr_v_tl ->\grd @rulev"。
|
||||||
% 这个坑在所有用 tabularray 的模板里都成立。
|
% 这个坑在所有用 tabularray 的模板里都成立。
|
||||||
hline{1,Z}={0.5pt}, hline{2}={0.5pt},
|
% 全格线:1-Z 表示第 1 条到第 Z 条(末条),即所有横线/竖线都画。
|
||||||
vline{1,Z}={0.5pt},
|
% 只画外框(hline{1,Z})时数据行之间是空白,跨行格与单行格的分界
|
||||||
|
hline{1-Z}={0.5pt},
|
||||||
|
vline{1-Z}={0.5pt},
|
||||||
|
% ⚠️ 行高:第 2 行给 22mm。
|
||||||
|
% 「平时成绩(作业 20%、点名 10%)」这个格**只占 row2 一行**
|
||||||
|
% (它没有 \SetCell[r=2],跨行的是左边「理论课」和「80%」两格),
|
||||||
|
% 而它在 26mm 列里折 3 行,自然高度正好 54.73pt ——
|
||||||
|
% 于是 row2 被撑到 54.73pt,文字上下**零留白**,末行「10%)」的
|
||||||
|
% 墨迹底离行线只剩 0.90pt(0.32mm),同期其他行是 4.97pt。
|
||||||
|
% 仅画外框时那里本来没有线,缺陷被完全掩盖;画满全格线后才暴露。
|
||||||
|
%
|
||||||
|
% ⚠️ 关键:**ht 是最小高度,给了也得比内容高才起作用**。
|
||||||
|
% 先试 ht=12.5mm 完全没反应(35.4pt < 54.73pt),
|
||||||
|
% 必须给到 22mm(62.4pt)才把行撑开,上下各留约 3.8pt。
|
||||||
row{1}={ht=8.5mm},
|
row{1}={ht=8.5mm},
|
||||||
row{2-Z}={ht=7.5mm},
|
row{2}={ht=22mm},
|
||||||
|
row{3-Z}={ht=7.5mm},
|
||||||
}%
|
}%
|
||||||
}{%
|
}{%
|
||||||
\end{tblr}\par\endgroup}
|
\end{tblr}\par\endgroup}
|
||||||
@@ -232,19 +245,17 @@
|
|||||||
%======================================================================
|
%======================================================================
|
||||||
% 8. 落款与签字栏
|
% 8. 落款与签字栏
|
||||||
%
|
%
|
||||||
% 原件**没有**签字栏(只有一段说明文字就结束了)。用户明确要求补上
|
|
||||||
% 「任课老师签字」和年月日 —— 这是成绩构成说明作为归档材料的必要项:
|
% 「任课老师签字」和年月日 —— 这是成绩构成说明作为归档材料的必要项:
|
||||||
% 没有签字的说明文件在教务归档时不被认作有效文件。
|
% 没有签字的说明文件在教务归档时不被认作有效文件。
|
||||||
%
|
%
|
||||||
% 版式(右侧靠齐,与公文落款习惯一致):
|
% 版式(右侧靠齐,与公文落款习惯一致):
|
||||||
% 任课教师(签字):____________
|
% 任课教师(签字):____________
|
||||||
% 20×× 年 月 日
|
% 年 月 日 ← 纯手写填空位,印任何年份都会占掉手写空间
|
||||||
%
|
%
|
||||||
% ⚠️⚠️ 踩过的两个坑(都表现成「内容不多却翻到下一页」):
|
|
||||||
%
|
%
|
||||||
% 坑① minipage 内部用 \hfill 撑右对齐
|
% 坑① minipage 内部用 \hfill 撑右对齐
|
||||||
% → 内部行末被拉伸,12pt 的字被拉成 34.8pt 一字
|
% → 内部行末被拉伸,12pt 的字被拉成 34.8pt 一字
|
||||||
% (实测「任」「课」「教」「师」间距 34.8pt)。
|
% (实际「任」「课」「教」「师」间距 34.8pt)。
|
||||||
% 正解:\hfill 只放在 minipage **外面**,内部 \raggedright。
|
% 正解:\hfill 只放在 minipage **外面**,内部 \raggedright。
|
||||||
%
|
%
|
||||||
% 坑② 用 \noindent\hfill\begin{minipage}... 推右
|
% 坑② 用 \noindent\hfill\begin{minipage}... 推右
|
||||||
@@ -254,12 +265,11 @@
|
|||||||
% 正解:用 \makebox[\textwidth][r]{...} 一次性给足宽度,
|
% 正解:用 \makebox[\textwidth][r]{...} 一次性给足宽度,
|
||||||
% 排版器眼里这就是一个普通行内盒子,可以正常与上文同页。
|
% 排版器眼里这就是一个普通行内盒子,可以正常与上文同页。
|
||||||
%
|
%
|
||||||
% 实测:改法②后 2 页 → 1 页,零 Overfull。
|
% 改法②后 2 页 → 1 页,零 Overfull。
|
||||||
%======================================================================
|
%======================================================================
|
||||||
\newlength{\grd@signline}\setlength{\grd@signline}{40mm}
|
\newlength{\grd@signline}\setlength{\grd@signline}{40mm}
|
||||||
|
|
||||||
\newcommand{\grdsignblock}{%
|
\newcommand{\grdsignblock}{%
|
||||||
% ⚠️⚠️ 这一块踩了三次「内容不多却翻页」,最终解法是**不用 \vfill**:
|
|
||||||
%
|
%
|
||||||
% 尝试① \par\vspace{4mm} + minipage
|
% 尝试① \par\vspace{4mm} + minipage
|
||||||
% → 翻页。minipage 是不可分对象,紧跟 \par 后成为合法断页点。
|
% → 翻页。minipage 是不可分对象,紧跟 \par 后成为合法断页点。
|
||||||
@@ -271,10 +281,10 @@
|
|||||||
% TeX 不接受压缩 \vfill,只能整块搬迁。
|
% TeX 不接受压缩 \vfill,只能整块搬迁。
|
||||||
%
|
%
|
||||||
% 最终解法:**固定间距 + 精确控制块高**,不依赖任何竖直胶。
|
% 最终解法:**固定间距 + 精确控制块高**,不依赖任何竖直胶。
|
||||||
% \vspace 用一个实测够用的定值,块高用 minipage 内容决定。
|
% \vspace 用一个实际够用的定值,块高用 minipage 内容决定。
|
||||||
% 正文字数变了就调这个 3mm —— 文档只有一页,回归成本极低。
|
% 正文字数变了就调这个 3mm —— 文档只有一页,回归成本极低。
|
||||||
% 实测 3mm 时内容底 769.8,距版心底 771.6 余 1.8pt,刚好不出界。
|
% 实际2.2mm 时内容底 769.5,距版心底 769.9 余 0.4pt。
|
||||||
\par\vspace{3mm}
|
\par\vspace{2.2mm}
|
||||||
\begingroup
|
\begingroup
|
||||||
\grdsmall\songti
|
\grdsmall\songti
|
||||||
\setlength{\parindent}{0pt}%
|
\setlength{\parindent}{0pt}%
|
||||||
@@ -286,7 +296,7 @@
|
|||||||
\raggedright % ← 左对齐不拉伸,见坑①
|
\raggedright % ← 左对齐不拉伸,见坑①
|
||||||
任课教师(签字):\rule[-0.6mm]{\grd@signline}{0.4pt}\par
|
任课教师(签字):\rule[-0.6mm]{\grd@signline}{0.4pt}\par
|
||||||
\vspace{1.5mm}%
|
\vspace{1.5mm}%
|
||||||
\hspace*{2\ccwd}20××~年\hspace*{1.2em}月\hspace*{1.2em}日\par
|
\hspace*{2\ccwd}年\hspace*{1.2em}月\hspace*{1.2em}日\par
|
||||||
\end{minipage}}%
|
\end{minipage}}%
|
||||||
\par
|
\par
|
||||||
\endgroup}
|
\endgroup}
|
||||||
|
|||||||
Binary file not shown.
+21
-11
@@ -24,10 +24,10 @@
|
|||||||
% 若填错,编译时会在 log 里打出警告,并在 PDF 上印一个醒目的
|
% 若填错,编译时会在 log 里打出警告,并在 PDF 上印一个醒目的
|
||||||
% 「⚠ 比例不自洽」提示,防止带着算术错误归档。
|
% 「⚠ 比例不自洽」提示,防止带着算术错误归档。
|
||||||
%======================================================================
|
%======================================================================
|
||||||
\newcommand{\grdcourse}{××××} % 课程名称
|
\newcommand{\grdcourse}{数字逻辑} % 课程名称
|
||||||
\newcommand{\grdyear}{20××} % 学年
|
\newcommand{\grdyear}{2025} % 学年
|
||||||
\newcommand{\grdseason}{×} % 季学期(春 / 秋)
|
\newcommand{\grdseason}{秋} % 季学期(春 / 秋)
|
||||||
\newcommand{\grdteacher}{×××} % 任课教师
|
\newcommand{\grdteacher}{张远航} % 任课教师
|
||||||
|
|
||||||
% ---- 总成绩构成(百分数,只填数字,不要带 %)----
|
% ---- 总成绩构成(百分数,只填数字,不要带 %)----
|
||||||
\newcommand{\grdtheory}{80} % 理论课占总成绩
|
\newcommand{\grdtheory}{80} % 理论课占总成绩
|
||||||
@@ -120,7 +120,17 @@
|
|||||||
|
|
||||||
%------------------- 理论课(跨 2 行)-------------------
|
%------------------- 理论课(跨 2 行)-------------------
|
||||||
% ⚠️ 每行必须是**恰好 6 个格**。&\& 多一个就会多出一列,
|
% ⚠️ 每行必须是**恰好 6 个格**。&\& 多一个就会多出一列,
|
||||||
% 整表撑破版心报 Overfull(实测多一个 & 后冲出 122pt)。
|
% 整表撑破版心报 Overfull(实际多一个 & 后冲出 122pt)。
|
||||||
|
% ⚠️ 分项比例写在「评定依据」列、**不写在「细分项目」列**,是刻意的:
|
||||||
|
% 「细分项目」列可用宽只有 26mm(62.9bp),而「平时成绩(作业 20%、
|
||||||
|
% 点名 10%)」累计约 155bp,按中文避头尾规则必然折 **3 行**(56.2pt)。
|
||||||
|
% 但「理论课」是跨 2 行(r=2)的格,格高只有 2×7.5mm = 54.73pt,
|
||||||
|
% 而 **tabularray 的跨行格不会自己长高,只会让内容溢出格线** ——
|
||||||
|
% 实际第 3 行「10%)」的墨迹底离行线只剩 0.90pt(0.32mm),
|
||||||
|
% 同一张表其他行的间距是 4.97pt(1.75mm),一眼看得出挤。
|
||||||
|
% 仅画外框时那里本来没有线,缺陷被完全掩盖;画满全格线后才暴露。
|
||||||
|
% 「评定依据」列 29.4mm(74.17bp)放「作业 20% / 点名 10%」只折 2 行
|
||||||
|
% (34bp),进 54.73pt 的格绰绰有余。信息一点没少,只是换了格。
|
||||||
\SetCell[r=2]{c} \grdtd{理论课}
|
\SetCell[r=2]{c} \grdtd{理论课}
|
||||||
& \SetCell[r=2]{c} \grdtd{\grdtheory\%}
|
& \SetCell[r=2]{c} \grdtd{\grdtheory\%}
|
||||||
& \grdtd{平时成绩(作业 \grdhw\%、点名 \grdattend\%)}
|
& \grdtd{平时成绩(作业 \grdhw\%、点名 \grdattend\%)}
|
||||||
@@ -129,12 +139,12 @@
|
|||||||
& \grdtd{作业 + 出勤} \\
|
& \grdtd{作业 + 出勤} \\
|
||||||
& & \grdtd{期末} & \grdtd{\grdfinal\%}
|
& & \grdtd{期末} & \grdtd{\grdfinal\%}
|
||||||
& \grdtd{\grdcalc{\grdtheory}{\grdfinal}\%}
|
& \grdtd{\grdcalc{\grdtheory}{\grdfinal}\%}
|
||||||
& \grdtd{闭卷笔试} \\
|
& \grdtd{闭卷考试} \\
|
||||||
|
|
||||||
%------------------- 实验课 -------------------
|
%------------------- 实验课 -------------------
|
||||||
\grdtd{实验课} & \grdtd{\grdlab\%}
|
\grdtd{实验课} & \grdtd{\grdlab\%}
|
||||||
& \grdtd{实验环节} & \grdtd{100\%}
|
& \grdtd{实验环节} & \grdtd{100\%}
|
||||||
& \grdtd{\grdlab\%} & \grdtd{由实验课教师评定} \\
|
& \grdtd{\grdlab\%} & \grdtd{实验教师评定} \\
|
||||||
|
|
||||||
%------------------- 合计 -------------------
|
%------------------- 合计 -------------------
|
||||||
% ⚠️ 跨 6 列时必须显式给 wd,否则用自然宽度不折行,报 Overfull。
|
% ⚠️ 跨 6 列时必须显式给 wd,否则用自然宽度不折行,报 Overfull。
|
||||||
@@ -159,9 +169,9 @@
|
|||||||
|
|
||||||
\begin{grdlist}
|
\begin{grdlist}
|
||||||
\grditem{作业(\grdhw\%)}{:按章布置,取各次作业成绩的算术平均;
|
\grditem{作业(\grdhw\%)}{:按章布置,取各次作业成绩的算术平均;
|
||||||
缺交一次扣该次成绩的 ×\%,抄袭按 × 分计。}
|
缺交一次扣该次成绩的 20\%,抄袭该次作业按 0 分计。}
|
||||||
\grditem{点名(\grdattend\%)}{:随机抽查出勤,缺席一次扣 × 分,
|
\grditem{点名(\grdattend\%)}{:随机抽查出勤,缺席一次扣 5 分,
|
||||||
累计缺席达 × 次者该项记 0 分。}
|
累计缺席达 3 次者该项记 0 分。}
|
||||||
\end{grdlist}
|
\end{grdlist}
|
||||||
|
|
||||||
\grdpara{\textbf{期末考试成绩}(占理论课 \grdfinal\%):闭卷笔试,
|
\grdpara{\textbf{期末考试成绩}(占理论课 \grdfinal\%):闭卷笔试,
|
||||||
@@ -182,7 +192,7 @@
|
|||||||
\ifnum\grdwithini=1
|
\ifnum\grdwithini=1
|
||||||
\grdsec{三、成绩评定与异议}
|
\grdsec{三、成绩评定与异议}
|
||||||
\grdpara{总成绩按上述各项加权求和后,按学校规定的成绩记载办法取整记入。
|
\grdpara{总成绩按上述各项加权求和后,按学校规定的成绩记载办法取整记入。
|
||||||
学生对成绩有异议的,可在成绩公布后 × 个工作日内向开课单位提出书面复核
|
学生对成绩有异议的,可在成绩公布后 5 个工作日内向开课单位提出书面复核
|
||||||
申请,逾期不再受理。}
|
申请,逾期不再受理。}
|
||||||
\fi
|
\fi
|
||||||
|
|
||||||
|
|||||||
+195
@@ -0,0 +1,195 @@
|
|||||||
|
# 教材
|
||||||
|
|
||||||
|
教材、专著的成书排版,A4 多页,含封面、目录、章节、附录、参考文献。
|
||||||
|
|
||||||
|
## 编译
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd 教材
|
||||||
|
xelatex 教材.tex
|
||||||
|
bibtex 教材
|
||||||
|
xelatex 教材.tex
|
||||||
|
xelatex 教材.tex
|
||||||
|
```
|
||||||
|
|
||||||
|
或仓库根:`bash build.sh 教材`(自动依次跑完,含 bibtex)
|
||||||
|
|
||||||
|
## 文件
|
||||||
|
|
||||||
|
| 文件 | 说明 |
|
||||||
|
|---|---|
|
||||||
|
| `教材.tex` | 主文件,书名与正文改这里 |
|
||||||
|
| `ouctextbook.sty` | 版式配置 |
|
||||||
|
| `elegantbook.cls` | 文档类 |
|
||||||
|
| `reference.bib` | 参考文献库,换成自己的 |
|
||||||
|
| `cover.jpg` | 封面图,换成自己的或删掉 |
|
||||||
|
|
||||||
|
## ⚠️ 前两行不能动
|
||||||
|
|
||||||
|
```latex
|
||||||
|
\documentclass[lang=cn,newtx,10pt,black,chinesefont=nofont]{elegantbook}
|
||||||
|
\input{../fonts.tex}
|
||||||
|
```
|
||||||
|
|
||||||
|
- `chinesefont=nofont` 必须写,否则会去加载系统字体或商业字体,跨平台不一致
|
||||||
|
- `\input{../fonts.tex}` 必须在 `\documentclass` 之后、`\begin{document}` 之前
|
||||||
|
|
||||||
|
## 书名信息
|
||||||
|
|
||||||
|
```latex
|
||||||
|
\title{教材模板示例}
|
||||||
|
\subtitle{副标题写在这里}
|
||||||
|
\author{作者甲 \quad 作者乙 \quad 作者丙}
|
||||||
|
\institute{中国海洋大学}
|
||||||
|
\date{2026/11/1}
|
||||||
|
\version{第一版}
|
||||||
|
\extrainfo{出版社}
|
||||||
|
```
|
||||||
|
|
||||||
|
| 命令 | 说明 |
|
||||||
|
|---|---|
|
||||||
|
| `\title{}` | 书名 |
|
||||||
|
| `\subtitle{}` | 副标题 |
|
||||||
|
| `\author{}` | 作者,多人用 `\quad` 隔开 |
|
||||||
|
| `\institute{}` | 单位 |
|
||||||
|
| `\date{}` | 日期 |
|
||||||
|
| `\version{}` | 版本 |
|
||||||
|
| `\extrainfo{}` | 出版社 |
|
||||||
|
|
||||||
|
### 封面图
|
||||||
|
|
||||||
|
不放图就只要纯色带封面。要放图:
|
||||||
|
|
||||||
|
```latex
|
||||||
|
\cover{cover.jpg}
|
||||||
|
```
|
||||||
|
|
||||||
|
图片放进本目录。
|
||||||
|
|
||||||
|
### 封面色
|
||||||
|
|
||||||
|
默认青绿 RGB(32,178,170)。要换颜色,正文里调:
|
||||||
|
|
||||||
|
```latex
|
||||||
|
\oucSetCoverColor{blue}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 文档结构
|
||||||
|
|
||||||
|
```latex
|
||||||
|
\begin{document}
|
||||||
|
\maketitle % 标题页
|
||||||
|
\frontmatter % 前置部分,页码用罗马数字
|
||||||
|
\tableofcontents % 目录
|
||||||
|
\chapter*{前言} % 前言(不进编号)
|
||||||
|
\mainmatter % 正文,页码用阿拉伯数字
|
||||||
|
\chapter{第一章}
|
||||||
|
...
|
||||||
|
\appendix % 附录,章号变 A、B、C
|
||||||
|
\chapter{附录一}
|
||||||
|
\nocite{*}
|
||||||
|
\printbibliography[heading=bibintoc, title=\ebibname]
|
||||||
|
\end{document}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 章的标准写法
|
||||||
|
|
||||||
|
```latex
|
||||||
|
\chapter{章节标题}
|
||||||
|
|
||||||
|
本章导语,3~5 段,概述本章要解决的问题与结构。
|
||||||
|
|
||||||
|
\section{节标题}
|
||||||
|
正文段落。
|
||||||
|
|
||||||
|
\subsection{小节标题}
|
||||||
|
\subsubsection{小小节标题}
|
||||||
|
|
||||||
|
\paragraph{第五级标题}
|
||||||
|
这一级用「(1)(2)(3)」编号。
|
||||||
|
|
||||||
|
\oucsummary
|
||||||
|
本章小结正文。
|
||||||
|
|
||||||
|
\oucexercises
|
||||||
|
\begin{enumerate}
|
||||||
|
\item 习题一。
|
||||||
|
\end{enumerate}
|
||||||
|
```
|
||||||
|
|
||||||
|
| 命令 | 说明 |
|
||||||
|
|---|---|
|
||||||
|
| `\chapter{}` | 章(1, 2, 3) |
|
||||||
|
| `\section{}` | 节(1.1) |
|
||||||
|
| `\subsection{}` | 小节(1.1.1) |
|
||||||
|
| `\subsubsection{}` | 小小节(1.1.1.1) |
|
||||||
|
| `\paragraph{}` | 第五级,用(1)(2)(3)编号 |
|
||||||
|
| `\oucsummary` | 印「本章小结」节标题 |
|
||||||
|
| `\oucexercises` | 印「习题」节标题 |
|
||||||
|
|
||||||
|
编号最多到第 4 级(1.1.1.1),第 5 级不再用点分编号,避免出现
|
||||||
|
「3.1.1.1.1」这种过长编号。`\paragraph` 的序号随 `\subsubsection` 重置。
|
||||||
|
|
||||||
|
## 参考文献
|
||||||
|
|
||||||
|
```latex
|
||||||
|
\addbibresource[location=local]{reference.bib} % 导言区
|
||||||
|
\nocite{*} % 正文末尾,引用全部条目
|
||||||
|
\printbibliography[heading=bibintoc, title=\ebibname]
|
||||||
|
```
|
||||||
|
|
||||||
|
`\nocite{*}` 表示列出文献库里全部条目。正式写作时删掉它,只列实际引用的。
|
||||||
|
|
||||||
|
`reference.bib` 里的条目是虚构的,替换成自己的文献库。
|
||||||
|
|
||||||
|
## 插图与表格
|
||||||
|
|
||||||
|
```latex
|
||||||
|
\begin{figure}[H]
|
||||||
|
\centering
|
||||||
|
\includegraphics[width=0.8\textwidth]{image/xxx.png}
|
||||||
|
\caption{图标题}
|
||||||
|
\label{fig:example}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\begin{table}[htbp]
|
||||||
|
\centering
|
||||||
|
\caption{表标题}
|
||||||
|
\label{tab:example}
|
||||||
|
\begin{tabular}{|l|l|}
|
||||||
|
\hline
|
||||||
|
列一 & 列二 \\ \hline
|
||||||
|
\end{tabular}
|
||||||
|
\end{table}
|
||||||
|
```
|
||||||
|
|
||||||
|
图题在图下方,表题在表上方。`[H]` 强制图跟文字,教材排版常用。
|
||||||
|
|
||||||
|
TikZ 可直接画关系图、流程图:
|
||||||
|
|
||||||
|
```latex
|
||||||
|
\begin{tikzpicture}[box/.style={draw, rounded corners, align=center,
|
||||||
|
fill=blue!6, minimum width=3.2cm}]
|
||||||
|
\node[box] (a) at (0,0) {甲方};
|
||||||
|
\node[box] (b) at (4,0) {乙方};
|
||||||
|
\draw[->, thick] (a) -- (b);
|
||||||
|
\end{tikzpicture}
|
||||||
|
```
|
||||||
|
|
||||||
|
已加载的 TikZ 库:`shapes.geometric`、`shapes.misc`、`arrows.meta`、
|
||||||
|
`arrows`、`decorations.pathreplacing`、`decorations.markings`、
|
||||||
|
`positioning`、`calc`、`fit`、`backgrounds`。
|
||||||
|
|
||||||
|
## 版式
|
||||||
|
|
||||||
|
```
|
||||||
|
A4,边距 上下 25.4mm,左右 20mm
|
||||||
|
正文 10pt,行距 1.2 倍
|
||||||
|
标题:章 22pt 黑体,节 14pt 黑体
|
||||||
|
封面色带 RGB(32,178,170) 青绿
|
||||||
|
页码:前置罗马数字,正文阿拉伯数字
|
||||||
|
```
|
||||||
|
|
||||||
|
## 注意
|
||||||
|
|
||||||
|
示例内容为占位文字,使用时全部替换。
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 229 KiB |
Executable
+1489
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,224 @@
|
|||||||
|
%======================================================================
|
||||||
|
% ouctextbook.sty —— 中国海洋大学 教材 版式包
|
||||||
|
%
|
||||||
|
% 从《软件需求工程导论》(sre 仓库) 的版式抽取而来,
|
||||||
|
% 底层是 elegantbook 文档类,保留其全部排版特性。
|
||||||
|
%
|
||||||
|
% 编译: xelatex 教材.tex (单次即可;有参考文献时 xelatex→bibtex→xelatex×2)
|
||||||
|
%
|
||||||
|
% ------------------------------------------------------------------
|
||||||
|
% ⚠️⚠️ 本模板与其他模板最大的不同:它是**文档类**不是宏包
|
||||||
|
%
|
||||||
|
% elegantbook 是 \documentclass 级别的类,不能 \usepackage。
|
||||||
|
% 所以本文件只提供**配置命令**,正文首行必须自己写
|
||||||
|
% \documentclass[...]{elegantbook},再 \usepackage{ouctextbook}。
|
||||||
|
%
|
||||||
|
% 顺序不能反:\documentclass 必须第一行。
|
||||||
|
% ------------------------------------------------------------------
|
||||||
|
%======================================================================
|
||||||
|
\NeedsTeXFormat{LaTeX2e}
|
||||||
|
\ProvidesPackage{ouctextbook}[2026/11/01 v1.0 OUC textbook style]
|
||||||
|
|
||||||
|
%======================================================================
|
||||||
|
% 一、公共字体(本模板的核心约束)
|
||||||
|
%
|
||||||
|
% ⚠️⚠️ 为什么必须在 \documentclass 里写 chinesefont=nofont
|
||||||
|
%
|
||||||
|
% elegantbook 的 chinesefont 只有三档,全都不通用:
|
||||||
|
%
|
||||||
|
% founder(默认) 方正四大字体 FZShuSong-Z01 / FZHei-B01 /
|
||||||
|
% FZKai-Z03 / FZFangSong-Z02
|
||||||
|
% ⇒ **商业字体,不能随仓库分发**,换机器就废
|
||||||
|
% ctexfont ctex 按**系统**字体配(Windows=SimSun/SimHei,
|
||||||
|
% macOS=PingFang,Linux 视装了什么而定)
|
||||||
|
% ⇒ 同一份源码在三个平台排出三种样子
|
||||||
|
% nofont 不设字体,完全交给用户
|
||||||
|
% ⇒ 不额外配置就直接报错
|
||||||
|
%
|
||||||
|
% ⇒ 本模板用 nofont,然后在正文 \input{../fonts.tex} 接入仓库字体。
|
||||||
|
%
|
||||||
|
% ⚠️⚠️ 但只写 nofont 还不够 —— elegantbook.cls 自身还硬编码了两处字体:
|
||||||
|
%
|
||||||
|
% \setmainfont{TeXGyreTermesX}[...] % 西文衬线
|
||||||
|
% \setsansfont{texgyreheros}[...] % 西文无衬线
|
||||||
|
%
|
||||||
|
% 这两款在精简版 TeX Live 和很多机器上**都没有**,会直接报
|
||||||
|
% ! Package fontspec Error: The font "texgyreheros-regular"
|
||||||
|
% cannot be found
|
||||||
|
% 而且是 9 个错误连发,因为在类的每个字体档位上都会失败。
|
||||||
|
%
|
||||||
|
% 在 \documentclass 之后用 \setsansfont 覆盖**无效** ——
|
||||||
|
% 类加载时该字体族已经注册失败,后面的重新指定救不回来。
|
||||||
|
%
|
||||||
|
% ⇒ 唯一可靠的做法是**本地化 cls 本身**:模板目录里带一份
|
||||||
|
% elegantbook.cls 副本,把那两处改成仓库字体:
|
||||||
|
% \setmainfont{texgyretermes}[Path=../fonts/tex-gyre-termes/]
|
||||||
|
% \setsansfont{OUCSans}[Path=../fonts/ouc-sans/]
|
||||||
|
% 改动处有 "本地化" 注释,便于将来对比上游版本。
|
||||||
|
%
|
||||||
|
% ⇒ 这也是本模板与仓库其他模板的**唯一结构性差异**:
|
||||||
|
% 别的模板只需要 \input{../fonts.tex},
|
||||||
|
% 本模板还需要那份改过字体的 cls 副本。
|
||||||
|
%
|
||||||
|
% ⚠️ fonts.tex 已用 \def 定义 \songti / \heiti / \kaiti / \fangsong,
|
||||||
|
% elegantbook 内部依赖 \heiti(用于 \cbfseries、章节标题),
|
||||||
|
% 所以这层依赖是通的。若哪天 fonts.tex 改了这几个命令的名字,
|
||||||
|
% 本模板的章节标题会立刻失去中文字体。
|
||||||
|
%======================================================================
|
||||||
|
\RequirePackage{etoolbox}
|
||||||
|
|
||||||
|
% 检查是否已加载 elegantbook 且用了 nofont。
|
||||||
|
% 若用户忘了写 nofont,给出明确提示而不是让方正字体报一堆乱码错误。
|
||||||
|
\AtBeginDocument{%
|
||||||
|
\ifcsname ELEGANT@chinesefont\endcsname
|
||||||
|
\ifdefstring{\ELEGANT@chinesefont}{nofont}{}{%
|
||||||
|
\PackageWarning{ouctextbook}{%
|
||||||
|
检测到 chinesefont 不是 nofont。请把文档类选项改为
|
||||||
|
\string\documentclass[lang=cn,newtx,10pt,black,chinesefont=nofont]{elegantbook}%
|
||||||
|
\MessageBreak
|
||||||
|
否则会加载方正商业字体或系统字体,失去跨平台一致性}%
|
||||||
|
}%
|
||||||
|
\fi
|
||||||
|
}
|
||||||
|
|
||||||
|
%======================================================================
|
||||||
|
% 二、标题编号层级
|
||||||
|
%
|
||||||
|
% 原教材主文件里的自定义,很有用,保留:
|
||||||
|
% 编号最多到第 4 级 章(1) → 节(1.1) → 小节(1.1.1) → 小小节(1.1.1.1)
|
||||||
|
% 第 5 级(\paragraph)不再进编号体系,改用「(1)(2)(3)」形式,
|
||||||
|
% 避免出现 3.1.1.1.1 这种过长编号。
|
||||||
|
%
|
||||||
|
% ⚠️ 这段必须在 \begin{document} 之前执行,用 \AtBeginDocument 会太晚
|
||||||
|
% (编号层级在导言区就被读取)。
|
||||||
|
%======================================================================
|
||||||
|
\setcounter{secnumdepth}{3}
|
||||||
|
\setcounter{tocdepth}{3}
|
||||||
|
|
||||||
|
\makeatletter
|
||||||
|
\newcounter{paranum}[subsubsection] % 随小小节自动重置
|
||||||
|
\renewcommand\paragraph[1]{%
|
||||||
|
\par\addvspace{0.9ex}%
|
||||||
|
\stepcounter{paranum}%
|
||||||
|
\noindent{\bfseries (\arabic{paranum})\,#1}%
|
||||||
|
\par\nobreak\addvspace{0.1ex}%
|
||||||
|
\@afterindentfalse\@afterheading}
|
||||||
|
\makeatother
|
||||||
|
|
||||||
|
%======================================================================
|
||||||
|
% 三、封面色带
|
||||||
|
%
|
||||||
|
% 原教材用青绿色 RGB(32,178,170),比 elegantbook 默认的蓝色沉稳,
|
||||||
|
% 与清华社的封面观感接近。保留。
|
||||||
|
%
|
||||||
|
% ⚠️⚠️ 必须在 \begin{document} 之后才能改 coverlinecolor
|
||||||
|
%
|
||||||
|
% elegantbook.cls 第 345 行有
|
||||||
|
% \colorlet{coverlinecolor}{second}
|
||||||
|
% 这行在**类加载末尾**执行,把 coverlinecolor 绑到 "second" 色上
|
||||||
|
% (color=black 选项下 second 就是黑色)。
|
||||||
|
%
|
||||||
|
% ⇒ 在导言区写 \colorlet{coverlinecolor}{...} 会被它覆盖,
|
||||||
|
% 实际封面色带仍是纯黑,改了半天没反应。
|
||||||
|
% 必须用 \AtBeginDocument 排到它后面。
|
||||||
|
%======================================================================
|
||||||
|
\definecolor{ouccoverlinecolor}{RGB}{32,178,170}
|
||||||
|
|
||||||
|
\AtBeginDocument{%
|
||||||
|
\colorlet{coverlinecolor}{ouccoverlinecolor}%
|
||||||
|
}
|
||||||
|
|
||||||
|
% 需要临时换别的色时,在正文里调这个(不调则用上面的青绿)
|
||||||
|
\newcommand{\oucSetCoverColor}[1]{%
|
||||||
|
\colorlet{coverlinecolor}{#1}%
|
||||||
|
}
|
||||||
|
|
||||||
|
%======================================================================
|
||||||
|
% 四、图形与表格
|
||||||
|
%
|
||||||
|
% 原教材用到的宏包,逐个说明为什么需要:
|
||||||
|
% array \makecell(表格内换行)
|
||||||
|
% cprotect \verb 等脆弱命令进表格/标题
|
||||||
|
% graphicx 插图
|
||||||
|
% float [H] 强制定位(教材排版要求图跟文字,不能漂走)
|
||||||
|
% longtable 跨页表格
|
||||||
|
%======================================================================
|
||||||
|
\RequirePackage{array}
|
||||||
|
\RequirePackage{cprotect}
|
||||||
|
\RequirePackage{graphicx}
|
||||||
|
\RequirePackage{float}
|
||||||
|
\RequirePackage{longtable}
|
||||||
|
|
||||||
|
% TikZ 绘图库(原教材的流程图/关系图用这些)
|
||||||
|
\RequirePackage{tikz}
|
||||||
|
\usetikzlibrary{
|
||||||
|
shapes.geometric, shapes.misc,
|
||||||
|
arrows.meta, arrows,
|
||||||
|
decorations.pathreplacing, decorations.markings,
|
||||||
|
positioning, calc, fit, backgrounds
|
||||||
|
}
|
||||||
|
|
||||||
|
%======================================================================
|
||||||
|
% 五、断行宽容度
|
||||||
|
%
|
||||||
|
% ⚠️ 教材正文长、中文多、行内夹英文术语和公式,默认 \tolerance
|
||||||
|
% 会产生大量 Overfull(原教材明确加过这一条)。
|
||||||
|
% 2em 是原教材实际的值,既消掉大部分告警,又不会排出稀疏的行。
|
||||||
|
%======================================================================
|
||||||
|
\setlength{\emergencystretch}{2em}
|
||||||
|
|
||||||
|
%======================================================================
|
||||||
|
% 六、常用排版命令
|
||||||
|
%======================================================================
|
||||||
|
% 表格里的色块占位(原教材 \ccr 的用途:图例色块)
|
||||||
|
\newcommand{\ouccolorcell}[1]{%
|
||||||
|
\makecell{{\color{#1}\rule{1cm}{1cm}}}}
|
||||||
|
|
||||||
|
%======================================================================
|
||||||
|
% 七、章节末的标准小节
|
||||||
|
%
|
||||||
|
% 原教材每章固定以「本章小结」+「习题」收尾。
|
||||||
|
% 做成命令,避免各章写法不一致。
|
||||||
|
%======================================================================
|
||||||
|
\newcommand{\oucsummary}{\section{本章小结}}
|
||||||
|
\newcommand{\oucexercises}{\section{习题}}
|
||||||
|
|
||||||
|
%======================================================================
|
||||||
|
% 八、封面:无封面图时不插 example-image
|
||||||
|
%
|
||||||
|
% ⚠️⚠️ elegantbook 在没写 \cover{} 时会插入 mwe 宏包的 example-image,
|
||||||
|
% 也就是**一张印着 "Image" 字样的灰底占位图**,铺满首页。
|
||||||
|
% 源码(cls 第 1288~1300 行):
|
||||||
|
% \ifcsname @cover\endcsname
|
||||||
|
% \includegraphics[width=\linewidth]{\@cover}
|
||||||
|
% \else
|
||||||
|
% \includegraphics[width=\linewidth]{example-image} ← 就是这个
|
||||||
|
% \fi
|
||||||
|
% 交付给别人的模板首页顶着 "Image" 两个大字,不合适。
|
||||||
|
%
|
||||||
|
% ⇒ 解法在 cls 里,不在本文件:本地化版本的 elegantbook.cls 已把
|
||||||
|
% 那两处 example-image 换成了 \ouc@coverblank(一个占位盒子)。
|
||||||
|
% 这样不写 \cover{} 时封面只有色带和文字,没有占位图。
|
||||||
|
%
|
||||||
|
% ⚠️⚠️ 占位盒的宽度**不能是 0**。
|
||||||
|
%
|
||||||
|
% 第一版写成 \rule{0pt}{0pt}(0 宽),立刻冒出
|
||||||
|
% Overfull \hbox (5.00002pt too wide) in paragraph at lines 44--44
|
||||||
|
% 而且它只出现在 \maketitle 那一行,改 \hspace{2em}、\hspace{2.5em}、
|
||||||
|
% 溢出量死钉在 5.00002pt 不动。
|
||||||
|
%
|
||||||
|
% 根因:0 宽空盒让 \linewidth 在 titlepage 里的计算与 \textwidth
|
||||||
|
% 差了 5pt,后续并排的 \parbox{0.8\textwidth} + 两个 minipage
|
||||||
|
% 就整体超宽。
|
||||||
|
%
|
||||||
|
% ✅ 正解:给占位盒一个满宽
|
||||||
|
% \newcommand{\ouc@coverblank}{%
|
||||||
|
% \rule{0pt}{0pt}\hspace{\linewidth}\rule{0pt}{0pt}}
|
||||||
|
% 实际0 Overfull。
|
||||||
|
%
|
||||||
|
% ⚠️ 不要试图在本文件里用 \ifcsname 覆盖 \@cover 来绕开 —— 实际
|
||||||
|
% \@cover 即使定义成空串也会走 \includegraphics{} 分支报错。
|
||||||
|
% 改 cls 是唯一干净的办法。
|
||||||
|
%======================================================================
|
||||||
|
|
||||||
|
\endinput
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
% 教材模板示例参考文献
|
||||||
|
% ⚠️ 这两条是**虚构条目**,只用于展示 biblatex 的排版格式。
|
||||||
|
% 实际使用时整份文件替换为真实文献库。
|
||||||
|
|
||||||
|
@book{example2020,
|
||||||
|
author = {作者甲 and 作者乙},
|
||||||
|
title = {软件工程导论},
|
||||||
|
publisher = {示例出版社},
|
||||||
|
address = {北京},
|
||||||
|
year = {2020},
|
||||||
|
edition = {第 3 版},
|
||||||
|
language = {chinese},
|
||||||
|
}
|
||||||
|
|
||||||
|
@article{example2021,
|
||||||
|
author = {Author, Alpha and Author, Beta},
|
||||||
|
title = {A Sample Article for Bibliography Formatting},
|
||||||
|
journal = {Journal of Examples},
|
||||||
|
volume = {12},
|
||||||
|
number = {3},
|
||||||
|
pages = {45--67},
|
||||||
|
year = {2021},
|
||||||
|
doi = {10.0000/example.2021.001},
|
||||||
|
}
|
||||||
@@ -0,0 +1,224 @@
|
|||||||
|
%======================================================================
|
||||||
|
% 中国海洋大学 教材 模板(示例)
|
||||||
|
%
|
||||||
|
% 从《软件需求工程导论》(sre 仓库) 的版式抽取而来。
|
||||||
|
% 正文内容为占位示例,只用来展示版式,不含原书内容。
|
||||||
|
%
|
||||||
|
% 编译: xelatex 教材.tex
|
||||||
|
% 有参考文献时:xelatex → bibtex → xelatex → xelatex
|
||||||
|
%
|
||||||
|
% ------------------------------------------------------------------
|
||||||
|
% ⚠️⚠️ 前两行不能动、不能换序
|
||||||
|
%
|
||||||
|
% 第 1 行 \documentclass 必须含 chinesefont=nofont
|
||||||
|
% 第 2 行 \input{../fonts.tex} 接入仓库公共字体
|
||||||
|
%
|
||||||
|
% 写错任一处都会退回商业字体或系统字体,详见 ouctextbook.sty 第一节。
|
||||||
|
% ------------------------------------------------------------------
|
||||||
|
%======================================================================
|
||||||
|
\documentclass[lang=cn,newtx,10pt,black,chinesefont=nofont]{elegantbook}
|
||||||
|
\input{../fonts.tex}
|
||||||
|
\usepackage{ouctextbook}
|
||||||
|
|
||||||
|
% ---- 书名信息 ----
|
||||||
|
\title{教材模板示例}
|
||||||
|
\subtitle{副标题写在这里}
|
||||||
|
\author{作者甲 \quad 作者乙 \quad 作者丙}
|
||||||
|
\institute{中国海洋大学}
|
||||||
|
\date{2026/11/1}
|
||||||
|
\version{第一版}
|
||||||
|
\extrainfo{出版社}
|
||||||
|
|
||||||
|
% ---- 封面图 ----
|
||||||
|
% 图片放在本目录,写 \cover{文件名}。
|
||||||
|
% 不写 \cover{} 则只出纯色带封面,不会报错。
|
||||||
|
\cover{cover.jpg}
|
||||||
|
|
||||||
|
% ---- 参考文献库(必须在 \begin{document} 之前)----
|
||||||
|
\addbibresource[location=local]{reference.bib}
|
||||||
|
|
||||||
|
\begin{document}
|
||||||
|
|
||||||
|
% ---- 标题页(elegantbook 自动生成,含书名/作者/机构/版本/日期)----
|
||||||
|
\maketitle
|
||||||
|
|
||||||
|
% ---- 前置部分:页码用罗马数字 ----
|
||||||
|
\frontmatter
|
||||||
|
\tableofcontents
|
||||||
|
|
||||||
|
%======================================================================
|
||||||
|
% 前言
|
||||||
|
%
|
||||||
|
% ⚠️ 前言用 \chapter*(不进编号、不进目录),
|
||||||
|
% 与正文章节的 \chapter 区分。原教材如此。
|
||||||
|
%======================================================================
|
||||||
|
\chapter*{前言}
|
||||||
|
\markboth{前言}{前言}
|
||||||
|
|
||||||
|
这里写前言。教材前言通常包括:本书的写作背景与目的、读者对象、
|
||||||
|
全书结构安排、各章内容简介、使用建议(可作为哪些课程的教材、
|
||||||
|
需要哪些先修知识)、致谢、以及勘误联系方式。
|
||||||
|
|
||||||
|
\vspace{1.5em}
|
||||||
|
|
||||||
|
\hfill 编\quad 者\\
|
||||||
|
\hfill 2026 年 11 月
|
||||||
|
|
||||||
|
% ---- 正文部分:页码用阿拉伯数字,章从 1 开始 ----
|
||||||
|
\mainmatter
|
||||||
|
|
||||||
|
%======================================================================
|
||||||
|
% 正文示例章
|
||||||
|
%
|
||||||
|
% ⚠️ 章的标准结构(原教材 13 章全部如此):
|
||||||
|
% \chapter{标题}
|
||||||
|
% → 导语(3~5 段,概述本章要点与结构)
|
||||||
|
% → \section 正文各节
|
||||||
|
% → \section{本章小结}
|
||||||
|
% → \section{习题}
|
||||||
|
%======================================================================
|
||||||
|
\chapter{章节标题示例}
|
||||||
|
|
||||||
|
本章导语。教材每章开篇先有一段到几段导语,说明本章要解决什么问题、
|
||||||
|
分几部分展开、与其他章的关系。这段文字通常在 3~5 段、200~400 字之间,
|
||||||
|
让读者在进入细节前建立整体框架。
|
||||||
|
|
||||||
|
导语的第二段继续交代本章的组织逻辑。例如「首先……接着……随后……
|
||||||
|
最后……」这样的行文,既是给读者的路线图,也是作者自查结构是否清晰的
|
||||||
|
工具。
|
||||||
|
|
||||||
|
\section{节标题}
|
||||||
|
|
||||||
|
正文段落。教材正文 10pt,行距由 elegantbook 设定为 1.2 倍。
|
||||||
|
|
||||||
|
行内可以用 \textbf{黑体强调}、\emph{楷体强调},以及英文术语
|
||||||
|
Requirements Engineering 和缩写 SRE。
|
||||||
|
|
||||||
|
\subsection{小节标题}
|
||||||
|
|
||||||
|
更细一层的展开。
|
||||||
|
|
||||||
|
\subsubsection{小小节标题}
|
||||||
|
|
||||||
|
最细一层。注意编号最多到这里(1.1.1.1)。
|
||||||
|
|
||||||
|
\paragraph{第五级标题}
|
||||||
|
这一级不再进编号,改用「(1)(2)(3)」形式,避免编号过长。
|
||||||
|
新的一段从段首开始。
|
||||||
|
|
||||||
|
\paragraph{再一个第五级标题}
|
||||||
|
编号自动递增为(2)。
|
||||||
|
|
||||||
|
\section{列表与表格示例}
|
||||||
|
|
||||||
|
无序列表:
|
||||||
|
|
||||||
|
\begin{itemize}
|
||||||
|
\item \textbf{项目软件。}由甲方委托开发,需求主要来自甲方。
|
||||||
|
\item \textbf{产品软件。}面向普通用户,需求来自产品经理。
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
有序列表:
|
||||||
|
|
||||||
|
\begin{enumerate}
|
||||||
|
\item \textbf{系统化方法:}使用可重复的过程与标准工具。
|
||||||
|
\item \textbf{工程原则:}模块化、抽象、分而治之。
|
||||||
|
\item \textbf{质量保证:}通过测试、审查与验证确保质量。
|
||||||
|
\end{enumerate}
|
||||||
|
|
||||||
|
表格示例(教材表格通常用三线表,见 \texttt{booktabs};
|
||||||
|
这里演示最简的带框表格,与原教材一致):
|
||||||
|
|
||||||
|
\begin{table}[htbp]
|
||||||
|
\centering
|
||||||
|
\caption{表格标题示例}
|
||||||
|
\label{tab:example}
|
||||||
|
\begin{tabular}{|l|l|}
|
||||||
|
\hline
|
||||||
|
\textbf{列标题一} & \textbf{列标题二} \\ \hline
|
||||||
|
内容 A & 15.9\% \\ \hline
|
||||||
|
内容 B & 13.9\% \\ \hline
|
||||||
|
\end{tabular}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
见表~\ref{tab:example} 可见表题在表上方。
|
||||||
|
|
||||||
|
\section{插图示例}
|
||||||
|
|
||||||
|
\begin{figure}[H]
|
||||||
|
\centering
|
||||||
|
% 有图时:\includegraphics[width=0.8\textwidth]{image/xxx.png}
|
||||||
|
\fbox{\parbox[c][3cm][c]{0.6\textwidth}{\centering 图占位}}
|
||||||
|
\caption{图标题示例}
|
||||||
|
\label{fig:example}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
见图~\ref{fig:example}。图题在图下方,与表题相反,这是通行惯例。
|
||||||
|
|
||||||
|
\section{TikZ 绘图示例}
|
||||||
|
|
||||||
|
教材里的关系图、流程图多用 TikZ 直接画,好处是矢量、可改、不用外部图片:
|
||||||
|
|
||||||
|
\begin{figure}[H]
|
||||||
|
\centering
|
||||||
|
\begin{tikzpicture}[
|
||||||
|
box/.style={draw, rounded corners, align=center,
|
||||||
|
fill=blue!6, minimum width=3.2cm, minimum height=1.0cm},
|
||||||
|
font=\small]
|
||||||
|
\node[box] (a) at (0,1.6) {甲方\\(提目标)};
|
||||||
|
\node[box] (b) at (0,-1.6) {用户\\(提需求)};
|
||||||
|
\node[box] (c) at (5,0) {开发团队};
|
||||||
|
\draw[->, thick] (a) -- node[right]{业务需求} (c);
|
||||||
|
\draw[->, thick] (b) -- node[above]{用户需求} (c);
|
||||||
|
\end{tikzpicture}
|
||||||
|
\caption{TikZ 绘图示例}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
% ---- 章节收尾(原教材每章固定这两节)----
|
||||||
|
\oucsummary
|
||||||
|
|
||||||
|
本章小结正文。原教材的小结通常是 1~2 段密集回顾,把本章的核心结论、
|
||||||
|
关键数据、与其他章的衔接一次交代清楚,不重复正文细节。
|
||||||
|
|
||||||
|
\oucexercises
|
||||||
|
|
||||||
|
\begin{enumerate}
|
||||||
|
\item 习题一示例。
|
||||||
|
\item 习题二示例。
|
||||||
|
\end{enumerate}
|
||||||
|
|
||||||
|
%======================================================================
|
||||||
|
% 附录
|
||||||
|
%
|
||||||
|
% ⚠️ \appendix 之后章号自动变 A、B、C……
|
||||||
|
% elegantbook 默认已是字母编号,但为保险显式重设一次
|
||||||
|
% (原教材主文件也这么写)。
|
||||||
|
%======================================================================
|
||||||
|
\appendix
|
||||||
|
\renewcommand{\thechapter}{\Alph{chapter}}
|
||||||
|
|
||||||
|
\chapter{附录标题示例}
|
||||||
|
|
||||||
|
附录正文。常见附录内容:术语表、缩略语表、工具清单、
|
||||||
|
实验数据、参考规范全文等。
|
||||||
|
|
||||||
|
\chapter{另一个附录}
|
||||||
|
|
||||||
|
附录二正文。
|
||||||
|
|
||||||
|
%======================================================================
|
||||||
|
% 参考文献
|
||||||
|
%
|
||||||
|
% ⚠️ 用 biblatex(elegantbook 已配好 biblatex + biber/bibtex 后端)
|
||||||
|
% \addbibresource 在导言区、\printbibliography 在正文末尾。
|
||||||
|
%
|
||||||
|
% 本示例的 reference.bib 只有 2 条假条目,仅供演示格式。
|
||||||
|
% 实际使用时替换为真实文献。
|
||||||
|
%
|
||||||
|
% ⚠️ \nocite{*} 表示"引用文献库里全部条目",模板演示用。
|
||||||
|
% 正式写作应删掉它,只列实际引用的文献。
|
||||||
|
%======================================================================
|
||||||
|
\nocite{*}
|
||||||
|
\printbibliography[heading=bibintoc, title=\ebibname]
|
||||||
|
|
||||||
|
\end{document}
|
||||||
+154
@@ -0,0 +1,154 @@
|
|||||||
|
# 点名册
|
||||||
|
|
||||||
|
中国海洋大学课程点名册,A4 横向,20 列考勤表。
|
||||||
|
|
||||||
|
## 编译
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd 点名册
|
||||||
|
xelatex 点名册.tex
|
||||||
|
```
|
||||||
|
|
||||||
|
或仓库根:`bash build.sh 点名册`
|
||||||
|
|
||||||
|
## 文件
|
||||||
|
|
||||||
|
| 文件 | 说明 |
|
||||||
|
|---|---|
|
||||||
|
| `点名册.tex` | 主文件,课程信息与学生名单改这里 |
|
||||||
|
| `oucroll.sty` | 版式包,一般不改 |
|
||||||
|
|
||||||
|
## 课程信息
|
||||||
|
|
||||||
|
```latex
|
||||||
|
\rollsetcourse{数字逻辑} % 课程名称
|
||||||
|
\rollsetcno{080502101231} % 课程号
|
||||||
|
\rollsetsno{25252029} % 选课号
|
||||||
|
\rollsetcredit{2.5} % 学分
|
||||||
|
\rollsetteacher{张远航} % 任课教师
|
||||||
|
\rollsetterm{2025 学年 秋 季学期} % 学年学期
|
||||||
|
```
|
||||||
|
|
||||||
|
| 命令 | 说明 |
|
||||||
|
|---|---|
|
||||||
|
| `\rollsetcourse{}` | 课程名称 |
|
||||||
|
| `\rollsetcno{}` | 课程号 |
|
||||||
|
| `\rollsetsno{}` | 选课号 |
|
||||||
|
| `\rollsetcredit{}` | 学分 |
|
||||||
|
| `\rollsetteacher{}` | 任课教师 |
|
||||||
|
| `\rollsetterm{}` | 学年学期 |
|
||||||
|
|
||||||
|
设完后调 `\rollinfo` 印出信息区:
|
||||||
|
|
||||||
|
```latex
|
||||||
|
\rolltitle{中国海洋大学点名册}
|
||||||
|
\rollsetcourse{数字逻辑}
|
||||||
|
...
|
||||||
|
\rollinfo
|
||||||
|
```
|
||||||
|
|
||||||
|
## 学生名单
|
||||||
|
|
||||||
|
每人一行,三列:序号、学号、姓名。后面 17 周留空手填。
|
||||||
|
|
||||||
|
```latex
|
||||||
|
\begin{rolltable}
|
||||||
|
\rollrow{1}{2525201001}{陈嘉禾}
|
||||||
|
\rollrow{2}{2525201002}{丁若彤}
|
||||||
|
...
|
||||||
|
\end{rolltable}
|
||||||
|
```
|
||||||
|
|
||||||
|
| 参数 | 说明 |
|
||||||
|
|---|---|
|
||||||
|
| 第 1 个 | 序号 |
|
||||||
|
| 第 2 个 | 学号 |
|
||||||
|
| 第 3 个 | 姓名 |
|
||||||
|
|
||||||
|
增删学生就增删 `\rollrow` 行。
|
||||||
|
|
||||||
|
## 一页能放多少行
|
||||||
|
|
||||||
|
A4 横向(297 × 210mm),上下边距 14/16mm,扣掉标题、课程信息、表头:
|
||||||
|
|
||||||
|
| 行高 | 一页行数 |
|
||||||
|
|---|---|
|
||||||
|
| 5.0mm | 27 行 |
|
||||||
|
| 4.5mm(默认) | 30 行 |
|
||||||
|
| 4.2mm | 33 行 |
|
||||||
|
|
||||||
|
超过这个数会溢出到第二页。要放更多学生,两个办法:
|
||||||
|
|
||||||
|
1. 改 `oucroll.sty` 里 `row{2-Z}={ht=4.5mm}` 的行高
|
||||||
|
2. 分两页,每页 30 人,第二页重复表头
|
||||||
|
|
||||||
|
## 表头
|
||||||
|
|
||||||
|
20 列表头依次是:序号、学号、姓名、1、2、3 …… 17。
|
||||||
|
|
||||||
|
周次列只写数字,不写「第 N 周」,因为横向空间有限。
|
||||||
|
|
||||||
|
改列宽或改周数,编辑 `oucroll.sty`:
|
||||||
|
|
||||||
|
```latex
|
||||||
|
\newcommand{\rollwno}{9mm} % 序号
|
||||||
|
\newcommand{\rollwid}{26mm} % 学号
|
||||||
|
\newcommand{\rollwname}{20mm} % 姓名
|
||||||
|
\newcommand{\rollwweek}{11.4734mm} % 每周
|
||||||
|
```
|
||||||
|
|
||||||
|
**改列宽时必须重算**,让总和恰好等于版心宽:
|
||||||
|
|
||||||
|
```
|
||||||
|
版心 = 297 − 14×2 = 269mm
|
||||||
|
表宽 = Σwd + 2×0.4×20(colsep)+ 0.4pt×20(竖线) = Σwd + 18.82mm
|
||||||
|
∴ Σwd = 269 − 18.82 = 250.18mm
|
||||||
|
```
|
||||||
|
|
||||||
|
## 表尾说明
|
||||||
|
|
||||||
|
```latex
|
||||||
|
\rollfoot{标记方式自行约定(如「√」出席、「缺」缺席、「假」请假)。}
|
||||||
|
```
|
||||||
|
|
||||||
|
不要就删掉这一行。
|
||||||
|
|
||||||
|
## 版式
|
||||||
|
|
||||||
|
```
|
||||||
|
A4 横向 297 × 210 mm
|
||||||
|
边距 左右 14mm,上 12mm,下 16mm
|
||||||
|
标题 20pt 黑体居中
|
||||||
|
课程信息 10.5pt,两行三项,三栏定宽对齐
|
||||||
|
表格 20 列 × (1 表头 + N 数据行)
|
||||||
|
表头行高 7.0mm,数据行高 4.5mm
|
||||||
|
正文 10.5pt,表头 8pt,表体 10pt
|
||||||
|
不排页码
|
||||||
|
```
|
||||||
|
|
||||||
|
### 课程信息的对齐
|
||||||
|
|
||||||
|
六项按两行三栏排,栏位固定:
|
||||||
|
|
||||||
|
```
|
||||||
|
课程名称:xxx 课程号:xxx 选课号:xxx
|
||||||
|
学分:xxx 任课教师:xxx 学年学期:xxx
|
||||||
|
```
|
||||||
|
|
||||||
|
每栏宽 89.67mm(版心 269mm 三等分),标签占 18mm,值占 63.67mm。
|
||||||
|
上下两行的冒号位置严格对齐。
|
||||||
|
|
||||||
|
值超过 17 个汉字会自动折行,不会压到下一栏。要调整栏宽或标签宽度,
|
||||||
|
改 `oucroll.sty`:
|
||||||
|
|
||||||
|
```latex
|
||||||
|
\setlength{\rollcolw}{89.6667mm} % 每栏宽
|
||||||
|
\setlength{\rolllabw}{18mm} % 标签宽
|
||||||
|
\setlength{\rollvalw}{63.6667mm} % 值宽
|
||||||
|
```
|
||||||
|
|
||||||
|
三者关系:`rollvalw = rollcolw − rolllabw − 8mm`(8mm 是栏间余量)。
|
||||||
|
|
||||||
|
## 注意
|
||||||
|
|
||||||
|
示例学生名单是虚构数据,使用时全部替换。
|
||||||
+215
@@ -0,0 +1,215 @@
|
|||||||
|
\NeedsTeXFormat{LaTeX2e}
|
||||||
|
\ProvidesPackage{oucroll}[2026/11/03 v1.0 OUC roll-call sheet]
|
||||||
|
|
||||||
|
%======================================================================
|
||||||
|
% oucroll.sty —— 点名册版式包
|
||||||
|
%
|
||||||
|
% 横版 A4,20 列表格:序号 / 学号 / 姓名 / 第1~17周
|
||||||
|
% 用法见同目录 README.md
|
||||||
|
%======================================================================
|
||||||
|
|
||||||
|
\RequirePackage{geometry}
|
||||||
|
\RequirePackage{fontspec}
|
||||||
|
\RequirePackage{xeCJK}
|
||||||
|
\RequirePackage{tabularray}
|
||||||
|
\RequirePackage{calc}
|
||||||
|
|
||||||
|
%======================================================================
|
||||||
|
% 一、页面:A4 横向
|
||||||
|
%======================================================================
|
||||||
|
\geometry{
|
||||||
|
paperwidth = 297mm,
|
||||||
|
paperheight = 210mm,
|
||||||
|
left = 14mm,
|
||||||
|
right = 14mm,
|
||||||
|
top = 12mm,
|
||||||
|
bottom = 16mm,
|
||||||
|
headheight = 0pt,
|
||||||
|
headsep = 0pt,
|
||||||
|
footskip = 8mm,
|
||||||
|
}
|
||||||
|
\setlength{\parindent}{0pt}
|
||||||
|
\setlength{\parskip}{0pt}
|
||||||
|
\pagestyle{empty} % 点名册单页,不排页码
|
||||||
|
|
||||||
|
\input{../fonts.tex}
|
||||||
|
|
||||||
|
%======================================================================
|
||||||
|
% 二、字号
|
||||||
|
%======================================================================
|
||||||
|
\newcommand{\rollbasefont}{%
|
||||||
|
\linespread{1}\relax
|
||||||
|
\fontsize{10.5bp}{13bp}\selectfont}
|
||||||
|
|
||||||
|
\newcommand{\rolltitlefont}{\linespread{1}\relax\fontsize{20bp}{24bp}\selectfont}
|
||||||
|
\newcommand{\rollinfofont} {\linespread{1}\relax\fontsize{10.5bp}{15bp}\selectfont}
|
||||||
|
\newcommand{\rollheadfont} {\linespread{1}\relax\fontsize{8bp}{9.5bp}\selectfont}
|
||||||
|
\newcommand{\rollcellfont} {\linespread{1}\relax\fontsize{10bp}{12.5bp}\selectfont}
|
||||||
|
\newcommand{\rollweekfont} {\linespread{1}\relax\fontsize{7.5bp}{9bp}\selectfont}
|
||||||
|
|
||||||
|
%======================================================================
|
||||||
|
% 三、列宽
|
||||||
|
%
|
||||||
|
% 版心宽 269mm(297 − 14×2)。
|
||||||
|
% tabularray 的实际表宽 = Σwd + 2×colsep×列数 + 竖线宽×列数
|
||||||
|
% 20 列时:2×0.4×20 = 16.00mm,竖线 0.4pt×20 = 2.82mm,共 18.82mm
|
||||||
|
% 故 Σwd 只能取 269 − 18.82 = 250.18mm
|
||||||
|
%
|
||||||
|
% 序号 9 + 学号 26 + 姓名 20 = 55mm
|
||||||
|
% 余 195.18mm 分给 17 周,每周 11.4810mm
|
||||||
|
%======================================================================
|
||||||
|
\newcommand{\rollrule}{0.4pt}
|
||||||
|
\newcommand{\rollcolsep}{0.4mm}
|
||||||
|
|
||||||
|
\newcommand{\rollwno}{9mm} % 序号
|
||||||
|
\newcommand{\rollwid}{26mm} % 学号
|
||||||
|
\newcommand{\rollwname}{20mm} % 姓名
|
||||||
|
\newcommand{\rollwweek}{11.4734mm} % 每周
|
||||||
|
|
||||||
|
%======================================================================
|
||||||
|
% 四、课程信息
|
||||||
|
%
|
||||||
|
% \rollinfo{课程名称}{数值}
|
||||||
|
% 信息行按「标签 + 值」成对排版,一行放三项。
|
||||||
|
%======================================================================
|
||||||
|
\newcommand{\rollcourse}{} % 课程名称
|
||||||
|
\newcommand{\rollcno}{} % 课程号
|
||||||
|
\newcommand{\rollsno}{} % 选课号
|
||||||
|
\newcommand{\rollcredit}{} % 学分
|
||||||
|
\newcommand{\rollteacher}{} % 任课教师
|
||||||
|
\newcommand{\rollterm}{} % 学年学期
|
||||||
|
\newcommand{\rolldept}{} % 开课单位
|
||||||
|
|
||||||
|
\newcommand{\rollsetcourse}[1]{\renewcommand{\rollcourse}{#1}}
|
||||||
|
\newcommand{\rollsetcno}[1]{\renewcommand{\rollcno}{#1}}
|
||||||
|
\newcommand{\rollsetsno}[1]{\renewcommand{\rollsno}{#1}}
|
||||||
|
\newcommand{\rollsetcredit}[1]{\renewcommand{\rollcredit}{#1}}
|
||||||
|
\newcommand{\rollsetteacher}[1]{\renewcommand{\rollteacher}{#1}}
|
||||||
|
\newcommand{\rollsetterm}[1]{\renewcommand{\rollterm}{#1}}
|
||||||
|
\newcommand{\rollsetdept}[1]{\renewcommand{\rolldept}{#1}}
|
||||||
|
|
||||||
|
%======================================================================
|
||||||
|
% 五、标题
|
||||||
|
%======================================================================
|
||||||
|
\newcommand{\rolltitle}[1]{%
|
||||||
|
\par\begingroup\centering
|
||||||
|
{\heiti\rolltitlefont #1\par}%
|
||||||
|
\endgroup\vspace*{2mm}}
|
||||||
|
|
||||||
|
%======================================================================
|
||||||
|
% 六、课程信息区
|
||||||
|
%
|
||||||
|
% 两行 × 三栏,定宽对齐。
|
||||||
|
%
|
||||||
|
% ⚠️ 不能用 \hfill 均分:\hfill 只均分行内剩余空间,各栏起点会随
|
||||||
|
% 标签与值的长短前后漂移,六项在两行里对不上。
|
||||||
|
%
|
||||||
|
% ⚠️ 值用 \parbox 显式限宽,不用 tabular 的 p 列。
|
||||||
|
% p 列在 xeCJK 下遇到全角标点(如「(」)时断行判定不稳定,
|
||||||
|
% 实测同样列宽,有的内容断、有的不断。\parbox 加 \raggedright
|
||||||
|
% 断行行为可预期。
|
||||||
|
%======================================================================
|
||||||
|
\newlength{\rollcolw}
|
||||||
|
\setlength{\rollcolw}{89.6667mm} % 269mm / 3
|
||||||
|
|
||||||
|
\newlength{\rolllabw}
|
||||||
|
\setlength{\rolllabw}{18mm} % 标签宽,「学年学期」四字 × 10.5bp ≈ 14.8mm
|
||||||
|
|
||||||
|
\newlength{\rollvalw}
|
||||||
|
\setlength{\rollvalw}{63.6667mm} % 值宽 = 89.6667 − 18 − 8(栏间余量)
|
||||||
|
|
||||||
|
% 一栏:标签(定宽黑体)+ 冒号 + 值(定宽,超长自动换行)
|
||||||
|
%
|
||||||
|
% ⚠️ 值必须加 \sloppy。xeCJK 对全角标点(如「(」)前后有断行禁则,
|
||||||
|
% 正常断行惩罚下 TeX 宁可溢出也不在此处断,表现为文字压到下一栏。
|
||||||
|
% \sloppy 放宽 \tolerance,让它在下一个汉字边界断掉。
|
||||||
|
\newcommand{\rollfield}[2]{%
|
||||||
|
\makebox[\rolllabw][l]{\heiti #1}%
|
||||||
|
\parbox[t]{\rollvalw}{\raggedright\sloppy :#2}}
|
||||||
|
|
||||||
|
% 三栏一行
|
||||||
|
\newcommand{\rollinforow}[6]{%
|
||||||
|
\noindent
|
||||||
|
\rollfield{#1}{#2}\hspace*{8mm}%
|
||||||
|
\rollfield{#3}{#4}\hspace*{8mm}%
|
||||||
|
\rollfield{#5}{#6}\par}
|
||||||
|
|
||||||
|
\newcommand{\rollinfo}{%
|
||||||
|
\begingroup\rollinfofont
|
||||||
|
\rollinforow{课程名称}{\rollcourse}%
|
||||||
|
{课程号}{\rollcno}%
|
||||||
|
{选课号}{\rollsno}%
|
||||||
|
\vspace*{1.2mm}%
|
||||||
|
\rollinforow{学分}{\rollcredit}%
|
||||||
|
{任课教师}{\rollteacher}%
|
||||||
|
{学年学期}{\rollterm}%
|
||||||
|
\endgroup\vspace*{2.5mm}}
|
||||||
|
|
||||||
|
%======================================================================
|
||||||
|
% 七、周次表头
|
||||||
|
%
|
||||||
|
% 「第 1 周」写成「1」,表头下方一行标注「周次」,这样表头只占
|
||||||
|
% 一行高度,横向也省空间 —— 20 列挤在一行里,竖排会撑高表头。
|
||||||
|
%======================================================================
|
||||||
|
\newcommand{\rollweekhead}[1]{%
|
||||||
|
{\heiti\rollheadfont #1}}
|
||||||
|
|
||||||
|
%======================================================================
|
||||||
|
% 八、表格环境
|
||||||
|
%
|
||||||
|
% 20 列:3 固定 + 17 周
|
||||||
|
% 表头单行:序号 / 学号 / 姓名 / 1 / 2 / … / 17
|
||||||
|
%======================================================================
|
||||||
|
\newcounter{rollrow}
|
||||||
|
|
||||||
|
\newenvironment{rolltable}{%
|
||||||
|
\par\begingroup\rollcellfont
|
||||||
|
\begin{tblr}[label=none, expand=\rollrow]{
|
||||||
|
colspec={
|
||||||
|
Q[c,m,wd=\rollwno]
|
||||||
|
Q[c,m,wd=\rollwid]
|
||||||
|
Q[c,m,wd=\rollwname]
|
||||||
|
*{17}{Q[c,m,wd=\rollwweek]}
|
||||||
|
},
|
||||||
|
colsep=\rollcolsep, rowsep=0pt, stretch=0,
|
||||||
|
hline{1-Z}={\rollrule}, vline{1-Z}={\rollrule},
|
||||||
|
row{1}={ht=7.0mm},
|
||||||
|
row{2-Z}={ht=4.5mm},
|
||||||
|
}%
|
||||||
|
% ---- 表头 ----
|
||||||
|
{\heiti\rollheadfont 序号} &
|
||||||
|
{\heiti\rollheadfont 学号} &
|
||||||
|
{\heiti\rollheadfont 姓名} &
|
||||||
|
\rollweekhead{1} & \rollweekhead{2} & \rollweekhead{3} & \rollweekhead{4} &
|
||||||
|
\rollweekhead{5} & \rollweekhead{6} & \rollweekhead{7} & \rollweekhead{8} &
|
||||||
|
\rollweekhead{9} & \rollweekhead{10} & \rollweekhead{11} & \rollweekhead{12} &
|
||||||
|
\rollweekhead{13} & \rollweekhead{14} & \rollweekhead{15} & \rollweekhead{16} &
|
||||||
|
\rollweekhead{17} \\
|
||||||
|
}{%
|
||||||
|
\end{tblr}\par\endgroup}
|
||||||
|
|
||||||
|
%======================================================================
|
||||||
|
% 九、数据行
|
||||||
|
%
|
||||||
|
% \rollrow{序号}{学号}{姓名}
|
||||||
|
% 后面 17 个空格留给手填考勤。
|
||||||
|
%
|
||||||
|
% ⚠️ 必须用 \def 而不是 \newcommand:tblr 的 expand= 选项在读取
|
||||||
|
% 环境体时就展开,\newcommand 生成的宏不可展开,& 会被当成
|
||||||
|
% 「Misplaced alignment tab」报错。
|
||||||
|
%======================================================================
|
||||||
|
\def\rollrow#1#2#3{%
|
||||||
|
#1 & #2 & #3 &
|
||||||
|
& & & & & & & & & & & & & & & & \\
|
||||||
|
}
|
||||||
|
|
||||||
|
%======================================================================
|
||||||
|
% 十、脚注(可选)
|
||||||
|
%======================================================================
|
||||||
|
\newcommand{\rollfoot}[1]{%
|
||||||
|
\par\vspace*{2mm}%
|
||||||
|
\begingroup\rollinfofont{\heiti 说明:}#1\par\endgroup}
|
||||||
|
|
||||||
|
\AtBeginDocument{\rollbasefont}
|
||||||
|
|
||||||
|
\endinput
|
||||||
BIN
Binary file not shown.
+58
@@ -0,0 +1,58 @@
|
|||||||
|
\documentclass[UTF8,fontset=none]{ctexart}
|
||||||
|
\usepackage{oucroll}
|
||||||
|
|
||||||
|
%======================================================================
|
||||||
|
% 点名册
|
||||||
|
%
|
||||||
|
% 编译:在本文目录下 xelatex 点名册.tex
|
||||||
|
%======================================================================
|
||||||
|
|
||||||
|
\begin{document}
|
||||||
|
|
||||||
|
\rolltitle{中国海洋大学点名册}
|
||||||
|
|
||||||
|
\rollsetcourse{数字逻辑}
|
||||||
|
\rollsetcno{080502101231}
|
||||||
|
\rollsetsno{25252029}
|
||||||
|
\rollsetcredit{2.5}
|
||||||
|
\rollsetteacher{张远航}
|
||||||
|
\rollsetterm{2025 学年 秋 季学期}
|
||||||
|
|
||||||
|
\rollinfo
|
||||||
|
|
||||||
|
\begin{rolltable}
|
||||||
|
\rollrow{1}{2525201001}{陈嘉禾}
|
||||||
|
\rollrow{2}{2525201002}{丁若彤}
|
||||||
|
\rollrow{3}{2525201003}{方志远}
|
||||||
|
\rollrow{4}{2525201004}{高文轩}
|
||||||
|
\rollrow{5}{2525201005}{郭思远}
|
||||||
|
\rollrow{6}{2525201006}{韩雨桐}
|
||||||
|
\rollrow{7}{2525201007}{何书宁}
|
||||||
|
\rollrow{8}{2525201008}{胡锦程}
|
||||||
|
\rollrow{9}{2525201009}{黄语晨}
|
||||||
|
\rollrow{10}{2525201010}{蒋心怡}
|
||||||
|
\rollrow{11}{2525201011}{孔令仪}
|
||||||
|
\rollrow{12}{2525201012}{李明哲}
|
||||||
|
\rollrow{13}{2525201013}{林可欣}
|
||||||
|
\rollrow{14}{2525201014}{刘慕思}
|
||||||
|
\rollrow{15}{2525201015}{陆承宇}
|
||||||
|
\rollrow{16}{2525201016}{罗嘉懿}
|
||||||
|
\rollrow{17}{2525201017}{马雨欣}
|
||||||
|
\rollrow{18}{2525201018}{苗梓涵}
|
||||||
|
\rollrow{19}{2525201019}{倪瑞泽}
|
||||||
|
\rollrow{20}{2525201020}{潘书瑶}
|
||||||
|
\rollrow{21}{2525201021}{彭亦凡}
|
||||||
|
\rollrow{22}{2525201022}{钱家豪}
|
||||||
|
\rollrow{23}{2525201023}{秦若雯}
|
||||||
|
\rollrow{24}{2525201024}{沈靖宇}
|
||||||
|
\rollrow{25}{2525201025}{苏瑾瑜}
|
||||||
|
\rollrow{26}{2525201026}{孙牧之}
|
||||||
|
\rollrow{27}{2525201027}{谭心悦}
|
||||||
|
\rollrow{28}{2525201028}{汤子墨}
|
||||||
|
\rollrow{29}{2525201029}{汪雨桐}
|
||||||
|
\rollrow{30}{2525201030}{王浩然}
|
||||||
|
\end{rolltable}
|
||||||
|
|
||||||
|
\rollfoot{标记方式自行约定(如「√」出席、「缺」缺席、「假」请假)。}
|
||||||
|
|
||||||
|
\end{document}
|
||||||
@@ -0,0 +1,98 @@
|
|||||||
|
# 特殊事项说明表
|
||||||
|
|
||||||
|
中国海洋大学报销用特殊事项说明表,A4 单页,含事项描述与三级签字审批。
|
||||||
|
|
||||||
|
## 编译
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd 特殊事项说明表
|
||||||
|
xelatex 特殊事项说明表.tex
|
||||||
|
```
|
||||||
|
|
||||||
|
或仓库根:`bash build.sh 特殊事项说明表`
|
||||||
|
|
||||||
|
## 文件
|
||||||
|
|
||||||
|
| 文件 | 说明 |
|
||||||
|
|---|---|
|
||||||
|
| `特殊事项说明表.tex` | 主文件,填内容改这里 |
|
||||||
|
| `ouccsx.sty` | 版式包,一般不改 |
|
||||||
|
|
||||||
|
## 填写参数
|
||||||
|
|
||||||
|
全部在 `\begin{document}` 之前定义:
|
||||||
|
|
||||||
|
```latex
|
||||||
|
\newcommand{\sxdesc}{%
|
||||||
|
因渤海湾生态环境监测浮标需要例行维护,前往昌邑近岸观测站更换传感器……}
|
||||||
|
|
||||||
|
\newcommand{\sxdateA}{} % 项目负责人签字处日期
|
||||||
|
\newcommand{\sxdateB}{} % 单位负责人签字处日期
|
||||||
|
\newcommand{\sxdateC}{} % 科技管理部门签字处日期
|
||||||
|
```
|
||||||
|
|
||||||
|
| 参数 | 说明 |
|
||||||
|
|---|---|
|
||||||
|
| `\sxdesc` | 事项描述正文,可写多段(用 `\par` 分开) |
|
||||||
|
| `\sxdateA` | 项目负责人签字处日期 |
|
||||||
|
| `\sxdateB` | 单位负责人签字处日期 |
|
||||||
|
| `\sxdateC` | 科技管理部门签字处日期 |
|
||||||
|
|
||||||
|
### 日期怎么写
|
||||||
|
|
||||||
|
留空则印成「 年 月 日」供手写。要打印具体日期:
|
||||||
|
|
||||||
|
```latex
|
||||||
|
\newcommand{\sxdateA}{2026} % 只印年份
|
||||||
|
\newcommand{\sxdateA}{2026}{10}{28} % 但这不是正确写法
|
||||||
|
```
|
||||||
|
|
||||||
|
正确写法是用完整版命令(三参数版本,写在同一行的花括号内):
|
||||||
|
|
||||||
|
```latex
|
||||||
|
\newcommand{\sxdateA}{\sxdatefull{2026}{10}{28}}
|
||||||
|
```
|
||||||
|
|
||||||
|
要只印年份就用 `\newcommand{\sxdateA}{2026}`,其余留空手填。
|
||||||
|
|
||||||
|
## 生成的表格
|
||||||
|
|
||||||
|
`\sxform` 一条命令印出整个表:
|
||||||
|
|
||||||
|
```latex
|
||||||
|
\begin{document}
|
||||||
|
\sxform
|
||||||
|
\end{document}
|
||||||
|
```
|
||||||
|
|
||||||
|
表格内容:
|
||||||
|
|
||||||
|
| 区段 | 内容 |
|
||||||
|
|---|---|
|
||||||
|
| 标题 | 特殊事项说明表 |
|
||||||
|
| 事项描述 | `\sxdesc` 的内容,占主表区 |
|
||||||
|
| 签字栏 | 三处签字与日期 |
|
||||||
|
| 表尾 | 说明条款 |
|
||||||
|
|
||||||
|
## 常用命令
|
||||||
|
|
||||||
|
| 命令 | 用途 |
|
||||||
|
|---|---|
|
||||||
|
| `\sxform` | 印出整张表 |
|
||||||
|
| `\sxtitle{标题}` | 改主标题文字 |
|
||||||
|
| `\sxtable` | 只印表格部分(不含标题) |
|
||||||
|
| `\sxnotes` / `\sxnoteitem` | 表尾说明条目 |
|
||||||
|
| `\sxfootcontent` | 表尾内容 |
|
||||||
|
| `\sxfonttitle` / `\sxfontbody` / `\sxfontsign` / `\sxfontfoot` | 各区块字体设置 |
|
||||||
|
|
||||||
|
## 版式
|
||||||
|
|
||||||
|
```
|
||||||
|
A4,单页
|
||||||
|
标题黑体,正文宋体,签字栏楷体
|
||||||
|
三处签字:项目负责人 / 单位负责人 / 科技管理部门
|
||||||
|
```
|
||||||
|
|
||||||
|
## 注意
|
||||||
|
|
||||||
|
示例内容是虚构数据,使用时整段替换 `\sxdesc`。签字与日期栏留空手填。
|
||||||
@@ -0,0 +1,630 @@
|
|||||||
|
%======================================================================
|
||||||
|
% ouccsx.sty — 中国海洋大学 特殊事项说明表 版式包
|
||||||
|
%
|
||||||
|
% 依据:报销相关/中国海洋大学特殊事项说明表.docx(Word 2007 保存)
|
||||||
|
% 目标:版式与逐项对齐;内容可随意增删而不破版。
|
||||||
|
%
|
||||||
|
% 尺寸换算:
|
||||||
|
% twips → pt : pt = twips / 20 (1 pt = 1/20 twip)
|
||||||
|
% twips → mm : mm = twips / 1440 * 25.4
|
||||||
|
% w:sz : 半磅值,÷ 2 即 pt
|
||||||
|
% w:line : 1/20 pt(lineRule="exact" 时即精确行距)
|
||||||
|
%
|
||||||
|
% ⚠️ 与 PDF 对齐的几何量一律用 bp(= 1/72 in,PDF 用户单位),
|
||||||
|
% 不用 pt(= 1/72.27 in)。两者差 0.375%,A4 上累积可达 2 pt,
|
||||||
|
% 超过一个字符宽,肉眼看得出。标注坐标者均为 PDF 坐标
|
||||||
|
% (左上原点、向下为正)。
|
||||||
|
%
|
||||||
|
% 用法见同目录 特殊事项说明表.tex,说明见 README.md
|
||||||
|
%======================================================================
|
||||||
|
\NeedsTeXFormat{LaTeX2e}
|
||||||
|
\ProvidesPackage{ouccsx}[2026/10/28 v1.2 OUC special item statement form]
|
||||||
|
|
||||||
|
\RequirePackage{geometry}
|
||||||
|
\RequirePackage{fontspec}
|
||||||
|
\RequirePackage{xeCJK}
|
||||||
|
\RequirePackage{fancyhdr}
|
||||||
|
|
||||||
|
%======================================================================
|
||||||
|
% 1. 页面与版心
|
||||||
|
%
|
||||||
|
% sectPr:
|
||||||
|
% pgSz 11906 × 16838 twips = 210.02 × 297.05 mm → A4
|
||||||
|
% pgMar top 2155 / bottom 1985 twips = 38.01 / 35.00 mm
|
||||||
|
% left 1588 / right 1474 twips = 28.01 / 26.00 mm
|
||||||
|
%
|
||||||
|
% ------------------------------------------------------------------
|
||||||
|
% ⚠️⚠️ 本模板的版心【不是】docx 的版心,这是刻意的。
|
||||||
|
%
|
||||||
|
% 原表 tblW = 9613 twips = 169.54 mm = 480.65 bp,
|
||||||
|
% 而 docx 版心宽只有 210 − 28 − 26 = 156 mm。
|
||||||
|
% 表比版心宽 13.54 mm,靠 tblInd = −546 twips(−9.63 mm)向左顶出去。
|
||||||
|
%
|
||||||
|
% 坐标(Word 导出 PDF):
|
||||||
|
% 表格左边框 x = 46.70 bp,右边框 x = 527.35 bp(宽 480.65 ✓)
|
||||||
|
% 标题文字中心 x = 300.41 bp ← 居中于 docx 版心,不是居中于表格
|
||||||
|
%
|
||||||
|
% ⇒ 若把 geometry 设成 docx 版心(left 28 mm),表格必然超出版心
|
||||||
|
% 13.54 mm,报一条 Overfull \hbox,且改内容时位置会漂。
|
||||||
|
%
|
||||||
|
% ⇒ 本包把 geometry 的版心【直接设成表格宽度】:
|
||||||
|
% left = 16.47 mm (= 表格左边框)
|
||||||
|
% totalwidth = 169.54 mm (= 表格外宽)
|
||||||
|
% 表格正好填满版心,零 Overfull,位置与原件逐点相同。
|
||||||
|
%
|
||||||
|
% ⇒ 代价:标题若用 \centering 会落在 287.03 bp,原件在 300.41 bp,
|
||||||
|
% 偏左 13.4 bp。故标题另给偏移补回 docx 版心的中心(见第 5 节)。
|
||||||
|
%======================================================================
|
||||||
|
\newlength{\sxofficialleft} % docx 版心左界,仅用于换算
|
||||||
|
\setlength{\sxofficialleft}{28.01mm}
|
||||||
|
\newlength{\sxtblleft}
|
||||||
|
\setlength{\sxtblleft}{16.47mm}
|
||||||
|
\newlength{\sxtblw} % 表格外宽 = 版心宽
|
||||||
|
\setlength{\sxtblw}{169.54mm}
|
||||||
|
|
||||||
|
\geometry{
|
||||||
|
paperwidth = 210mm,
|
||||||
|
paperheight = 297mm,
|
||||||
|
left = 16.47mm, % = 表格左边框
|
||||||
|
totalwidth = 169.54mm, % = 表格外宽
|
||||||
|
% ⚠️ 坐标差:本包所有 y 都恒比原件小 0.14 bp(表顶线、备注、
|
||||||
|
% 页码全部同步偏移,是 top 与 PDF 线宽的取整差,不是各行的问题)。
|
||||||
|
% 从 top 里补掉,一次消除。
|
||||||
|
top = \dimexpr38.01mm+0.14bp\relax,
|
||||||
|
bottom = 35.00mm, % = docx pgMar bottom 1985 twips
|
||||||
|
headheight = 0pt,
|
||||||
|
headsep = 0pt,
|
||||||
|
footskip = 24.41bp,
|
||||||
|
}
|
||||||
|
\setlength{\parindent}{0pt}
|
||||||
|
\setlength{\parskip}{0pt}
|
||||||
|
|
||||||
|
%======================================================================
|
||||||
|
% 2. 字体与字号
|
||||||
|
%
|
||||||
|
% 字号(w:sz 半磅值 ÷ 2):
|
||||||
|
% 大标题 44 → 22 pt / 表内正文 21 → 10.5 pt
|
||||||
|
% 签字日期 24 → 12 pt / 备注 21 → 10.5 pt / 页码 28 → 14 pt
|
||||||
|
%
|
||||||
|
% ⚠️⚠️⚠️ ctex 默认 \linespread ≈ 1.3,会把 \fontsize{10.5}{13.65}
|
||||||
|
% 的 13.65 pt 行距再放大 30% 变成 17.7 pt。本模板所有行距都来自
|
||||||
|
% docx 精确值,故每次设字号前必须先把 \linespread 归 1。
|
||||||
|
%
|
||||||
|
% ⚠️ 原标题用「方正小标宋简体」,商业字体,本库不分发(见根 README
|
||||||
|
% 的字体承诺)。按 课程执行大纲/ 的既定做法换成 OUC Serif 真粗体
|
||||||
|
% —— 小标宋本就是宋体的标题变体,真粗体比伪粗更接近,笔画不糊。
|
||||||
|
%======================================================================
|
||||||
|
\input{../fonts.tex}
|
||||||
|
|
||||||
|
\newcommand{\sxfonttitle}{%
|
||||||
|
\linespread{1}\relax\fontsize{22}{25}\selectfont}
|
||||||
|
\newcommand{\sxfontbody}{%
|
||||||
|
\linespread{1}\relax\fontsize{10.5}{13.65}\selectfont}
|
||||||
|
\newcommand{\sxfontsign}{%
|
||||||
|
\linespread{1}\relax\fontsize{12}{15.6}\selectfont}
|
||||||
|
\newcommand{\sxfontfoot}{%
|
||||||
|
\linespread{1}\relax\fontsize{14}{16.8}\selectfont}
|
||||||
|
|
||||||
|
%======================================================================
|
||||||
|
% 3. 表格的几何量
|
||||||
|
%
|
||||||
|
% 边框 tblBorders sz=4 → 0.5 pt(w:sz 是 1/8 pt,4/8)
|
||||||
|
% 内边距 tblCellMar left/right = 108 twips,top/bottom = 0
|
||||||
|
%
|
||||||
|
% 行高:trHeight 是 5091 / 1140 / 634 twips,hRule="atLeast",
|
||||||
|
% 但 atLeast 是「最小」,实际高度由内容撑开。故用取值:
|
||||||
|
% 四条横线中线 y = 172.99 / 457.49 / 516.34 / 573.64
|
||||||
|
% ⇒ 三段高 284.50 / 58.85 / 57.30(线中心距),
|
||||||
|
% 扣掉各一端的半线宽(0.249)得内容高 284.00 / 58.35 / 56.80。
|
||||||
|
% ⚠️ 不用 trHeight 的 254.55 / 57 / 31.7:R0 被 19 段撑到 284,
|
||||||
|
% R2 被 4 段撑到 56.8,照 trHeight 会让整表矮 40 bp。
|
||||||
|
%======================================================================
|
||||||
|
\newlength{\sxrule}
|
||||||
|
\setlength{\sxrule}{0.5pt} % = tblBorders sz 4/8
|
||||||
|
\newlength{\sxpad}
|
||||||
|
\setlength{\sxpad}{4.93bp} % 校到内容左界 52.08(实际52.11)
|
||||||
|
|
||||||
|
\newlength{\sxboxw} % 单元格内容盒宽(不含边框)
|
||||||
|
\setlength{\sxboxw}{\dimexpr\sxtblw-2\sxrule\relax}
|
||||||
|
|
||||||
|
% ⚠️⚠️ 段落折行的可用宽度 ≠ 盒宽。
|
||||||
|
% 折行可用宽 = \sxboxw − \sxpad − \sxbodypad。
|
||||||
|
% 原件内容左界 52.08、右界 521.89 ⇒ 可用宽 469.81 bp。
|
||||||
|
% ⚠️ 这 1.7 bp 是「折不折行」的临界。本表那句「项目负责人是科研经费
|
||||||
|
% 使用的直接责任人……」共 47 字,在 471.5 bp 里能挤成一行,
|
||||||
|
% 在 469.81 bp 里必须折行 —— 原件是两行。差一行 = 13.56 bp,
|
||||||
|
% R0 下半全部内容上移 16.5 bp,肉眼一看就错。
|
||||||
|
\newlength{\sxbodypad}
|
||||||
|
\setlength{\sxbodypad}{6.65bp} % = 481.388 − 4.948 − 469.81
|
||||||
|
|
||||||
|
\newlength{\sxrowa}
|
||||||
|
\setlength{\sxrowa}{284.00bp}
|
||||||
|
\newlength{\sxrowb}
|
||||||
|
\setlength{\sxrowb}{58.35bp}
|
||||||
|
\newlength{\sxrowc}
|
||||||
|
\setlength{\sxrowc}{56.80bp}
|
||||||
|
|
||||||
|
%======================================================================
|
||||||
|
% 4. 行定位体系(全文件的核心)
|
||||||
|
%
|
||||||
|
% ⚠️⚠️⚠️ 本表的行距**不能**用 \baselineskip 控制。改之前先读这段。
|
||||||
|
%
|
||||||
|
% 【坑一】\baselineskip 只在**同一段落内部**管行距。
|
||||||
|
% 本表行距逐行不同(15.24 / 15.48 / 14.04 / 13.56 / 13.68),
|
||||||
|
% 因为 10.5 pt 与 12 pt 的字混排,Word 按「下一行字号 × 1.3」算。
|
||||||
|
% 最初每行 \par 之后单独给 \baselineskip,**完全无效**:
|
||||||
|
% 所有行距被压成 13.51,12 pt 的签名行没变高,整表矮 2.25 bp。
|
||||||
|
% 原因:每行 \par 自成一段后,段间基线距离 = 上段末行深度 +
|
||||||
|
% \parskip + 本段首行字高,\baselineskip 根本没被读到。
|
||||||
|
%
|
||||||
|
% 【正解】不依赖 \baselineskip,逐行显式插胶:
|
||||||
|
%
|
||||||
|
% 基线距 = 上盒深度 + \kern + 本盒高度
|
||||||
|
% ⇒ \kern = 目标距 − 上盒深度 − 本盒高度
|
||||||
|
%
|
||||||
|
% 与字体度量彻底解耦:换字体、换字号、描述写长写短,行距不变。
|
||||||
|
%
|
||||||
|
% 【坑二】块首行必须用 \kern,不能用 \vskip。
|
||||||
|
% TeX 会【丢弃 \vbox 开头的胶】,用 \vskip 给的顶距静默消失
|
||||||
|
% (实际「事项描述:」给 10.53 只落到 5.38,等于只剩字高)。
|
||||||
|
% \kern 不受这条约束,且照样计入盒高。
|
||||||
|
%
|
||||||
|
% 【坑三】必须允许负的 \kern。
|
||||||
|
% 相邻行的目标距可能小于「上盒深度 + 本盒高度」(如年月日行
|
||||||
|
% 12 pt 字目标 14.04,而 2.99 + 12.06 = 15.05),差值是 −1.01。
|
||||||
|
% 最初加了 `\ifdim>0` 守卫,负值被吞 → 该行退回自然距 15.05,
|
||||||
|
% 整块错位 10 bp。负 \kern 在 TeX 里完全合法,不该挡。
|
||||||
|
%
|
||||||
|
% 【坑四】多行段落的 \ht 参照的是**末行**基线,不是首行。
|
||||||
|
% \vbox 的 \ht = 首行高度 + (n−1)·行距,它的参考点是末行基线。
|
||||||
|
% 所以「上一行基线 → 本段首行基线」的距离不是 pd + kern + ht,
|
||||||
|
% 而是 pd + kern + ht − (n−1)·行距。漏掉这一项,
|
||||||
|
% 多行段自己会被推下一整行,其后所有行跟着错(实际0.48 而非 14.04)。
|
||||||
|
% ⇒ 用 \prevgraf 取段内行数,把 (n−1)·行距加回 kern。
|
||||||
|
% ⚠️ \dp 不用改:\vbox 的 \dp 就是末行的真实深度。
|
||||||
|
%
|
||||||
|
% 【坑五】\offinterlineskip 会继承进段落内部。
|
||||||
|
% 它把 \lineskiplimit 设成极小值,段内多行改走 \lineskip(=0),
|
||||||
|
% \baselineskip 又被架空(行距只剩 10.81 而非 13.56)。
|
||||||
|
% ⇒ 段落内部必须显式恢复 \lineskiplimit / \lineskip。
|
||||||
|
%======================================================================
|
||||||
|
\newbox\sx@boxa
|
||||||
|
\newbox\sx@boxb
|
||||||
|
\newbox\sx@boxc
|
||||||
|
\newdimen\sx@pd % 上一行的真实末行深度
|
||||||
|
\newdimen\sx@tmp
|
||||||
|
\newdimen\sx@boxd
|
||||||
|
\newdimen\sx@pgd % 段内中间各行推进总量(\prevgraf 必须先存出来)
|
||||||
|
\newif\ifsx@first % 是否块内第一行
|
||||||
|
|
||||||
|
\newcommand{\sx@blstart}{%
|
||||||
|
\offinterlineskip
|
||||||
|
\topskip=\z@
|
||||||
|
\sx@pd=\z@
|
||||||
|
\sx@firsttrue}
|
||||||
|
|
||||||
|
% \sx@bl[底深]{与上一行基线的距离}{行内容}
|
||||||
|
%
|
||||||
|
% #1(可选)= 本行盒的最小深度。块末行用它留出「基线 → 格底」的空白
|
||||||
|
% —— TeX 丢弃 \vbox 末尾的胶,不能用 \kern 补。
|
||||||
|
% #2 = 与上一行基线的距离;块第一行则是「块顶 → 首行基线」。
|
||||||
|
% #3 = 行内容(水平模式),参照点是单元格内容左界。
|
||||||
|
% #2 = 与上一行基线的距离;块第一行则是「块顶 → 首行基线」,
|
||||||
|
% 给 0 表示「首行自然贴块顶、只留字高」。
|
||||||
|
% 后者用于 R0 下半块:那块是贴格底的,全部位置由
|
||||||
|
% 「末行深度 + 逐行行距」反推出来,再给绝对顶距就重复
|
||||||
|
% 定位了(实际多给 208.89,整块下移 66.90)。
|
||||||
|
\newcommand{\sx@bl}[3][\z@]{%
|
||||||
|
\setbox\sx@boxc=\hbox to \sxboxw{\hskip\sxpad #3\hss}%
|
||||||
|
\ifsx@first
|
||||||
|
\sx@firstfalse
|
||||||
|
\kern\dimexpr\ifdim#2>\z@#2-\fi\ht\sx@boxc\relax
|
||||||
|
\else
|
||||||
|
\kern\dimexpr#2-\sx@pd-\ht\sx@boxc\relax
|
||||||
|
\fi
|
||||||
|
\ifdim\dp\sx@boxc<#1 \dp\sx@boxc=#1\relax \fi
|
||||||
|
\sx@pd=\dp\sx@boxc
|
||||||
|
\box\sx@boxc}
|
||||||
|
|
||||||
|
% \sx@blp[底深]{与上一行基线的距离}{段内行距}{段落内容}
|
||||||
|
%
|
||||||
|
% 与 \sx@bl 同一套定位规则,但内容是可折行的段落(用于那两句长话)。
|
||||||
|
%
|
||||||
|
% ⚠️⚠️ \vbox 的 \ht 参考点是**末行基线**,不是首行(坑四)。
|
||||||
|
% 故 kern 里要把 (n−1)·行距 加回去,否则整个多行段被推下一整行。
|
||||||
|
% \dp 不用改 —— \vbox 的 \dp 就是末行的真实深度。
|
||||||
|
\newcommand{\sx@blp}[4][\z@]{%
|
||||||
|
\setbox\sx@boxc=\vbox{%
|
||||||
|
\hsize=\sxboxw
|
||||||
|
\leftskip=\sxpad
|
||||||
|
\rightskip=\sxbodypad
|
||||||
|
\parindent=\z@
|
||||||
|
\parskip=\z@
|
||||||
|
\lineskiplimit=\z@ % ← 抵消外层 \offinterlineskip(坑五)
|
||||||
|
\lineskip=\z@
|
||||||
|
\baselineskip=#3\relax
|
||||||
|
\noindent #4\par
|
||||||
|
% ⚠️⚠️ \prevgraf 有两道坎:
|
||||||
|
% ① 必须在 vbox **内部**取 —— 它是「当前正在排的段落行数」,
|
||||||
|
% vbox 一关闭就恢复成外层值(实际把 2 读成 0)。
|
||||||
|
% ② 必须在 \par **之后**取 —— \prevgraf 是在段落断行那一步
|
||||||
|
% 才被写入的,\par 之前读到的还是旧值(实际仍为 0)。
|
||||||
|
\global\sx@pgd=\dimexpr\numexpr\prevgraf-1\relax\dimexpr#3\relax\relax}%
|
||||||
|
% 中间各行的推进总量
|
||||||
|
\sx@tmp=\sx@pgd
|
||||||
|
\ifsx@first
|
||||||
|
\sx@firstfalse
|
||||||
|
% 块首行的 #2 直接是「块顶 → 首行基线」,不需要再扣多行推进量:
|
||||||
|
% 多行段的 \ht 已经包含了「首行基线 → 末行基线」的全部推进,
|
||||||
|
% 而首行基线本身与段有几行无关。加回 pgd 会把首行推下一整行
|
||||||
|
% (实际描述两行偏 +10.39)。
|
||||||
|
\kern\dimexpr\ifdim#2>\z@#2-\fi\ht\sx@boxc\relax
|
||||||
|
\else
|
||||||
|
\kern\dimexpr #2+\sx@tmp-\sx@pd-\ht\sx@boxc\relax
|
||||||
|
\fi
|
||||||
|
\ifdim\dp\sx@boxc<#1 \dp\sx@boxc=#1\relax \fi
|
||||||
|
\sx@pd=\dp\sx@boxc
|
||||||
|
\box\sx@boxc}
|
||||||
|
|
||||||
|
% 签名下划线:长 #1、线宽 0.4 pt(Word underline,比表格线细)
|
||||||
|
\newcommand{\sx@rule}[1]{%
|
||||||
|
\rule[-0.55mm]{#1}{0.4pt}}
|
||||||
|
|
||||||
|
%----------------------------------------------------------------------
|
||||||
|
% \sx@put{偏移}{内容} —— 在「内容左界 + 偏移」处放置内容
|
||||||
|
%
|
||||||
|
% 原件的签名行、年月日全靠敲空格凑位置(R0 签名前是 30 个 14 pt 空格),
|
||||||
|
% 换台机器字号一改就散架。这里按实际x 坐标绝对定位,不随字体漂移。
|
||||||
|
%
|
||||||
|
% ⚠️⚠️ 用 \rlap(= \hbox to 0pt{...\hss})而非 \makebox[0pt][l]:
|
||||||
|
% 两者都是零宽盒左对齐,但 \makebox 内容超宽会报 Overfull \hbox
|
||||||
|
% (签名下划线 84 bp 必然超),\rlap 末尾有 \hss 吸收,静默通过。
|
||||||
|
% 因零宽,一行串多个 \sx@put 时共用同一原点,偏移各自独立。
|
||||||
|
%
|
||||||
|
% 偏移 = 「Word 导出 PDF 实际x」− 52.08(内容左界)
|
||||||
|
%----------------------------------------------------------------------
|
||||||
|
\newcommand{\sx@put}[2]{%
|
||||||
|
\rlap{\hspace*{#1}#2}}
|
||||||
|
|
||||||
|
%----------------------------------------------------------------------
|
||||||
|
% 单元格装配
|
||||||
|
%
|
||||||
|
% \sx@cellbl{高度}{块内容} 内容贴顶,不足高度补在底部(= trHeight atLeast)
|
||||||
|
\newcommand{\sx@cellbl}[2]{%
|
||||||
|
\setbox\sx@boxa=\vbox{\sx@blstart #2}%
|
||||||
|
\ifdim\dimexpr\ht\sx@boxa+\dp\sx@boxa\relax<#1
|
||||||
|
\vbox to #1{\box\sx@boxa\vfil}%
|
||||||
|
\else
|
||||||
|
\box\sx@boxa
|
||||||
|
\fi}
|
||||||
|
|
||||||
|
% \sx@cellvf{高度}{上半}{下半} 中间 \vfil 撑开 ⇒ 下半贴格底
|
||||||
|
%
|
||||||
|
% ⚠️⚠️ 非直觉之处:
|
||||||
|
% 最初写「先 \setbox 量内容,再 \vbox to <高>{\box\sx@box\vfil}」,
|
||||||
|
% 结果 R0 的「兹证明」跑到描述正下方(y=261.95,原件 382.13),
|
||||||
|
% 整块偏高 120 bp。
|
||||||
|
% 原因:\vbox{...\vfil} **被测量的那一刻** \vfil 就塌成 0
|
||||||
|
% (vbox 无目标高度,末端胶只能为 0)。再套壳时剩余胶只能加在
|
||||||
|
% 整体之后 → 变成「内容贴顶、空白在底」,与想要的正好相反。
|
||||||
|
% 正解:让 \vfil 与上下两半【同处一个有目标高度的 \vbox 里】。
|
||||||
|
\newcommand{\sx@cellvf}[3]{%
|
||||||
|
\setbox\sx@boxa=\vbox{%
|
||||||
|
\hsize=\sxboxw
|
||||||
|
\leftskip=\sxpad
|
||||||
|
\rightskip=\sxpad
|
||||||
|
\parindent=\z@
|
||||||
|
\parskip=\z@
|
||||||
|
#2}%
|
||||||
|
\setbox\sx@boxb=\vbox{\sx@blstart #3}%
|
||||||
|
% ⚠️⚠️ 末尾那个 \vskip\z@ 不能省。
|
||||||
|
% \vbox to N 设定的是**高度**,深度另计:若最后一项是 \box\sx@boxb
|
||||||
|
% 且它自带深度(本表末行深 3.11),则 vbox 的 \dp = 3.11,
|
||||||
|
% 总高变成 N + 3.11,整行高三点一一,四条横线全部下移
|
||||||
|
% (实际R0 = 287.11 而非 284.00)。
|
||||||
|
% 补一条零高胶让末项变成胶(胶无深度),\dp 归零,
|
||||||
|
% 总高才正好等于 N。
|
||||||
|
\ifdim\dimexpr\ht\sx@boxa+\ht\sx@boxb+\dp\sx@boxb\relax<#1
|
||||||
|
\vbox to #1{\box\sx@boxa\vfil\box\sx@boxb\vskip\z@}%
|
||||||
|
\else
|
||||||
|
\vbox{\box\sx@boxa\vfil\box\sx@boxb}%
|
||||||
|
\fi}
|
||||||
|
|
||||||
|
%======================================================================
|
||||||
|
% 5. 标题
|
||||||
|
%
|
||||||
|
% :22 pt 小标宋(→ 宋体真粗体),居中,标题段行距 25 pt。
|
||||||
|
% 文字中心 x = 300.41 bp,基线 y = 147.65。
|
||||||
|
%
|
||||||
|
% ⚠️⚠️ 为什么不能直接 \centering:
|
||||||
|
% 本包版心 16.47~186.01 mm,中心 287.03 bp;
|
||||||
|
% 标题要居中的是 docx 版心 28.01~184.01 mm,中心 300.41 bp。
|
||||||
|
% 两者差 13.4 bp,直接居中会左偏 4.7 mm。
|
||||||
|
% 正解:先 \hspace* 推到 docx 版心左界,再用一个正好等于
|
||||||
|
% docx 版心宽的 \makebox 居中。右边不会溢出:
|
||||||
|
% 11.54 + 156 = 167.54 mm < 169.54 mm。
|
||||||
|
%======================================================================
|
||||||
|
\newlength{\sxtitleindent}
|
||||||
|
\setlength{\sxtitleindent}{\dimexpr\sxofficialleft-\sxtblleft\relax}
|
||||||
|
\newlength{\sxtitlewidth}
|
||||||
|
\setlength{\sxtitlewidth}{156mm}
|
||||||
|
% 微调:标题中心原偏右 0.60 bp(字形宽度差所致)
|
||||||
|
\newlength{\sxtitlefix}
|
||||||
|
\setlength{\sxtitlefix}{-0.60bp}
|
||||||
|
|
||||||
|
% 标题前/后竖直距离(由 PDF 实际反推,见 README「实际记录」)
|
||||||
|
% ⚠️ 这两个值必须成对调:\sxprespace 在标题前、\sxpostspace 在标题后,
|
||||||
|
% 单独改一个会把标题与表格的间距一起改掉。标定见 README。
|
||||||
|
\newlength{\sxprespace}
|
||||||
|
\setlength{\sxprespace}{10.07bp}
|
||||||
|
\newlength{\sxpostspace}
|
||||||
|
\setlength{\sxpostspace}{21.09bp}
|
||||||
|
|
||||||
|
\newcommand{\sxtitle}[1]{%
|
||||||
|
\par\begingroup
|
||||||
|
\vspace*{\sxprespace}%
|
||||||
|
\noindent
|
||||||
|
\hspace*{\dimexpr\sxtitleindent+\sxtitlefix\relax}%
|
||||||
|
\makebox[\sxtitlewidth][c]{%
|
||||||
|
\sxfonttitle\songti\bfseries #1}%
|
||||||
|
\par\vspace*{\sxpostspace}%
|
||||||
|
\endgroup}
|
||||||
|
|
||||||
|
%======================================================================
|
||||||
|
% 6. 表格主体
|
||||||
|
%
|
||||||
|
% 原表是**单列 3 行**(tblGrid 只有一个 gridCol),即三行整宽方框上下叠。
|
||||||
|
% 没有合并单元格、没有多列,不需要 tabularray —— 手工 \vbox 叠三块
|
||||||
|
% 反而更可控:行高精确、内线不重复、内容可用 \vfil 撑。
|
||||||
|
% 外框 \framebox,两条内线 \hrule(各占 \sxrule)。
|
||||||
|
%======================================================================
|
||||||
|
\newcommand{\sxtable}{%
|
||||||
|
\par\noindent
|
||||||
|
\begingroup
|
||||||
|
\setlength{\fboxsep}{0pt}%
|
||||||
|
\setlength{\fboxrule}{\sxrule}%
|
||||||
|
\framebox[\sxtblw]{%
|
||||||
|
\vbox{%
|
||||||
|
\hsize=\sxboxw
|
||||||
|
\sx@rowa@box
|
||||||
|
\hrule height \sxrule
|
||||||
|
\sx@cellbl{\sxrowb}{\sx@rowB}%
|
||||||
|
\hrule height \sxrule
|
||||||
|
\sx@cellbl{\sxrowc}{\sx@rowC}%
|
||||||
|
}%
|
||||||
|
}%
|
||||||
|
\par\endgroup}
|
||||||
|
|
||||||
|
%======================================================================
|
||||||
|
% 7. 三行内容的装配
|
||||||
|
%
|
||||||
|
% 三行里的固定话术(「兹证明该事项真实有效……」等)是学校规定原文,
|
||||||
|
% **不要在 .tex 里改**;它们在这里装配好,.tex 只提供要人填的几项:
|
||||||
|
% \sxdesc 事项描述正文(必填)
|
||||||
|
% \sxdateA 项目负责人签字处日期(留空则印「 年 月 日」)
|
||||||
|
% \sxdateB 单位负责人签字处日期
|
||||||
|
% \sxdateC 科技管理部门签字处日期
|
||||||
|
%
|
||||||
|
% ⚠️ 为什么不让 .tex 改整行:原件里这些行全靠敲空格对齐,一旦让
|
||||||
|
% 用户自己写,每人写出来都不一样,模板就失去意义。这里按实际
|
||||||
|
% x 坐标把固定部分钉死,.tex 只需填描述与日期。
|
||||||
|
%
|
||||||
|
% ------------------------------------------------------------------
|
||||||
|
% R0 纵向结构(全表最麻烦的一处)
|
||||||
|
%
|
||||||
|
% R0 共 19 段:1「事项描述:」/ 2~3 空 / 4 描述正文 /
|
||||||
|
% 5~12 八个空段(给手写留白)/ 13 空 / 14「兹证明…」/ 15 签名 /
|
||||||
|
% 16 年月日 / 17「项目负责人是…」/ 18「非科研经费…」
|
||||||
|
%
|
||||||
|
% 那 8 个空段是**手写留白**。本模板把描述改成排字(\sxdesc),
|
||||||
|
% 它们就成了死间距:描述写短了下面一大片空白,写长了把签名区顶到下一行。
|
||||||
|
% ⇒ 删掉,改用「上下两半 + 中间 \vfil」:
|
||||||
|
% 描述短 → 空白落在两半之间,签名区不动
|
||||||
|
% 描述长 → 空白被吃掉,签名区仍然不动
|
||||||
|
% 这是本模板比原件更稳的地方。
|
||||||
|
% ⚠️ 但 \vfil 不能无限压:描述特别长时签名区会挤出行外。
|
||||||
|
% 这是内容超量的正常表现(Word 里也一样),不是 bug。
|
||||||
|
%
|
||||||
|
% ------------------------------------------------------------------
|
||||||
|
% 实际基线(PDF 绝对 y;Δ 为与上一行的基线距)
|
||||||
|
%
|
||||||
|
% R0(顶线 172.99,内容顶 173.24)
|
||||||
|
% 事项描述 183.77 (10.53)
|
||||||
|
% 描述首行 227.81 (54.57) ← 段内行距 13.68
|
||||||
|
% 兹证明 382.13 (208.89)
|
||||||
|
% 项目负责人 397.37 (Δ15.24)
|
||||||
|
% 年月日 412.85 (Δ15.48)
|
||||||
|
% 项目负责人是 426.89 (Δ14.04) ← 段内行距 13.56
|
||||||
|
% 责任。 440.45 (Δ13.56)
|
||||||
|
% 非科研经费 454.13 (Δ13.68) 末行深 3.11
|
||||||
|
%
|
||||||
|
% R1(顶线 457.49,内容顶 457.74)
|
||||||
|
% 本人证明 468.29 (10.55)
|
||||||
|
% 单位负责人 483.41 (Δ15.12)
|
||||||
|
% 年月日 498.89 (Δ15.48)
|
||||||
|
% 学院 512.93 (Δ14.04) 末行深 3.16
|
||||||
|
%
|
||||||
|
% R2(顶线 516.34,内容顶 516.59)
|
||||||
|
% 科技管理 527.09 (10.50)
|
||||||
|
% 负责人签字 554.33 (Δ27.24) ← 原件一个空段,留写字空间
|
||||||
|
% 年月日 569.93 (Δ15.60) 末行深 3.46
|
||||||
|
%======================================================================
|
||||||
|
|
||||||
|
%----------------------------------------------------------------------
|
||||||
|
% 日期行
|
||||||
|
%
|
||||||
|
% 原件「 年 月 日」,三字间隔**各处不同**:
|
||||||
|
% R0 370.08 / 412.08 / 454.08 步长 42 / 42
|
||||||
|
% R1 400.08 / 442.08 / 484.08 步长 42 / 42
|
||||||
|
% R2 424.08 / 454.08 / 478.08 步长 30 / 24 ← 这格右边距紧
|
||||||
|
%
|
||||||
|
% ⚠️⚠️ 两个坑:
|
||||||
|
% ① 原来用 \makebox[12pt][l] + \hspace{步长−12pt} 拼步长,
|
||||||
|
% 12 pt(12.045 bp)与 42 pt(42.157 bp)混减,每字累积
|
||||||
|
% 0.16 bp,第三个字偏出 1.6 bp。
|
||||||
|
% ② 原来年份用 \makebox[12pt][l]{#1},即使 #1 为空**仍占 12 pt**,
|
||||||
|
% 把「年」推出 30 pt,整组右移 28.67 bp。
|
||||||
|
% ⇒ 三字全用 \sx@put 绝对定位,不积累、不占位;年份用右对齐
|
||||||
|
% \makebox 挂在「年」左边,空着就整块不出。
|
||||||
|
%
|
||||||
|
% \sx@dateline{年份}{年 x}{月 x}{日 x}
|
||||||
|
%----------------------------------------------------------------------
|
||||||
|
\newcommand{\sx@ifempty}[1]{\if\relax\detokenize{#1}\relax}
|
||||||
|
|
||||||
|
\newcommand{\sx@dateline}[4]{%
|
||||||
|
\sx@ifempty{#1}\else
|
||||||
|
\sx@put{\dimexpr#2-26bp\relax}{\makebox[24bp][r]{#1}}%
|
||||||
|
\fi
|
||||||
|
\sx@put{#2}{年}%
|
||||||
|
\sx@put{#3}{月}%
|
||||||
|
\sx@put{#4}{日}}
|
||||||
|
|
||||||
|
%----------------------------------------------------------------------
|
||||||
|
% R0 —— 事项描述 + 项目负责人签字
|
||||||
|
%----------------------------------------------------------------------
|
||||||
|
\newcommand{\sx@rowa@box}{%
|
||||||
|
\sx@cellvf{\sxrowa}%
|
||||||
|
{\sxfontbody\songti
|
||||||
|
\sx@blstart
|
||||||
|
\sx@bl{10.53bp}{事项描述:}%
|
||||||
|
\sx@blp{44.04bp}{13.68bp}{\sxdesc}}%
|
||||||
|
{\sxfontbody\songti
|
||||||
|
\sx@blstart
|
||||||
|
\sx@bl{0bp}{\sx@put{31.56bp}{兹证明该事项真实有效,本人愿意为此承担责任。}}%
|
||||||
|
\sx@bl{15.24bp}{%
|
||||||
|
\sx@put{210.00bp}{\sxfontsign\songti 项目负责人(签名):}%
|
||||||
|
\sx@put{323.97bp}{\sx@rule{84bp}}}%
|
||||||
|
\sx@bl{15.48bp}{%
|
||||||
|
\sx@put{318.00bp}{\sxfontsign\songti}%
|
||||||
|
\sx@dateline{\sxdateA}{318.00bp}{360.00bp}{402.00bp}}%
|
||||||
|
\sx@blp{14.04bp}{13.56bp}{%
|
||||||
|
\hspace*{21.00bp}项目负责人是科研经费使用的直接责任人,对经费使用的真实性、合理性及有效性承担经济与法律责任。}%
|
||||||
|
\sx@bl[3.11bp]{13.68bp}{\sx@put{21.00bp}{非科研经费亦适用本表格。}}}}
|
||||||
|
|
||||||
|
%----------------------------------------------------------------------
|
||||||
|
% R1 —— 单位负责人签字 + 单位公章
|
||||||
|
% 实际下划线 x 187.05~253.05(长 66 bp);「单位公章:」后不画线。
|
||||||
|
%----------------------------------------------------------------------
|
||||||
|
\newcommand{\sx@rowB}{%
|
||||||
|
\sxfontbody\songti
|
||||||
|
\sx@bl{10.55bp}{本人证明以上事项属实,并愿意承担相应责任。}%
|
||||||
|
\sx@bl{15.12bp}{%
|
||||||
|
\sx@put{21.00bp}{\sxfontsign\songti 单位负责人(签名):}%
|
||||||
|
\sx@put{134.97bp}{\sx@rule{66bp}}%
|
||||||
|
\sx@put{309.00bp}{\sxfontsign\songti 单位公章:}}%
|
||||||
|
\sx@bl{15.48bp}{%
|
||||||
|
\sx@put{348.00bp}{\sxfontsign\songti}%
|
||||||
|
\sx@dateline{\sxdateB}{348.00bp}{390.00bp}{432.00bp}}%
|
||||||
|
\sx@bl[3.16bp]{14.04bp}{\sx@put{15.72bp}{学院对本单位科研经费使用承担监督和管理责任。}}}
|
||||||
|
|
||||||
|
%----------------------------------------------------------------------
|
||||||
|
% R2 —— 科技管理部门审批意见
|
||||||
|
% 「科技管理」→「负责人签字」差 27.24 bp,比正常行距 15.6 多 11.64,
|
||||||
|
% 对应原件这一个空段(审批意见要留写字空间)。
|
||||||
|
%----------------------------------------------------------------------
|
||||||
|
\newcommand{\sx@rowC}{%
|
||||||
|
\sxfontbody\songti
|
||||||
|
\sx@bl{10.50bp}{科技管理部门审批意见:}%
|
||||||
|
\sx@bl{27.24bp}{%
|
||||||
|
\sx@put{26.28bp}{\sxfontsign\songti 负责人签字:}%
|
||||||
|
\sx@put{314.28bp}{\sxfontsign\songti 单位公章:}}%
|
||||||
|
\sx@bl[3.46bp]{15.60bp}{%
|
||||||
|
\sx@put{372.00bp}{\sxfontsign\songti}%
|
||||||
|
\sx@dateline{\sxdateC}{372.00bp}{402.00bp}{426.00bp}}}
|
||||||
|
|
||||||
|
%======================================================================
|
||||||
|
% 8. 备注区
|
||||||
|
%
|
||||||
|
% 三条备注是「annotation text」样式 + 自动编号(decimal "%1."),
|
||||||
|
% 行距 15 pt。实际基线 585.89 / 600.89 / 615.89 / 630.89(间距 15)。
|
||||||
|
% 实际x: 「备注:」79.44,编号「1.」95.16~103.05,正文 113.16
|
||||||
|
% ⇒ 减内容左界 52.08:27.36 / 50.97 / 61.08
|
||||||
|
%
|
||||||
|
% ⚠️ 四条同样不能用 \baselineskip —— 各自独立成段(同第 4 节坑一)。
|
||||||
|
%
|
||||||
|
% ⚠️ 第 3 条在里是**手打的**「 3. 」(没有 numPr),
|
||||||
|
% 比前两条多两个空格、位置差 0.36 bp。本模板统一排齐,
|
||||||
|
% 这是与原件唯一的有意差异(README「与原件差异」已列明)。
|
||||||
|
%======================================================================
|
||||||
|
\newlength{\sxnotebody}
|
||||||
|
\setlength{\sxnotebody}{61.08bp} % 正文左端
|
||||||
|
\newlength{\sxnotenum}
|
||||||
|
\setlength{\sxnotenum}{50.97bp} % 编号右端
|
||||||
|
\newlength{\sxnotelab}
|
||||||
|
\setlength{\sxnotelab}{27.36bp} % 「备注:」左端
|
||||||
|
|
||||||
|
% #1 = 编号 #2 = 正文
|
||||||
|
%
|
||||||
|
% ⚠️ 偏移用「相对内容左界」的值,不要再减 \sxpad。
|
||||||
|
% \sx@bl 的行盒是 \hbox to \sxboxw{\hskip\sxpad 内容\hss},
|
||||||
|
% \rlap 的参照原点就在那 \hskip 之后 —— 也就是内容左界本身。
|
||||||
|
\newcommand{\sxnoteitem}[2]{%
|
||||||
|
\sx@bl{15bp}{%
|
||||||
|
\rlap{\hspace*{\sxnotenum}\makebox[0bp][r]{#1}}%
|
||||||
|
\rlap{\hspace*{\sxnotebody}#2}}}
|
||||||
|
|
||||||
|
%----------------------------------------------------------------------
|
||||||
|
% 备注区四条(引言 + 三条),原文照录 —— 学校规定文字,不要改
|
||||||
|
% ⚠️ 引言「备注:使用科研经费报销时……」是**连排的一句话**,
|
||||||
|
% 「备注:」不是悬挂标签,整行从 79.44 起排,故只需一个 \sx@put。
|
||||||
|
%----------------------------------------------------------------------
|
||||||
|
% 第一行的「块顶 → 首行基线」:实际585.89 − 表格底 573.89 = 12.00
|
||||||
|
\newcommand{\sxnotes}{%
|
||||||
|
\par\nointerlineskip
|
||||||
|
\vbox{%
|
||||||
|
\sxfontbody\songti
|
||||||
|
\sx@blstart
|
||||||
|
\sx@bl{12.00bp}{\sx@put{\sxnotelab}{备注:使用科研经费报销时,本表需要相关负责人签字审批的情形和要求如下:}}%
|
||||||
|
\sxnoteitem{1.}{符合《办法》第十八条第八款、第二十三条情形的,需项目负责人、单位负责人签字;}%
|
||||||
|
\sxnoteitem{2.}{符合《办法》第二十二条的情形,需项目负责人、单位负责人和科技部门负责人签字;}%
|
||||||
|
\sxnoteitem{3.}{除以上两种情形外,其他均由项目负责人签字。}}%
|
||||||
|
\par}
|
||||||
|
|
||||||
|
%======================================================================
|
||||||
|
% 9. 页脚
|
||||||
|
%
|
||||||
|
% 页脚:右对齐「— 1 —」,宋体 14 pt,右缩进 180 twips = 9 pt。
|
||||||
|
% 实际整串左端 463.56、右端 512.65。本包版心右界 527.02,
|
||||||
|
% 故整串需再左移 527.02 − 512.65 = 14.37 bp。
|
||||||
|
%
|
||||||
|
% 负 \hspace 放**开头** —— 完全没效果(实际偏右 24.94 bp)。
|
||||||
|
% 原因:fancyhdr 的 [R] 位把内容放进 \hbox to \textwidth 并前置
|
||||||
|
% \hfil,靠「内容块整体贴右」对齐。开头加负 \hspace 只把块起点
|
||||||
|
% 左移,块宽没变,右边界仍贴版心右界。
|
||||||
|
% 正解:把内容装进**零宽盒**,让它的右缘成为对齐基准,
|
||||||
|
% 再用末尾的 \hspace 把基准往里推。
|
||||||
|
%======================================================================
|
||||||
|
\newlength{\sxfootinset}
|
||||||
|
\setlength{\sxfootinset}{24.94bp}
|
||||||
|
|
||||||
|
\newcommand{\sxfootfont}{\sxfontfoot\songti}
|
||||||
|
|
||||||
|
\newcommand{\sxfootcontent}{%
|
||||||
|
\makebox[0pt][r]{\sxfootfont — \thepage\ —}%
|
||||||
|
\hspace*{\sxfootinset}}
|
||||||
|
|
||||||
|
\pagestyle{fancy}
|
||||||
|
\fancyhf{}
|
||||||
|
\renewcommand{\headrulewidth}{0pt}
|
||||||
|
\renewcommand{\footrulewidth}{0pt}
|
||||||
|
\fancyfoot[R]{\sxfootcontent}
|
||||||
|
\fancypagestyle{plain}{%
|
||||||
|
\fancyhf{}%
|
||||||
|
\renewcommand{\headrulewidth}{0pt}%
|
||||||
|
\renewcommand{\footrulewidth}{0pt}%
|
||||||
|
\fancyfoot[R]{\sxfootcontent}%
|
||||||
|
}
|
||||||
|
|
||||||
|
%======================================================================
|
||||||
|
% 10. 一句话入口
|
||||||
|
%
|
||||||
|
% \sxform —— 在 .tex 里只调这一个,整张表就出来了。
|
||||||
|
% 标题、表格、备注、页脚全在里面。
|
||||||
|
%======================================================================
|
||||||
|
\newcommand{\sxform}{%
|
||||||
|
\sxtitle{中国海洋大学特殊事项说明表}%
|
||||||
|
\sxtable
|
||||||
|
\sxnotes}
|
||||||
|
|
||||||
|
\AtBeginDocument{\sxfontbody\songti}
|
||||||
|
\endinput
|
||||||
Binary file not shown.
@@ -0,0 +1,40 @@
|
|||||||
|
%======================================================================
|
||||||
|
% 中国海洋大学 特殊事项说明表
|
||||||
|
%
|
||||||
|
% 编译: xelatex 特殊事项说明表.tex
|
||||||
|
%
|
||||||
|
% 版式来源:报销相关/中国海洋大学特殊事项说明表.docx
|
||||||
|
% 所有尺寸已在 ouccsx.sty 内注明换算过程;要改版式请改 sty。
|
||||||
|
%
|
||||||
|
% 填表时只改下面【第 1 节】三行。
|
||||||
|
%======================================================================
|
||||||
|
\documentclass[UTF8,fontset=none]{ctexart}
|
||||||
|
\usepackage{ouccsx}
|
||||||
|
|
||||||
|
%======================================================================
|
||||||
|
% 1. 填这里(只有四行)
|
||||||
|
%======================================================================
|
||||||
|
|
||||||
|
% 事项描述。写清楚:为什么、去哪、做什么、为什么必须这样。
|
||||||
|
% ⚠️ 可直接写多段,用 \\ 或空行分段都行;表格会自动让出空间。
|
||||||
|
% ⚠️ 下面填的是**虚构示例**(去昌邑观测站维护浮标、自驾),
|
||||||
|
% 仅演示一份填好的表长什么样,实际使用时整段替换。
|
||||||
|
\newcommand{\sxdesc}{%
|
||||||
|
因渤海湾生态环境监测浮标需要例行维护,前往昌邑近岸观测站更换传感器并回收监测数据。
|
||||||
|
该站位于滩涂养殖区,公共交通无法抵达,且需随车携带备件箱、采样冷藏箱与工具,
|
||||||
|
故采用自驾方式前往。}
|
||||||
|
|
||||||
|
% 三处方框里的日期。留空则印成「 年 月 日」等手写。
|
||||||
|
% 想打印具体日期就写 \sxdateA{2026},或 {2026}{10}{28} 用下面的完整版。
|
||||||
|
\newcommand{\sxdateA}{} % 项目负责人签字处
|
||||||
|
\newcommand{\sxdateB}{} % 单位负责人签字处
|
||||||
|
\newcommand{\sxdateC}{} % 科技管理部门签字处
|
||||||
|
|
||||||
|
%======================================================================
|
||||||
|
% 2. 正文(不用改)
|
||||||
|
%======================================================================
|
||||||
|
\begin{document}
|
||||||
|
|
||||||
|
\sxform
|
||||||
|
|
||||||
|
\end{document}
|
||||||
+124
-78
@@ -1,84 +1,130 @@
|
|||||||
# 中国海洋大学科技报告 LaTeX 模板
|
# 科技报告
|
||||||
|
|
||||||
一个基于 `ctexart` 的科技报告模板,可用于撰写科技报告、实验讲义、教程、说明文档等。
|
科技报告、实验讲义、教程、说明文档,A4 多页,含封面、摘要、目录、正文。
|
||||||
|
|
||||||
> 本目录原为独立仓库 `ouc-report-latex-template`,2026-10 起并入 `ouc_latex_template` 统一维护,旧仓库不再更新。
|
## 编译
|
||||||
|
|
||||||
## 特性
|
```bash
|
||||||
|
cd 科技报告
|
||||||
- **中英文字体一体化**:英文默认使用鸿蒙字体(HarmonyOS Sans),中文使用仓库公共字体包(宋体 / 宋体粗 / 楷体 / 仿宋 / 黑体),字体文件在仓库根 `../fonts/` 目录,编译时自动调用,**无须安装任何字体**;
|
xelatex report.tex
|
||||||
- **模块化文档类**:`report.cls` 按功能拆分为 `cls/` 下的多个模块(全局设定、字体、页面布局、标题、页眉页脚、信息框、代码块等),便于按需修改;
|
xelatex report.tex % 跑两遍,目录与交叉引用才正确
|
||||||
- **三种信息框**:`titledbox`(带标题)、`notebox`(提示)、`importantbox`(重要),基于 tcolorbox 实现;
|
|
||||||
- **代码排版**:基于 listings 预设了多种样式,支持行内命令 `shellbox` / `invertedshellbox` 展示 shell 命令及输出;
|
|
||||||
- **自动水印**:默认以「单位 + 部门」作为全页水印,可在 `input/setting.tex` 中调整文字、透明度与大小;
|
|
||||||
- **图表与引用**:tabularx 表格、图片插入、自动编号与交叉引用、目录 / 图目录 / 表目录;
|
|
||||||
- **图标支持**:通过 fontawesome 可直接使用 `\faHeart` 等图标命令(详见根目录 `fontawesome.pdf`)。
|
|
||||||
|
|
||||||
## 环境要求
|
|
||||||
|
|
||||||
- **TeX 发行版**:TeX Live 2022 及以上(必须使用 **XeLaTeX** 编译);
|
|
||||||
- 无需额外安装字体或其他依赖,使用 `scheme-full` 或包含常用宏包的发行版即可。
|
|
||||||
|
|
||||||
## 使用方法
|
|
||||||
|
|
||||||
1. 本目录是 `ouc_latex_template` 仓库的 `科技报告/` 子目录,克隆主仓库即可:
|
|
||||||
```bash
|
|
||||||
git clone https://code.yangyq.net/laoyang/ouc_latex_template.git
|
|
||||||
cd ouc_latex_template/科技报告
|
|
||||||
```
|
|
||||||
2. 在 `input/info.tex` 中填写标题、副标题、作者、单位、部门等信息;
|
|
||||||
3. 在 `report.tex` 中撰写正文(或按 `\input` 方式组织章节文件);
|
|
||||||
4. 使用 XeLaTeX 编译**两遍**(第一遍生成目录与交叉引用信息,第二遍写入正文):
|
|
||||||
|
|
||||||
```bash
|
|
||||||
xelatex report.tex
|
|
||||||
xelatex report.tex
|
|
||||||
```
|
|
||||||
|
|
||||||
5. 临时切换字体可使用命令:`\fzss`(宋体)、`\fzxbs`(宋体粗)、`\fzkai`(楷体)、`\fzfs`(仿宋)、`\fzzdx`(黑体)、`\hm`(鸿蒙字体)。命令名沿用旧版(fz 取自原方正系列),实际用的是随仓库分发的开源字体,对应关系见 `cls/font.cls` 的注释。
|
|
||||||
|
|
||||||
## 署名与联系方式(二次分发前请修改)
|
|
||||||
|
|
||||||
模板里有两处「作者 / 联系方式」信息,**性质不同,别改错地方**:
|
|
||||||
|
|
||||||
| 想改什么 | 改哪个文件的哪里 | 说明 |
|
|
||||||
|---|---|---|
|
|
||||||
| **模板维护者**的联系方式 | `report.cls` 顶部的 `Maintainer:` 一行 | 目前是占位符 `someone@example.com`。它只出现在注释里,**不参与排版**,改成什么都不会影响编译结果 —— 你要把这份模板再分发出去,就换成你自己的。 |
|
|
||||||
| **报告本身**的作者 / 单位 / 部门 | `input/info.tex` 里的 `\theauthor`、`\theaffiliation`、`\thedept` | 会印在**封面**上;单位与部门还会成为全页**水印**(水印的文字、透明度、大小在 `input/setting.tex` 里调)。 |
|
|
||||||
|
|
||||||
> 也就是说:`report.cls` 顶部那行与你的报告内容无关;报告里显示的作者信息一律在 `input/info.tex`。
|
|
||||||
|
|
||||||
## TeX Live 版本兼容性
|
|
||||||
|
|
||||||
同一份源码在下列 TeX Live 版本下均可直接编译(XeLaTeX),**不需要切分支、不需要改代码**:
|
|
||||||
|
|
||||||
| TeX Live | 状态 |
|
|
||||||
|------|------|
|
|
||||||
| 2022 | 已验证通过(基线) |
|
|
||||||
| 2023 | 已验证通过 |
|
|
||||||
| 2024 | 已验证通过 |
|
|
||||||
| 2025 | 已验证通过 |
|
|
||||||
| 2026 | 已验证通过 |
|
|
||||||
|
|
||||||
> 本目录原为独立仓库 `ouc-report-latex-template`,曾按 TeX Live 年份维护多套分支。
|
|
||||||
> 2026-10 并入 `ouc_latex_template` 后**只保留 `main` 一份源码**(已实测各年份通用),
|
|
||||||
> 旧仓库的分支不再更新。
|
|
||||||
|
|
||||||
## 目录结构
|
|
||||||
|
|
||||||
```
|
|
||||||
.
|
|
||||||
├── report.cls # 文档类(模块化加载 cls/ 下各子模块)
|
|
||||||
├── cls/ # 功能模块:全局设定、字体、页面、标题、信息框、代码块等
|
|
||||||
├── input/ # 文档内容:封面、目录、摘要、信息与整体设置
|
|
||||||
├── figs/ # 图片资源
|
|
||||||
├── (字体在仓库根 fonts/) # 不再自备字体,详见 ../fonts/README.md
|
|
||||||
├── fontawesome.pdf # fontawesome 图标使用手册
|
|
||||||
└── report.tex # 主文件(XeLaTeX 编译入口)
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## 关于 `report.pdf`
|
或仓库根:`bash build.sh 科技报告`(自动跑两遍)
|
||||||
|
|
||||||
仓库内的 `report.pdf` 是成品样张,用于预览效果。封面的日期取自 `\today`,
|
## 文件
|
||||||
所以**每次编译都会变**;用不同年份的 TeX Live 编译,PDF 体积也可能略有差异,
|
|
||||||
但**页面渲染内容一致**。以 `report.tex` 源码为准。
|
```
|
||||||
|
科技报告/
|
||||||
|
├── report.tex 主文件(一般不改,只做 \input)
|
||||||
|
├── input/ 内容与设置
|
||||||
|
│ ├── info.tex ← 标题、作者等信息,改这里
|
||||||
|
│ ├── setting.tex ← 页面、水印等设置
|
||||||
|
│ ├── cover.tex 封面
|
||||||
|
│ ├── toc.tex 目录
|
||||||
|
│ ├── abstract.tex 摘要
|
||||||
|
│ └── main/ 正文各章
|
||||||
|
├── cls/ 版式模块(11 个)
|
||||||
|
├── figs/ 插图
|
||||||
|
└── logos/ 校徽等标识
|
||||||
|
```
|
||||||
|
|
||||||
|
## 改标题信息
|
||||||
|
|
||||||
|
编辑 `input/info.tex`:
|
||||||
|
|
||||||
|
```latex
|
||||||
|
\newcommand{\themaintitle}{这是一个很好用的LaTex模板} % 标题
|
||||||
|
\newcommand{\thesubtitle}{这里是副标题} % 副标题
|
||||||
|
\newcommand{\theauthor}{作者名字} % 作者
|
||||||
|
\newcommand{\thedate}{\today} % 时间
|
||||||
|
\newcommand{\theaffiliation}{中国海洋大学} % 工作单位
|
||||||
|
\newcommand{\thedept}{计算机科学与技术学院} % 部门
|
||||||
|
```
|
||||||
|
|
||||||
|
| 参数 | 说明 |
|
||||||
|
|---|---|
|
||||||
|
| `\themaintitle` | 标题 |
|
||||||
|
| `\thesubtitle` | 副标题 |
|
||||||
|
| `\theauthor` | 作者 |
|
||||||
|
| `\thedate` | 日期,可写 `\today` 或具体日期 |
|
||||||
|
| `\theaffiliation` | 工作单位 |
|
||||||
|
| `\thedept` | 部门 |
|
||||||
|
|
||||||
|
## 改正文
|
||||||
|
|
||||||
|
`input/main/` 下按章分文件,`report.tex` 里按顺序 `\input`。
|
||||||
|
|
||||||
|
```latex
|
||||||
|
\chapter{第一章标题}
|
||||||
|
正文内容。
|
||||||
|
|
||||||
|
\section{节标题}
|
||||||
|
\subsection{小节标题}
|
||||||
|
```
|
||||||
|
|
||||||
|
标准 LaTeX 章节命令。增删章节时改 `report.tex` 里的 `\input` 列表。
|
||||||
|
|
||||||
|
## 改封面与摘要
|
||||||
|
|
||||||
|
- `input/cover.tex` — 封面版式,一般不改
|
||||||
|
- `input/abstract.tex` — 摘要内容,替换其中的文字
|
||||||
|
|
||||||
|
## 页面设置
|
||||||
|
|
||||||
|
`input/setting.tex` 里可调:
|
||||||
|
|
||||||
|
```latex
|
||||||
|
\SetWatermarkText{\theaffiliation\thedept} % 水印文字
|
||||||
|
```
|
||||||
|
|
||||||
|
水印颜色在同一文件里:
|
||||||
|
|
||||||
|
```latex
|
||||||
|
ouwblue!4!white % 想更淡改成 3,想明显改成 8
|
||||||
|
```
|
||||||
|
|
||||||
|
## 版式模块
|
||||||
|
|
||||||
|
`cls/` 下 11 个模块各管一块,需要改版式时按名字找:
|
||||||
|
|
||||||
|
| 模块 | 管什么 |
|
||||||
|
|---|---|
|
||||||
|
| `global.cls` | 全局设置 |
|
||||||
|
| `geometry.cls` | 页面尺寸与边距 |
|
||||||
|
| `font.cls` | 字体与字号 |
|
||||||
|
| `color.cls` | 配色(海大蓝等) |
|
||||||
|
| `title.cls` | 标题页 |
|
||||||
|
| `headandfoot.cls` | 页眉页脚 |
|
||||||
|
| `boxes.cls` | 盒子环境 |
|
||||||
|
| `code.cls` | 代码块 |
|
||||||
|
| `figs.cls` | 插图设置 |
|
||||||
|
| `chinesename.cls` | 中文名称(图、表、参考文献等) |
|
||||||
|
| `hyperref.cls` | 超链接设置 |
|
||||||
|
|
||||||
|
## 插图
|
||||||
|
|
||||||
|
图片放 `figs/`,正文里:
|
||||||
|
|
||||||
|
```latex
|
||||||
|
\begin{figure}[htbp]
|
||||||
|
\centering
|
||||||
|
\includegraphics[width=0.8\textwidth]{figs/xxx.png}
|
||||||
|
\caption{图标题}
|
||||||
|
\label{fig:xxx}
|
||||||
|
\end{figure}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 版式
|
||||||
|
|
||||||
|
```
|
||||||
|
A4,多页
|
||||||
|
封面 + 摘要 + 目录 + 正文
|
||||||
|
页眉页脚含章节名与页码
|
||||||
|
整页带极浅水印(单位名称)
|
||||||
|
正文宋体,标题黑体
|
||||||
|
```
|
||||||
|
|
||||||
|
## 注意
|
||||||
|
|
||||||
|
示例内容为占位文字,使用时全部替换。
|
||||||
@@ -6,6 +6,26 @@
|
|||||||
% 颜色一律引用 cls/color.cls 里的语义名(oucinfo / oucalert ...),
|
% 颜色一律引用 cls/color.cls 里的语义名(oucinfo / oucalert ...),
|
||||||
% 不在这里写具体色名,更不写 RGB 值。
|
% 不在这里写具体色名,更不写 RGB 值。
|
||||||
%
|
%
|
||||||
|
% 【关于内容块里的 3 个 Underfull \hbox(记录)】
|
||||||
|
%
|
||||||
|
% 第 208/214/220 行那三段示例文字里有 \verb|Illuminate\Foundation\Http\Kernel|,
|
||||||
|
% 这个 35 字符的串在 \verb 里**不能断行**,整行只能把它塞进去,于是那行
|
||||||
|
% 被撑松 —— 报 Underfull (badness 1231)。
|
||||||
|
%
|
||||||
|
% · \emergencystretch 2em / 10em —— 无效。它不是"额度不够"的问题:
|
||||||
|
% 这一行没有足够的可拉伸 glue 可用,给多少额度都无从施展。
|
||||||
|
% · \sloppy —— 反而更差,badness 从 1231 升到 3590(放宽了断行标准,
|
||||||
|
% TeX 选了别的更松的解)。
|
||||||
|
%
|
||||||
|
% 有效但**不采用**的方案:
|
||||||
|
% · \seqsplit —— Underfull 归零,代价是在任意字符处断行,
|
||||||
|
% 一条代码路径被切成两段,可读性明显变差。
|
||||||
|
% · 换窄体等宽 lmmonoltcond(Light Condensed)—— 也归零,
|
||||||
|
% 但压缩字体让代码变窄变小,为一个示例文本牺牲整体代码可读性不合理。
|
||||||
|
%
|
||||||
|
% 结论:保留这 3 个 Underfull。badness 1231 属轻微(10000 才是严重),
|
||||||
|
% 渲染出来只是行末留白略多,不影响阅读。日志里看到它们属预期,不是回归。
|
||||||
|
%
|
||||||
|
|
||||||
%% 带标题的文本框
|
%% 带标题的文本框
|
||||||
% 这个框走的是"极简"路线:框线和标题栏都是白色,靠黑字 + 细边分界。
|
% 这个框走的是"极简"路线:框线和标题栏都是白色,靠黑字 + 细边分界。
|
||||||
|
|||||||
+63
-9
@@ -42,18 +42,37 @@
|
|||||||
%======================================================================
|
%======================================================================
|
||||||
% 二、默认字体族
|
% 二、默认字体族
|
||||||
%
|
%
|
||||||
% 西文:鸿蒙 HarmonyOS Sans(与原模板一致,观感不变)
|
|
||||||
% 中文:OUC Serif 书宋(对应原方正书宋),粗体用 OUC Serif Bold
|
% 中文:OUC Serif 书宋(对应原方正书宋),粗体用 OUC Serif Bold
|
||||||
% (对应原方正小标宋 —— 小标宋本身就是宋体的标题变体)
|
% (对应原方正小标宋 —— 小标宋本身就是宋体的标题变体)
|
||||||
|
% 西文:Cochineal(Minion 风格,OFL 1.1)
|
||||||
|
% 无衬线:鸿蒙 HarmonyOS Sans(标题、目录标题、封面标题都靠 \hm 切)
|
||||||
%
|
%
|
||||||
% ⚠️ Path= 是相对**编译时工作目录**(= 科技报告/)的,不是相对 cls/。
|
% ⚠️ Path= 是相对**编译时工作目录**(= 科技报告/)的,不是相对 cls/。
|
||||||
% 故写作 ../fonts/...,不要写 ../../。
|
% 故写作 ../fonts/...,不要写 ../../。
|
||||||
|
%
|
||||||
|
% ⚠️⚠️ 西文为什么从 HarmonyOS 换成 Cochineal(2026-10 改,#19)
|
||||||
|
%
|
||||||
|
% 中文换成思源宋体之后,正文就成了「中文衬线 + 西文无衬线」,
|
||||||
|
% 同一行里英文数字明显比汉字细、比汉字"陷进去",读起来割裂。
|
||||||
|
%
|
||||||
|
% 更明显的副作用在目录:\setmainfont 是西文字体总开关,目录条目的
|
||||||
|
% 编号("1." 是数字)走它 → 鸿蒙粗体;而条目标题是中文 → 走
|
||||||
|
% \setCJKmainfont → 思源宋体粗。**同一条目录里两种字体**,
|
||||||
|
% 这就是"标题一会儿黑体一会儿什么体"的实际来源。
|
||||||
|
%
|
||||||
|
% 换成 Cochineal 后:中文宋体、西文衬线,灰度接近;目录编号与标题
|
||||||
|
% 也归到同一字族。度量与 Termes 只差 1.9%,不推着断行变。
|
||||||
|
%
|
||||||
|
% ⚠️ \setsansfont 保持鸿蒙 —— 标题用 \hm(CJK 族名 OUCHM)切换,
|
||||||
|
% 西文 sans 位仍是鸿蒙,标题的中西文因此都是鸿蒙,与正文区分得开。
|
||||||
%======================================================================
|
%======================================================================
|
||||||
\setmainfont{HarmonyOS_Sans_Regular.ttf}[
|
\setmainfont{cochineal}[
|
||||||
Path = ../fonts/harmonyos-sans/,
|
Extension = .otf,
|
||||||
BoldFont = HarmonyOS_Sans_Bold.ttf,
|
Path = ../fonts/cochineal/,
|
||||||
ItalicFont = HarmonyOS_Sans_Regular_Italic.ttf,
|
UprightFont = *-Roman,
|
||||||
BoldItalicFont = HarmonyOS_Sans_Bold_Italic.ttf,
|
BoldFont = *-Bold,
|
||||||
|
ItalicFont = *-Italic,
|
||||||
|
BoldItalicFont = *-BoldItalic,
|
||||||
]
|
]
|
||||||
\setsansfont{HarmonyOS_Sans_Regular.ttf}[
|
\setsansfont{HarmonyOS_Sans_Regular.ttf}[
|
||||||
Path = ../fonts/harmonyos-sans/,
|
Path = ../fonts/harmonyos-sans/,
|
||||||
@@ -61,8 +80,22 @@
|
|||||||
ItalicFont = HarmonyOS_Sans_Regular_Italic.ttf,
|
ItalicFont = HarmonyOS_Sans_Regular_Italic.ttf,
|
||||||
BoldItalicFont = HarmonyOS_Sans_Bold_Italic.ttf,
|
BoldItalicFont = HarmonyOS_Sans_Bold_Italic.ttf,
|
||||||
]
|
]
|
||||||
\setmonofont{HarmonyOS_Sans_Regular.ttf}[
|
|
||||||
Path = ../fonts/harmonyos-sans/,
|
% 等宽位:真等宽,供代码块(listings 的 \ttfamily)使用。
|
||||||
|
% 竖向对不齐,缩进看起来是歪的。
|
||||||
|
% lmmono(Latin Modern Mono)是 TeX Live 自带,无需额外字体文件。
|
||||||
|
%
|
||||||
|
% ⚠️ 这里**不能**用 Extension + UprightFont=*-regular 的组合。
|
||||||
|
% lm 系列的文件名本身就是 "lmmono10-regular.otf",已经带 -regular 后缀;
|
||||||
|
% 再配 Extension=.otf 加 *-regular,fontspec 会拼成
|
||||||
|
% lmmono10-regular-regular.otf
|
||||||
|
% 然后报 The font "lmmono10-regular-regular" cannot be found。
|
||||||
|
% 正确做法是给完整文件名、不给 Extension。
|
||||||
|
% ⚠️ 没有 lmmonobq 这个变体;粗体用 lmmonolt10-bold(同属 lmmono 家族,
|
||||||
|
% 字宽与 regular 一致,换粗体不会让代码错位)。
|
||||||
|
\setmonofont{lmmono10-regular.otf}[
|
||||||
|
ItalicFont = lmmono10-italic.otf,
|
||||||
|
BoldFont = lmmonolt10-bold.otf,
|
||||||
]
|
]
|
||||||
|
|
||||||
% \hm 已在 fonts.tex 里登记(CJK 族名 OUCHM),这里不重复定义。
|
% \hm 已在 fonts.tex 里登记(CJK 族名 OUCHM),这里不重复定义。
|
||||||
@@ -81,6 +114,28 @@
|
|||||||
\XeTeXlinebreaklocale "zh"
|
\XeTeXlinebreaklocale "zh"
|
||||||
\XeTeXlinebreakskip = 0pt plus 1pt
|
\XeTeXlinebreakskip = 0pt plus 1pt
|
||||||
|
|
||||||
|
%======================================================================
|
||||||
|
% 二之二、重定义 \hm:中文与西文一起切到鸿蒙
|
||||||
|
%
|
||||||
|
% 问题:fonts.tex 里的 \hm 是 \def\hm{\CJKfamily{OUCHM}} —— 这只是
|
||||||
|
% xeCJK 的**中文字族**切换,管不到阿拉伯数字和拉丁字母。而本模板的
|
||||||
|
% 标题、封面主标题、摘要标题都用 \hm 来做"这是鸿蒙",于是凡是标题里
|
||||||
|
% 夹了西文("LaTex"、编号 "1." "3.1")就还是渲染成西文字体,
|
||||||
|
% 表现为同一个标题里中文鸿蒙、西文衬线 —— 就是"字体一会一个样"。
|
||||||
|
%
|
||||||
|
% 解法:在本模板内把 \hm 重定义为「中文字族 + 拉丁字族」一起切。
|
||||||
|
% \hmlatin 由 fonts.tex 用 \newfontfamily 定义,是 Latin 字族命令,
|
||||||
|
% 与 \CJKfamily 作用域不同,可以并存。
|
||||||
|
%
|
||||||
|
% ⚠️ 必须是 \renewcommand,不能 \newcommand —— 名字已被 fonts.tex 定义。
|
||||||
|
% ⚠️ 只改本模板,不动 ../fonts.tex:幻灯片和简历也在用那个 \hm,
|
||||||
|
% 全局改会让它们跟着变,而它们没有这个"标题里混西文"的问题。
|
||||||
|
% 这是本模板的局部修正,不该外溢。
|
||||||
|
% ⚠️ 重定义要在所有 \hm 调用**之前**。本文件由 report.cls 在
|
||||||
|
% \begin{document} 前 \input,位置没问题;不要把这段挪到后面。
|
||||||
|
%======================================================================
|
||||||
|
\renewcommand{\hm}{\hmlatin\CJKfamily{OUCHM}}
|
||||||
|
|
||||||
%======================================================================
|
%======================================================================
|
||||||
% 三、5 个方正语义别名
|
% 三、5 个方正语义别名
|
||||||
%
|
%
|
||||||
@@ -117,7 +172,6 @@
|
|||||||
\newcommand{\fzkai}{\CJKfamily{fzkai}}
|
\newcommand{\fzkai}{\CJKfamily{fzkai}}
|
||||||
|
|
||||||
% 仿宋(原方正仿宋)—— 斜体位
|
% 仿宋(原方正仿宋)—— 斜体位
|
||||||
% ⚠️ 朱雀仿宋只有常规一档。旧版这里配的是"方正仿宋",也是常规字面,
|
|
||||||
% 所以观感一致;但若在 \fzfs 下用 \bfseries,不会真的变粗。
|
% 所以观感一致;但若在 \fzfs 下用 \bfseries,不会真的变粗。
|
||||||
\setCJKfamilyfont{fzfs}[
|
\setCJKfamilyfont{fzfs}[
|
||||||
Extension = .ttf,
|
Extension = .ttf,
|
||||||
|
|||||||
+46
-2
@@ -2,12 +2,26 @@
|
|||||||
%% 标题、目录等设定
|
%% 标题、目录等设定
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
|
%----------------------------------------------------------------------
|
||||||
|
% 各级标题字体
|
||||||
|
%
|
||||||
|
% 目标:编号和标题文字**都是鸿蒙**。
|
||||||
|
%
|
||||||
|
% 踩的坑:原来只写 format=\hm\bfseries,以为 \hm 就够了。实际 \hm 在旧版
|
||||||
|
% 是纯 xeCJK 中文字族切换,管不到阿拉伯数字 —— 编号 "1." "3.1" 被判成
|
||||||
|
% 西文,仍走 \setmainfont,于是同一个标题里中文鸿蒙、编号衬线。
|
||||||
|
%
|
||||||
|
% 修法:本次在 cls/font.cls 里把 \hm 重定义为「中西文一起切鸿蒙」,
|
||||||
|
% 所以这里维持 format=\hm\bfseries 即可,不需要再写 \hmlatin。
|
||||||
|
% 换个说法:问题统一在 \hm 的定义处解决,而不是在每一处调用点逐个补 ——
|
||||||
|
% 后者必然漏(封面、摘要、目录标题、页眉都会各自漏一次)。
|
||||||
|
%----------------------------------------------------------------------
|
||||||
\ctexset{
|
\ctexset{
|
||||||
% 修改 section文字样式,
|
% 修改 section文字样式,
|
||||||
section={
|
section={
|
||||||
name={,.},%编号和文字中间用.。
|
name={,.},%编号和文字中间用.。
|
||||||
number={\arabic{section}},%编号形式:\arabic设置为阿拉伯数字,\chinese设置为中文,\roman设置为小写罗马字母,\Roman设置为大写罗马字母,\alph设置为小写英文,\Alph设置为大写英文。
|
number={\arabic{section}},%编号形式:\arabic设置为阿拉伯数字,\chinese设置为中文,\roman设置为小写罗马字母,\Roman设置为大写罗马字母,\alph设置为小写英文,\Alph设置为大写英文。
|
||||||
format=\hm\bfseries\raggedright\zihao{4},%鸿蒙字体,小四号字,右对齐。
|
format=\hm\bfseries\raggedright\zihao{4},%鸿蒙字体(中西文都用鸿蒙),小四号字,右对齐。
|
||||||
aftername=\hspace{5pt},%编号和标题的距离
|
aftername=\hspace{5pt},%编号和标题的距离
|
||||||
% beforeskip=1ex,%标题与前文的距离
|
% beforeskip=1ex,%标题与前文的距离
|
||||||
% afterskip=1ex,%标题与后文的距离
|
% afterskip=1ex,%标题与后文的距离
|
||||||
@@ -31,4 +45,34 @@
|
|||||||
%给目录加上点
|
%给目录加上点
|
||||||
\renewcommand{\cftpartleader}{\cftdotfill{\cftdotsep}} % 给 parts 加点
|
\renewcommand{\cftpartleader}{\cftdotfill{\cftdotsep}} % 给 parts 加点
|
||||||
%\renewcommand{\cftchapleader}{\cftdotfill{\cftdotsep}} % 给 chapters 加点
|
%\renewcommand{\cftchapleader}{\cftdotfill{\cftdotsep}} % 给 chapters 加点
|
||||||
\renewcommand{\cftsecleader}{\cftdotfill{\cftdotsep}} % 给 sections加点
|
\renewcommand{\cftsecleader}{\cftdotfill{\cftdotsep}} % 给 sections加点
|
||||||
|
|
||||||
|
%----------------------------------------------------------------------
|
||||||
|
% 目录条目的字族统一
|
||||||
|
%
|
||||||
|
% 问题:一条目录里能出现两种字体。编号 "1." 是阿拉伯数字 → 被 xeCJK
|
||||||
|
% 判成西文 → 走 \setmainfont;条目标题是中文 → 走 \setCJKmainfont。
|
||||||
|
% 旧版 \setmainfont 是鸿蒙、\setCJKmainfont 是思源宋体,于是同一条里
|
||||||
|
% 「编号鸿蒙粗 + 标题宋体粗」,看着就是标题字体一会儿一个样。
|
||||||
|
%
|
||||||
|
% 把西文改回衬线(Cochineal)之后这个分裂本身已经消失,但这里仍然显式
|
||||||
|
% 声明一次,理由有二:
|
||||||
|
% ① 不依赖 \setmainfont 的间接效果 —— 将来若有人改了 font.cls 的
|
||||||
|
% 西文设置,目录不会跟着又裂开;
|
||||||
|
% ② tocloft 的 \cftsecfont 是"只管目录条目"的开关,改它比调全局安全。
|
||||||
|
%
|
||||||
|
% ⚠️ 只设 \cftsecfont / \cftsubsecfont / \cftsubsubsecfont,不动
|
||||||
|
% \cftsecpagefont —— 页码那列保持默认,不用跟着正文加粗。
|
||||||
|
% ⚠️ \cftsecfont 里不要塞 \bfseries:加粗与否是各条目录自己的事
|
||||||
|
% (正文章节标题本就 \bfseries),在这里硬加会让二级三级也变粗。
|
||||||
|
%----------------------------------------------------------------------
|
||||||
|
\renewcommand{\cftsecfont}{\normalfont}
|
||||||
|
\renewcommand{\cftsubsecfont}{\normalfont}
|
||||||
|
\renewcommand{\cftsubsubsecfont}{\normalfont}
|
||||||
|
|
||||||
|
% 页码列单独归零。上面三条只管条目文字,页码走的是 \cft*pagefont,
|
||||||
|
% 默认继承条目的粗体设置 —— 不显式清掉的话,目录里页码会比标题还粗,
|
||||||
|
% 一眼看过去页码最抢眼。
|
||||||
|
\renewcommand{\cftsecpagefont}{\normalfont}
|
||||||
|
\renewcommand{\cftsubsecpagefont}{\normalfont}
|
||||||
|
\renewcommand{\cftsubsubsecpagefont}{\normalfont}
|
||||||
@@ -14,7 +14,7 @@
|
|||||||
% 视觉上"挂在页眉区",明确在版面结构内,又不会挤压正文。
|
% 视觉上"挂在页眉区",明确在版面结构内,又不会挤压正文。
|
||||||
% ⚠️ 别把 20mm 改得更小:A4 印刷 / 装订裁切余量一般 10~12mm,
|
% ⚠️ 别把 20mm 改得更小:A4 印刷 / 装订裁切余量一般 10~12mm,
|
||||||
% 改到 15mm 以下有被裁掉的风险。
|
% 改到 15mm 以下有被裁掉的风险。
|
||||||
% ⚠️ logo 下沿距首条横线约 12mm(实测),若改 width 或 yshift,
|
% ⚠️ logo 下沿距首条横线约 12mm(实际),若改 width 或 yshift,
|
||||||
% 记得重新确认这个间隙,太大显得松散、太小挤成一团。
|
% 记得重新确认这个间隙,太大显得松散、太小挤成一团。
|
||||||
%----------------------------------------------------------------------
|
%----------------------------------------------------------------------
|
||||||
\newcommand{\coverlogo}{%
|
\newcommand{\coverlogo}{%
|
||||||
|
|||||||
+3
-3
@@ -47,15 +47,15 @@
|
|||||||
|
|
||||||
\section{字体}
|
\section{字体}
|
||||||
|
|
||||||
在模板中,默认使用的字体是鸿蒙字体,除此之外,还定义了一些其他的中文字体。
|
在模板中,中文默认使用思源宋体,西文默认使用 Cochineal,标题统一使用鸿蒙字体。除此之外,还定义了一些其他的中文字体。
|
||||||
|
|
||||||
英文字体,默认使用的是鸿蒙字体(HarmonyOS Sans),现在你看到的应该就是这个字体的效果。这些设置,可以在cls中,字体设定里面进行修改。
|
英文字体,正文默认使用的是 Cochineal(一款 Minion 风格的衬线体),代码等宽位使用的是 Latin Modern Mono。所以你现在看到的西文和阿拉伯数字都是衬线字体。这样安排是为了和中文的思源宋体保持相近的灰度——如果西文用无衬线,同一行里字母数字会明显比汉字细、像"陷进去",读起来割裂。这些设置,可以在 cls 中字体设定里面进行修改。
|
||||||
|
|
||||||
中文字体,使用的是鸿蒙字体、思源宋体、霞鹜文楷、朱雀仿宋、思源黑体等。全部为开源可商用字体,不使用任何方正、微软雅黑等商业字体。
|
中文字体,使用的是鸿蒙字体、思源宋体、霞鹜文楷、朱雀仿宋、思源黑体等。全部为开源可商用字体,不使用任何方正、微软雅黑等商业字体。
|
||||||
|
|
||||||
中文的默认字体衬线字体是思源宋体,加粗字体是思源宋体的真粗体,就像这样:\textbf{这里是加粗字体}。斜体的字体是霞鹜文楷,就像这样:\textit{这里是中文斜体}。斜体粗体的字体是朱雀仿宋,就像这样:\textbf{\textit{这里是粗体斜体}}。中文的无衬线字体sans font使用的是鸿蒙字体,你应该可以在标题中看到它。中文等宽字体,使用的是思源黑体。
|
中文的默认字体衬线字体是思源宋体,加粗字体是思源宋体的真粗体,就像这样:\textbf{这里是加粗字体}。斜体的字体是霞鹜文楷,就像这样:\textit{这里是中文斜体}。斜体粗体的字体是朱雀仿宋,就像这样:\textbf{\textit{这里是粗体斜体}}。中文的无衬线字体sans font使用的是鸿蒙字体,你应该可以在标题中看到它。中文等宽字体,使用的是思源黑体。
|
||||||
|
|
||||||
默认的无衬线字体是鸿蒙字体,你应该可以在各种标题中看到它的样子。
|
默认的无衬线字体是鸿蒙字体,你应该可以在各种标题中看到它的样子。注意标题里的中文和西文(包括编号 "1."、"3.1")现在统一都是鸿蒙——旧版因为编号是阿拉伯数字、被归到西文字体,会出现同一个标题里中文鸿蒙、编号衬线的情况,看着像"字体一会一个样",现已修正。
|
||||||
|
|
||||||
同样,上述的字体,在cls中,都可以进行设置。
|
同样,上述的字体,在cls中,都可以进行设置。
|
||||||
|
|
||||||
|
|||||||
+415
@@ -0,0 +1,415 @@
|
|||||||
|
The LaTeX Project Public License
|
||||||
|
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
|
||||||
|
LPPL Version 1.3c 2008-05-04
|
||||||
|
|
||||||
|
Copyright 1999 2002-2008 LaTeX3 Project
|
||||||
|
Everyone is allowed to distribute verbatim copies of this
|
||||||
|
license document, but modification of it is not allowed.
|
||||||
|
|
||||||
|
|
||||||
|
PREAMBLE
|
||||||
|
========
|
||||||
|
|
||||||
|
The LaTeX Project Public License (LPPL) is the primary license under
|
||||||
|
which the LaTeX kernel and the base LaTeX packages are distributed.
|
||||||
|
|
||||||
|
You may use this license for any work of which you hold the copyright
|
||||||
|
and which you wish to distribute. This license may be particularly
|
||||||
|
suitable if your work is TeX-related (such as a LaTeX package), but
|
||||||
|
it is written in such a way that you can use it even if your work is
|
||||||
|
unrelated to TeX.
|
||||||
|
|
||||||
|
The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE',
|
||||||
|
below, gives instructions, examples, and recommendations for authors
|
||||||
|
who are considering distributing their works under this license.
|
||||||
|
|
||||||
|
This license gives conditions under which a work may be distributed
|
||||||
|
and modified, as well as conditions under which modified versions of
|
||||||
|
that work may be distributed.
|
||||||
|
|
||||||
|
We, the LaTeX3 Project, believe that the conditions below give you
|
||||||
|
the freedom to make and distribute modified versions of your work
|
||||||
|
that conform with whatever technical specifications you wish while
|
||||||
|
maintaining the availability, integrity, and reliability of
|
||||||
|
that work. If you do not see how to achieve your goal while
|
||||||
|
meeting these conditions, then read the document `cfgguide.tex'
|
||||||
|
and `modguide.tex' in the base LaTeX distribution for suggestions.
|
||||||
|
|
||||||
|
|
||||||
|
DEFINITIONS
|
||||||
|
===========
|
||||||
|
|
||||||
|
In this license document the following terms are used:
|
||||||
|
|
||||||
|
`Work'
|
||||||
|
Any work being distributed under this License.
|
||||||
|
|
||||||
|
`Derived Work'
|
||||||
|
Any work that under any applicable law is derived from the Work.
|
||||||
|
|
||||||
|
`Modification'
|
||||||
|
Any procedure that produces a Derived Work under any applicable
|
||||||
|
law -- for example, the production of a file containing an
|
||||||
|
original file associated with the Work or a significant portion of
|
||||||
|
such a file, either verbatim or with modifications and/or
|
||||||
|
translated into another language.
|
||||||
|
|
||||||
|
`Modify'
|
||||||
|
To apply any procedure that produces a Derived Work under any
|
||||||
|
applicable law.
|
||||||
|
|
||||||
|
`Distribution'
|
||||||
|
Making copies of the Work available from one person to another, in
|
||||||
|
whole or in part. Distribution includes (but is not limited to)
|
||||||
|
making any electronic components of the Work accessible by
|
||||||
|
file transfer protocols such as FTP or HTTP or by shared file
|
||||||
|
systems such as Sun's Network File System (NFS).
|
||||||
|
|
||||||
|
`Compiled Work'
|
||||||
|
A version of the Work that has been processed into a form where it
|
||||||
|
is directly usable on a computer system. This processing may
|
||||||
|
include using installation facilities provided by the Work,
|
||||||
|
transformations of the Work, copying of components of the Work, or
|
||||||
|
other activities. Note that modification of any installation
|
||||||
|
facilities provided by the Work constitutes modification of the Work.
|
||||||
|
|
||||||
|
`Current Maintainer'
|
||||||
|
A person or persons nominated as such within the Work. If there is
|
||||||
|
no such explicit nomination then it is the `Copyright Holder' under
|
||||||
|
any applicable law.
|
||||||
|
|
||||||
|
`Base Interpreter'
|
||||||
|
A program or process that is normally needed for running or
|
||||||
|
interpreting a part or the whole of the Work.
|
||||||
|
|
||||||
|
A Base Interpreter may depend on external components but these
|
||||||
|
are not considered part of the Base Interpreter provided that each
|
||||||
|
external component clearly identifies itself whenever it is used
|
||||||
|
interactively. Unless explicitly specified when applying the
|
||||||
|
license to the Work, the only applicable Base Interpreter is a
|
||||||
|
`LaTeX-Format' or in the case of files belonging to the
|
||||||
|
`LaTeX-format' a program implementing the `TeX language'.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CONDITIONS ON DISTRIBUTION AND MODIFICATION
|
||||||
|
===========================================
|
||||||
|
|
||||||
|
1. Activities other than distribution and/or modification of the Work
|
||||||
|
are not covered by this license; they are outside its scope. In
|
||||||
|
particular, the act of running the Work is not restricted and no
|
||||||
|
requirements are made concerning any offers of support for the Work.
|
||||||
|
|
||||||
|
2. You may distribute a complete, unmodified copy of the Work as you
|
||||||
|
received it. Distribution of only part of the Work is considered
|
||||||
|
modification of the Work, and no right to distribute such a Derived
|
||||||
|
Work may be assumed under the terms of this clause.
|
||||||
|
|
||||||
|
3. You may distribute a Compiled Work that has been generated from a
|
||||||
|
complete, unmodified copy of the Work as distributed under Clause 2
|
||||||
|
above, as long as that Compiled Work is distributed in such a way that
|
||||||
|
the recipients may install the Compiled Work on their system exactly
|
||||||
|
as it would have been installed if they generated a Compiled Work
|
||||||
|
directly from the Work.
|
||||||
|
|
||||||
|
4. If you are the Current Maintainer of the Work, you may, without
|
||||||
|
restriction, modify the Work, thus creating a Derived Work. You may
|
||||||
|
also distribute the Derived Work without restriction, including
|
||||||
|
Compiled Works generated from the Derived Work. Derived Works
|
||||||
|
distributed in this manner by the Current Maintainer are considered to
|
||||||
|
be updated versions of the Work.
|
||||||
|
|
||||||
|
5. If you are not the Current Maintainer of the Work, you may modify
|
||||||
|
your copy of the Work, thus creating a Derived Work based on the Work,
|
||||||
|
and compile this Derived Work, thus creating a Compiled Work based on
|
||||||
|
the Derived Work.
|
||||||
|
|
||||||
|
6. If you are not the Current Maintainer of the Work, you may
|
||||||
|
distribute a Derived Work provided the following conditions are met
|
||||||
|
for every component of the Work unless that component clearly states
|
||||||
|
in the copyright notice that it is exempt from that condition. Only
|
||||||
|
the Current Maintainer is allowed to add such statements of exemption
|
||||||
|
to a component of the Work.
|
||||||
|
|
||||||
|
a. If a component of this Derived Work can be a direct replacement
|
||||||
|
for a component of the Work when that component is used with the
|
||||||
|
Base Interpreter, then, wherever this component of the Work
|
||||||
|
identifies itself to the user when used interactively with that
|
||||||
|
Base Interpreter, the replacement component of this Derived Work
|
||||||
|
clearly and unambiguously identifies itself as a modified version
|
||||||
|
of this component to the user when used interactively with that
|
||||||
|
Base Interpreter.
|
||||||
|
|
||||||
|
b. Every component of the Derived Work contains prominent notices
|
||||||
|
detailing the nature of the changes to that component, or a
|
||||||
|
prominent reference to another file that is distributed as part
|
||||||
|
of the Derived Work and that contains a complete and accurate log
|
||||||
|
of the changes.
|
||||||
|
|
||||||
|
c. No information in the Derived Work implies that any persons,
|
||||||
|
including (but not limited to) the authors of the original version
|
||||||
|
of the Work, provide any support, including (but not limited to)
|
||||||
|
the reporting and handling of errors, to recipients of the
|
||||||
|
Derived Work unless those persons have stated explicitly that
|
||||||
|
they do provide such support for the Derived Work.
|
||||||
|
|
||||||
|
d. You distribute at least one of the following with the Derived Work:
|
||||||
|
|
||||||
|
1. A complete, unmodified copy of the Work;
|
||||||
|
if your distribution of a modified component is made by
|
||||||
|
offering access to copy the modified component from a
|
||||||
|
designated place, then offering equivalent access to copy
|
||||||
|
the Work from the same or some similar place meets this
|
||||||
|
condition, even though third parties are not compelled to
|
||||||
|
copy the Work along with the modified component;
|
||||||
|
|
||||||
|
2. Information that is sufficient to obtain a complete,
|
||||||
|
unmodified copy of the Work.
|
||||||
|
|
||||||
|
7. If you are not the Current Maintainer of the Work, you may
|
||||||
|
distribute a Compiled Work generated from a Derived Work, as long as
|
||||||
|
the Derived Work is distributed to all recipients of the Compiled
|
||||||
|
Work, and as long as the conditions of Clause 6, above, are met with
|
||||||
|
regard to the Derived Work.
|
||||||
|
|
||||||
|
8. The conditions above are not intended to prohibit, and hence do not
|
||||||
|
apply to, the modification, by any method, of any component so that it
|
||||||
|
becomes identical to an updated version of that component of the Work as
|
||||||
|
it is distributed by the Current Maintainer under Clause 4, above.
|
||||||
|
|
||||||
|
9. Distribution of the Work or any Derived Work in an alternative
|
||||||
|
format, where the Work or that Derived Work (in whole or in part) is
|
||||||
|
then produced by applying some process to that format, does not relax or
|
||||||
|
nullify any sections of this license as they pertain to the results of
|
||||||
|
applying that process.
|
||||||
|
|
||||||
|
10. a. A Derived Work may be distributed under a different license
|
||||||
|
provided that license itself honors the conditions listed in
|
||||||
|
Clause 6 above, in regard to the Work, though it does not have
|
||||||
|
to honor the rest of the conditions in this license.
|
||||||
|
|
||||||
|
b. If a Derived Work is distributed under a different license, that
|
||||||
|
Derived Work must provide sufficient documentation as part of
|
||||||
|
itself to allow each recipient of that Derived Work to honor the
|
||||||
|
restrictions in Clause 6 above, concerning changes from the Work.
|
||||||
|
|
||||||
|
11. This license places no restrictions on works that are unrelated to
|
||||||
|
the Work, nor does this license place any restrictions on aggregating
|
||||||
|
such works with the Work by any means.
|
||||||
|
|
||||||
|
12. Nothing in this license is intended to, or may be used to, prevent
|
||||||
|
complete compliance by all parties with all applicable laws.
|
||||||
|
|
||||||
|
|
||||||
|
NO WARRANTY
|
||||||
|
===========
|
||||||
|
|
||||||
|
There is no warranty for the Work. Except when otherwise stated in
|
||||||
|
writing, the Copyright Holder provides the Work `as is', without
|
||||||
|
warranty of any kind, either expressed or implied, including, but not
|
||||||
|
limited to, the implied warranties of merchantability and fitness for a
|
||||||
|
particular purpose. The entire risk as to the quality and performance
|
||||||
|
of the Work is with you. Should the Work prove defective, you assume
|
||||||
|
the cost of all necessary servicing, repair, or correction.
|
||||||
|
|
||||||
|
In no event unless required by applicable law or agreed to in writing
|
||||||
|
will The Copyright Holder, or any author named in the components of the
|
||||||
|
Work, or any other party who may distribute and/or modify the Work as
|
||||||
|
permitted above, be liable to you for damages, including any general,
|
||||||
|
special, incidental or consequential damages arising out of any use of
|
||||||
|
the Work or out of inability to use the Work (including, but not limited
|
||||||
|
to, loss of data, data being rendered inaccurate, or losses sustained by
|
||||||
|
anyone as a result of any failure of the Work to operate with any other
|
||||||
|
programs), even if the Copyright Holder or said author or said other
|
||||||
|
party has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
|
||||||
|
MAINTENANCE OF THE WORK
|
||||||
|
=======================
|
||||||
|
|
||||||
|
The Work has the status `author-maintained' if the Copyright Holder
|
||||||
|
explicitly and prominently states near the primary copyright notice in
|
||||||
|
the Work that the Work can only be maintained by the Copyright Holder
|
||||||
|
or simply that it is `author-maintained'.
|
||||||
|
|
||||||
|
The Work has the status `maintained' if there is a Current Maintainer
|
||||||
|
who has indicated in the Work that they are willing to receive error
|
||||||
|
reports for the Work (for example, by supplying a valid e-mail
|
||||||
|
address). It is not required for the Current Maintainer to acknowledge
|
||||||
|
or act upon these error reports.
|
||||||
|
|
||||||
|
The Work changes from status `maintained' to `unmaintained' if there
|
||||||
|
is no Current Maintainer, or the person stated to be Current
|
||||||
|
Maintainer of the work cannot be reached through the indicated means
|
||||||
|
of communication for a period of six months, and there are no other
|
||||||
|
significant signs of active maintenance.
|
||||||
|
|
||||||
|
You can become the Current Maintainer of the Work by agreement with
|
||||||
|
any existing Current Maintainer to take over this role.
|
||||||
|
|
||||||
|
If the Work is unmaintained, you can become the Current Maintainer of
|
||||||
|
the Work through the following steps:
|
||||||
|
|
||||||
|
1. Make a reasonable attempt to trace the Current Maintainer (and
|
||||||
|
the Copyright Holder, if the two differ) through the means of
|
||||||
|
an Internet or similar search.
|
||||||
|
|
||||||
|
2. If this search is successful, then enquire whether the Work
|
||||||
|
is still maintained.
|
||||||
|
|
||||||
|
a. If it is being maintained, then ask the Current Maintainer
|
||||||
|
to update their communication data within one month.
|
||||||
|
|
||||||
|
b. If the search is unsuccessful or no action to resume active
|
||||||
|
maintenance is taken by the Current Maintainer, then announce
|
||||||
|
within the pertinent community your intention to take over
|
||||||
|
maintenance. (If the Work is a LaTeX work, this could be
|
||||||
|
done, for example, by posting to comp.text.tex.)
|
||||||
|
|
||||||
|
3a. If the Current Maintainer is reachable and agrees to pass
|
||||||
|
maintenance of the Work to you, then this takes effect
|
||||||
|
immediately upon announcement.
|
||||||
|
|
||||||
|
b. If the Current Maintainer is not reachable and the Copyright
|
||||||
|
Holder agrees that maintenance of the Work be passed to you,
|
||||||
|
then this takes effect immediately upon announcement.
|
||||||
|
|
||||||
|
4. If you make an `intention announcement' as described in 2b. above
|
||||||
|
and after three months your intention is challenged neither by
|
||||||
|
the Current Maintainer nor by the Copyright Holder nor by other
|
||||||
|
people, then you may arrange for the Work to be changed so as
|
||||||
|
to name you as the (new) Current Maintainer.
|
||||||
|
|
||||||
|
5. If the previously unreachable Current Maintainer becomes
|
||||||
|
reachable once more within three months of a change completed
|
||||||
|
under the terms of 3b) or 4), then that Current Maintainer must
|
||||||
|
become or remain the Current Maintainer upon request provided
|
||||||
|
they then update their communication data within one month.
|
||||||
|
|
||||||
|
A change in the Current Maintainer does not, of itself, alter the fact
|
||||||
|
that the Work is distributed under the LPPL license.
|
||||||
|
|
||||||
|
If you become the Current Maintainer of the Work, you should
|
||||||
|
immediately provide, within the Work, a prominent and unambiguous
|
||||||
|
statement of your status as Current Maintainer. You should also
|
||||||
|
announce your new status to the same pertinent community as
|
||||||
|
in 2b) above.
|
||||||
|
|
||||||
|
|
||||||
|
WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE
|
||||||
|
======================================================
|
||||||
|
|
||||||
|
This section contains important instructions, examples, and
|
||||||
|
recommendations for authors who are considering distributing their
|
||||||
|
works under this license. These authors are addressed as `you' in
|
||||||
|
this section.
|
||||||
|
|
||||||
|
Choosing This License or Another License
|
||||||
|
----------------------------------------
|
||||||
|
|
||||||
|
If for any part of your work you want or need to use *distribution*
|
||||||
|
conditions that differ significantly from those in this license, then
|
||||||
|
do not refer to this license anywhere in your work but, instead,
|
||||||
|
distribute your work under a different license. You may use the text
|
||||||
|
of this license as a model for your own license, but your license
|
||||||
|
should not refer to the LPPL or otherwise give the impression that
|
||||||
|
your work is distributed under the LPPL.
|
||||||
|
|
||||||
|
The document `modguide.tex' in the base LaTeX distribution explains
|
||||||
|
the motivation behind the conditions of this license. It explains,
|
||||||
|
for example, why distributing LaTeX under the GNU General Public
|
||||||
|
License (GPL) was considered inappropriate. Even if your work is
|
||||||
|
unrelated to LaTeX, the discussion in `modguide.tex' may still be
|
||||||
|
relevant, and authors intending to distribute their works under any
|
||||||
|
license are encouraged to read it.
|
||||||
|
|
||||||
|
A Recommendation on Modification Without Distribution
|
||||||
|
-----------------------------------------------------
|
||||||
|
|
||||||
|
It is wise never to modify a component of the Work, even for your own
|
||||||
|
personal use, without also meeting the above conditions for
|
||||||
|
distributing the modified component. While you might intend that such
|
||||||
|
modifications will never be distributed, often this will happen by
|
||||||
|
accident -- you may forget that you have modified that component; or
|
||||||
|
it may not occur to you when allowing others to access the modified
|
||||||
|
version that you are thus distributing it and violating the conditions
|
||||||
|
of this license in ways that could have legal implications and, worse,
|
||||||
|
cause problems for the community. It is therefore usually in your
|
||||||
|
best interest to keep your copy of the Work identical with the public
|
||||||
|
one. Many works provide ways to control the behavior of that work
|
||||||
|
without altering any of its licensed components.
|
||||||
|
|
||||||
|
How to Use This License
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
To use this license, place in each of the components of your work both
|
||||||
|
an explicit copyright notice including your name and the year the work
|
||||||
|
was authored and/or last substantially modified. Include also a
|
||||||
|
statement that the distribution and/or modification of that
|
||||||
|
component is constrained by the conditions in this license.
|
||||||
|
|
||||||
|
Here is an example of such a notice and statement:
|
||||||
|
|
||||||
|
%% pig.dtx
|
||||||
|
%% Copyright 2005 M. Y. Name
|
||||||
|
%
|
||||||
|
% This work may be distributed and/or modified under the
|
||||||
|
% conditions of the LaTeX Project Public License, either version 1.3
|
||||||
|
% of this license or (at your option) any later version.
|
||||||
|
% The latest version of this license is in
|
||||||
|
% http://www.latex-project.org/lppl.txt
|
||||||
|
% and version 1.3 or later is part of all distributions of LaTeX
|
||||||
|
% version 2005/12/01 or later.
|
||||||
|
%
|
||||||
|
% This work has the LPPL maintenance status `maintained'.
|
||||||
|
%
|
||||||
|
% The Current Maintainer of this work is M. Y. Name.
|
||||||
|
%
|
||||||
|
% This work consists of the files pig.dtx and pig.ins
|
||||||
|
% and the derived file pig.sty.
|
||||||
|
|
||||||
|
Given such a notice and statement in a file, the conditions
|
||||||
|
given in this license document would apply, with the `Work' referring
|
||||||
|
to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being
|
||||||
|
generated from `pig.dtx' using `pig.ins'), the `Base Interpreter'
|
||||||
|
referring to any `LaTeX-Format', and both `Copyright Holder' and
|
||||||
|
`Current Maintainer' referring to the person `M. Y. Name'.
|
||||||
|
|
||||||
|
If you do not want the Maintenance section of LPPL to apply to your
|
||||||
|
Work, change `maintained' above into `author-maintained'.
|
||||||
|
However, we recommend that you use `maintained', as the Maintenance
|
||||||
|
section was added in order to ensure that your Work remains useful to
|
||||||
|
the community even when you can no longer maintain and support it
|
||||||
|
yourself.
|
||||||
|
|
||||||
|
Derived Works That Are Not Replacements
|
||||||
|
---------------------------------------
|
||||||
|
|
||||||
|
Several clauses of the LPPL specify means to provide reliability and
|
||||||
|
stability for the user community. They therefore concern themselves
|
||||||
|
with the case that a Derived Work is intended to be used as a
|
||||||
|
(compatible or incompatible) replacement of the original Work. If
|
||||||
|
this is not the case (e.g., if a few lines of code are reused for a
|
||||||
|
completely different task), then clauses 6b and 6d shall not apply.
|
||||||
|
|
||||||
|
|
||||||
|
Important Recommendations
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
Defining What Constitutes the Work
|
||||||
|
|
||||||
|
The LPPL requires that distributions of the Work contain all the
|
||||||
|
files of the Work. It is therefore important that you provide a
|
||||||
|
way for the licensee to determine which files constitute the Work.
|
||||||
|
This could, for example, be achieved by explicitly listing all the
|
||||||
|
files of the Work near the copyright notice of each file or by
|
||||||
|
using a line such as:
|
||||||
|
|
||||||
|
% This work consists of all files listed in manifest.txt.
|
||||||
|
|
||||||
|
in that place. In the absence of an unequivocal list it might be
|
||||||
|
impossible for the licensee to determine what is considered by you
|
||||||
|
to comprise the Work and, in such a case, the licensee would be
|
||||||
|
entitled to make reasonable conjectures as to which files comprise
|
||||||
|
the Work.
|
||||||
+140
@@ -0,0 +1,140 @@
|
|||||||
|
# 简历
|
||||||
|
|
||||||
|
个人简历,A4,中文,两栏式,含圆形头像与分区条目。
|
||||||
|
|
||||||
|
## 编译
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd 简历
|
||||||
|
xelatex 简历.tex
|
||||||
|
xelatex 简历.tex % 跑两遍,目录与页码才正确
|
||||||
|
```
|
||||||
|
|
||||||
|
或仓库根:`bash build.sh 简历`(自动跑两遍)
|
||||||
|
|
||||||
|
## 文件
|
||||||
|
|
||||||
|
```
|
||||||
|
简历/
|
||||||
|
├── 简历.tex 主文件
|
||||||
|
├── awesome-source-cv.cls 文档类
|
||||||
|
├── section_XX_*.tex 各章节内容(14 个)
|
||||||
|
├── photo.jpg 头像
|
||||||
|
└── logos/ 单位标识
|
||||||
|
```
|
||||||
|
|
||||||
|
## 基本信息
|
||||||
|
|
||||||
|
```latex
|
||||||
|
\documentclass[localFont]{awesome-source-cv}
|
||||||
|
\input{../fonts.tex}
|
||||||
|
\usepackage{xeCJK}
|
||||||
|
|
||||||
|
\name{}{张远航} % 姓名,第一参数是西文名,中文留空
|
||||||
|
\photo{2.5cm}{photo} % 头像,photo.jpg
|
||||||
|
|
||||||
|
\socialinfo{
|
||||||
|
\smartphone{(+86) 138 0000 0000}
|
||||||
|
\email{yhzhang@ouc.edu.cn}
|
||||||
|
\emailO{yhzhang@example.net}\\
|
||||||
|
\homepage{https://example.net}
|
||||||
|
\github{yourname}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
| 命令 | 说明 |
|
||||||
|
|---|---|
|
||||||
|
| `\name{西文名}{中文名}` | 姓名,中文简历第一参数留空 |
|
||||||
|
| `\photo{宽度}{文件名}` | 头像,文件名不带扩展名 |
|
||||||
|
| `\socialinfo{...}` | 联系方式块 |
|
||||||
|
| `\smartphone{号码}` | 手机 |
|
||||||
|
| `\email{地址}` | 邮箱 |
|
||||||
|
| `\emailO{地址}` | 备用邮箱 |
|
||||||
|
| `\homepage{网址}` | 个人主页 |
|
||||||
|
| `\github{用户名}` | GitHub |
|
||||||
|
| `\linkedin{用户名}` | LinkedIn |
|
||||||
|
|
||||||
|
`\socialinfo` 内不要加结尾的 `\\`。不想要头像就删掉 `\photo` 整行。
|
||||||
|
|
||||||
|
## 各章节
|
||||||
|
|
||||||
|
正文按 `\input` 顺序组织,每章一个文件:
|
||||||
|
|
||||||
|
```latex
|
||||||
|
\begin{document}
|
||||||
|
\maketitle
|
||||||
|
|
||||||
|
\input{section_01_headline}
|
||||||
|
\input{section_02_work_experience}
|
||||||
|
\input{section_03_education}
|
||||||
|
\input{section_04_publications}
|
||||||
|
\input{section_05_patents}
|
||||||
|
\input{section_06_software}
|
||||||
|
\input{section_07_project}
|
||||||
|
\input{section_08_zhuanhua}
|
||||||
|
\input{section_09_jiaoyan}
|
||||||
|
\input{section_10_awards}
|
||||||
|
\input{section_interests}
|
||||||
|
\input{section_languages}
|
||||||
|
\input{section_skills}
|
||||||
|
\input{section_references}
|
||||||
|
\end{document}
|
||||||
|
```
|
||||||
|
|
||||||
|
| 文件 | 内容 |
|
||||||
|
|---|---|
|
||||||
|
| `section_01_headline` | 个人概述 |
|
||||||
|
| `section_02_work_experience` | 工作经历 |
|
||||||
|
| `section_03_education` | 教育经历 |
|
||||||
|
| `section_04_publications` | 学术论文 |
|
||||||
|
| `section_05_patents` | 发明专利 |
|
||||||
|
| `section_06_software` | 软件著作权 |
|
||||||
|
| `section_07_project` | 科研项目 |
|
||||||
|
| `section_08_zhuanhua` | 成果转化 |
|
||||||
|
| `section_09_jiaoyan` | 教研工作 |
|
||||||
|
| `section_10_awards` | 获奖 |
|
||||||
|
| `section_interests` | 兴趣爱好 |
|
||||||
|
| `section_languages` | 语言能力 |
|
||||||
|
| `section_skills` | 专业技能 |
|
||||||
|
| `section_references` | 推荐人 |
|
||||||
|
|
||||||
|
不需要的章节把 `\input` 那行注释掉即可。
|
||||||
|
|
||||||
|
## 章节写法
|
||||||
|
|
||||||
|
```latex
|
||||||
|
\sectionTitle{工作经历}{\faUniversity}
|
||||||
|
|
||||||
|
\begin{tabular}{rl}
|
||||||
|
\textsc{2021年12月 --至今} & \textbf{教授},信息科学与工程学部,中国海洋大学\\
|
||||||
|
\textsc{2016年09月 --2021年11月} & \textbf{副教授},信息科学与工程学部,中国海洋大学
|
||||||
|
\end{tabular}
|
||||||
|
```
|
||||||
|
|
||||||
|
- `\sectionTitle{标题}{图标}` — 章节标题,图标用 fontawesome
|
||||||
|
- 两列 `tabular`:左列时间(`\textsc` 小型大写),右列内容
|
||||||
|
- 时间用 `--` 排连接号,前后不加空格
|
||||||
|
|
||||||
|
常用 fontawesome 图标:
|
||||||
|
`\faUniversity`(学校)、`\faBriefcase`(工作)、`\faGraduationCap`(教育)、
|
||||||
|
`\faBook`(论文)、`\faCogs`(软著)、`\faFlask`(项目)、
|
||||||
|
`\faTrophy`(获奖)、`\faHeart`(兴趣)、`\faGlobe`(语言)。
|
||||||
|
|
||||||
|
## 换头像
|
||||||
|
|
||||||
|
替换 `photo.jpg`,或改 `\photo{2.5cm}{新文件名}`。图片要是方形,
|
||||||
|
会裁成圆形。
|
||||||
|
|
||||||
|
## 版式
|
||||||
|
|
||||||
|
```
|
||||||
|
A4,单页或多页
|
||||||
|
中文正文 OUC Serif,西文 Cochineal
|
||||||
|
左栏较窄(时间),右栏较宽(内容)
|
||||||
|
章节标题带图标与分隔线
|
||||||
|
头像为圆形,右上角
|
||||||
|
```
|
||||||
|
|
||||||
|
## 注意
|
||||||
|
|
||||||
|
示例内容为虚构数据,使用时全部替换。
|
||||||
@@ -0,0 +1,821 @@
|
|||||||
|
%% Copyright 2016 Christophe Roger
|
||||||
|
%
|
||||||
|
% Author:
|
||||||
|
% Christophe Roger (Darwiin)
|
||||||
|
%
|
||||||
|
% This work may be distributed and/or modified under the
|
||||||
|
% conditions of the LaTeX Project Public License, either version 1.3c
|
||||||
|
% of this license or (at your option) any later version.
|
||||||
|
% The latest version of this license is in
|
||||||
|
% http://www.latex-project.org/lppl.txt
|
||||||
|
% and version 1.3 or later is part of all distributions of LaTeX
|
||||||
|
% version 2005/12/01 or later.
|
||||||
|
%
|
||||||
|
% This work has the LPPL maintenance status `maintained'.
|
||||||
|
%
|
||||||
|
% The Current Maintainer of this work is M. C. Roger.
|
||||||
|
%
|
||||||
|
% This work consists of the files awesome-source-cv.cls
|
||||||
|
|
||||||
|
\ProvidesClass{awesome-source-cv}[2016/11/05 v1.6.1 Awesome Source CV Class]
|
||||||
|
|
||||||
|
\LoadClass[a4paper]{article}
|
||||||
|
|
||||||
|
\DeclareOption{green}{
|
||||||
|
\def\@green{green}
|
||||||
|
}
|
||||||
|
|
||||||
|
\DeclareOption{red}{
|
||||||
|
\def\@red{red}
|
||||||
|
}
|
||||||
|
|
||||||
|
\DeclareOption{indigo}{
|
||||||
|
\def\@indigo{indigo}
|
||||||
|
}
|
||||||
|
\DeclareOption{orange}{
|
||||||
|
\def\@orange{orange}
|
||||||
|
}
|
||||||
|
|
||||||
|
\DeclareOption{localFont}{
|
||||||
|
\def\@local{local}
|
||||||
|
}
|
||||||
|
|
||||||
|
\DeclareOption{alternative}{
|
||||||
|
\def\@alternative{alternate}
|
||||||
|
}
|
||||||
|
|
||||||
|
\ProcessOptions
|
||||||
|
|
||||||
|
% Dependences
|
||||||
|
%A Few Useful Packages
|
||||||
|
% ⚠️ 选项名用 french,不要用旧写法 frenchb。
|
||||||
|
% frenchb 是 babel 早期的法语方言名,两个名字在 TeX Live 2022 及更早
|
||||||
|
% 版本上等价;但 TeX Live 2025 的 babel 已把 frenchb 从「已知语言」
|
||||||
|
% 列表里移除,写旧名会报
|
||||||
|
% ! Package babel Error: Unknown option `frenchb'.
|
||||||
|
% 即使压住这条,还会进一步炸在 \begin{document} 处:
|
||||||
|
% ! Undefined control sequence.
|
||||||
|
% \__hook begindocument ...fter {\bbl@main@language }...
|
||||||
|
% 改用 french 在老版本上同样可用,是向前兼容的写法。
|
||||||
|
% (本模板正文是中文,babel 这里只影响西文连字与断词细节,
|
||||||
|
% 中文断行由 xeCJK 负责。)
|
||||||
|
\RequirePackage[french]{babel}
|
||||||
|
%\RequirePackage[utf8]{luainputenc} % luatex
|
||||||
|
\RequirePackage{fontspec} % for loading fonts
|
||||||
|
\RequirePackage{url,parskip} % other packages for formatting
|
||||||
|
\RequirePackage[usenames,dvipsnames]{xcolor}
|
||||||
|
\RequirePackage{fullpage}
|
||||||
|
\RequirePackage[margin=1.5cm]{geometry}
|
||||||
|
\RequirePackage{fontawesome}
|
||||||
|
\RequirePackage{hyperref}\hypersetup{hidelinks}
|
||||||
|
\RequirePackage{titlesec}
|
||||||
|
\RequirePackage{array}
|
||||||
|
\RequirePackage{enumitem}
|
||||||
|
\RequirePackage{longtable}
|
||||||
|
\RequirePackage{etoolbox}
|
||||||
|
\RequirePackage{tikz}
|
||||||
|
\RequirePackage[skins]{tcolorbox}
|
||||||
|
|
||||||
|
|
||||||
|
% \DeclareUnicodeCharacter{00E9}{\'{e}} %luatex
|
||||||
|
|
||||||
|
% Define default accent colors
|
||||||
|
%\definecolor{basecolor}{HTML}{000066} %BLUE
|
||||||
|
\definecolor{basecolor}{HTML}{0f4c81}
|
||||||
|
\ifundef{\@green} {
|
||||||
|
\ifundef{\@red} {
|
||||||
|
\ifundef{\@indigo}{
|
||||||
|
\ifundef{\@orange} {}
|
||||||
|
{ \definecolor{basecolor}{HTML}{e68a00} }
|
||||||
|
}
|
||||||
|
{ \definecolor{basecolor}{rgb}{0.2, 0.07, 0.48} }
|
||||||
|
}
|
||||||
|
{ \definecolor{basecolor}{HTML}{b30000} } %RED
|
||||||
|
}
|
||||||
|
{ \definecolor{basecolor}{rgb}{0.0, 0.62, 0.38} }
|
||||||
|
|
||||||
|
\definecolor{darkGrey}{HTML}{989898}
|
||||||
|
|
||||||
|
\colorlet{linkcolor}{basecolor}
|
||||||
|
\colorlet{accentcolor}{linkcolor!90}
|
||||||
|
\colorlet{symbolcolor}{linkcolor!85}
|
||||||
|
|
||||||
|
% Setup hyperref package, and colours for links
|
||||||
|
%\definecolor{linkcolour}{rgb}{0,0.2,0.6}
|
||||||
|
\hypersetup{breaklinks}
|
||||||
|
|
||||||
|
\pagestyle{empty} % non-numbered pages
|
||||||
|
%\font\fb=''[cmr10]'' % for use with \LaTeX command
|
||||||
|
|
||||||
|
% Setup CV sections
|
||||||
|
\titleformat{\section}{\Large\raggedright}{}{0em}{}[\titlerule]
|
||||||
|
\titlespacing{\section}{0pt}{2pt}{2pt}
|
||||||
|
|
||||||
|
% 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
|
||||||
|
%
|
||||||
|
% ⚠️ 原来是 >{\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}
|
||||||
|
|
||||||
|
% Setup fonts
|
||||||
|
\defaultfontfeatures{Mapping=tex-text}
|
||||||
|
%
|
||||||
|
|
||||||
|
%-------------------------------------------------------------------------------
|
||||||
|
% Configuration for fonts
|
||||||
|
%-------------------------------------------------------------------------------
|
||||||
|
% ⚠️⚠️ 本文件已被改写:字体**全部**取自仓库公共字体包 ../fonts.tex。
|
||||||
|
%
|
||||||
|
% 上游 awesom e-cv 的中文版原来这么配(共三处,都已删除):
|
||||||
|
% ① zh_cn-adobefonts_external.sty 里 \setCJKmainfont{AdobeSongStd-Light.otf}
|
||||||
|
% —— Adobe 宋/黑/楷/仿四款共 56 MB,商业授权,**不能随仓库分发**。
|
||||||
|
% 而且那份文件还拿 HarmonyOS Sans 去冒充 Bold/Italic/SmallCaps:
|
||||||
|
% BoldFont = HarmonyOS_Sans_SC_Regular.ttf
|
||||||
|
% ItalicFont = HarmonyOS_Sans_SC_Regular.ttf
|
||||||
|
% 等于"加粗=不变"、"斜体=不变",标题的层次全靠字号撑,是个将就做法。
|
||||||
|
% ② \setmainfont{SourceSansPro-Light}(localFont 分支)
|
||||||
|
% 9 个 .otf,SIL OFL 1.1 可用,但本仓库不打算为一份字体再带 4 MB。
|
||||||
|
% ③ \setfontfamily\FA[Path=fonts/]{FontAwesome}
|
||||||
|
% Path 指向本目录下不存在的 fonts/ —— 那份图标字体在 TeX Live 里。
|
||||||
|
%
|
||||||
|
% 现在的映射:
|
||||||
|
% 西文正文 Source Sans Pro Light → TeX Gyre Termes(本仓库自带)
|
||||||
|
% 中文正文 Adobe Song / HarmonyOS → OUC Serif(思源宋体子集,自带)
|
||||||
|
% 中文粗体 (原来=不变) → OUC Serif Bold(真粗体)
|
||||||
|
% 中文斜体 无 → OUC Kai(楷体代斜体,中文惯例)
|
||||||
|
% FontAwesome TeX Live 系统包 → 仓库 fonts/fontawesome/
|
||||||
|
%
|
||||||
|
% ⚠️ 字体文件本体在 ../fonts/ 下,由 ../fonts.tex 统一设置,
|
||||||
|
% **不要在本文档或 .tex 里再写 \setCJKmainfont / \setmainfont**。
|
||||||
|
% 下面只做"西文用哪一档"的局部调整。
|
||||||
|
%-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
% FontAwesome:图标字体已经放进仓库公共字体目录,
|
||||||
|
% ⚠️ 但**不要在这里重新声明 \FA** —— fontawesome.sty 自己在正文里就做了
|
||||||
|
% \newfontfamily{\FA}[Path=../fonts/fontawesome/]{FontAwesome.otf}
|
||||||
|
% 且它在 \RequirePackage{fontawesome} 时就执行(早于本 cls 的后面几句)。
|
||||||
|
% 这里再声明一次会报 "Font \FA already defined"(LaTeX3 的
|
||||||
|
% \NewDocumentCommand 语义),所以只留注释说明。
|
||||||
|
%
|
||||||
|
% 上游原来是 \setfontfamily\FA[Path=fonts/]{FontAwesome},
|
||||||
|
% Path 指向本目录下并不存在的 fonts/ —— 只能靠系统字体兜底。
|
||||||
|
% 现在路径写进 fontawesome.sty 了。
|
||||||
|
|
||||||
|
% 西文正文:上游用 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
|
||||||
|
%
|
||||||
|
% ⚠️ 这两个长度原来写死 14.8cm / 2.5cm,加起来 17.3cm,看着小于版心宽
|
||||||
|
% 18cm(A4 21cm − 2×1.5cm 边距)。但 longtable 每列还有 \tabcolsep
|
||||||
|
% 各占左右一侧(默认 6pt),两列共 4 个 \tabcolsep = 24pt ≈ 0.85cm,
|
||||||
|
% 于是实际占宽 18.15cm → 溢出 4.48pt,报
|
||||||
|
% Overfull \hbox (4.48311pt too wide) in alignment at lines 20--70
|
||||||
|
% 这种"算着够、实际差一点"的溢出,换字号/字体后会时有时无,很难查。
|
||||||
|
%
|
||||||
|
% 改法:不让它猜,直接用版心宽减去左列与列间距。
|
||||||
|
%
|
||||||
|
% ⚠️⚠️ 【必须在 \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\textwidth-\leftcolumn-4\tabcolsep-\arrayrulewidth\relax}%
|
||||||
|
}
|
||||||
|
|
||||||
|
% Font Awesome icons aliases
|
||||||
|
\newcommand{\mailSymbol}{\faEnvelope}
|
||||||
|
\newcommand{\mailSymbolO}{\faEnvelopeO}
|
||||||
|
\newcommand{\locationSymbol}{\faMapMarker}
|
||||||
|
\newcommand{\infoSymbol}{\faInfo}
|
||||||
|
\newcommand{\homeSymbol}{\faLink}
|
||||||
|
\newcommand{\weiboSymbol}{\faWeibo}
|
||||||
|
\newcommand{\linkedinSymbol}{\faLinkedin}
|
||||||
|
\newcommand{\mobileSymbol}{\faMobilePhone}
|
||||||
|
\newcommand{\githubSymbol}{\faGithub}
|
||||||
|
|
||||||
|
\newcommand\link[2]{\color{linkcolor}\href{#1}{#2}\color{Black} }
|
||||||
|
\newcommand\important[1]{\textbf #1}
|
||||||
|
|
||||||
|
% Create a tag
|
||||||
|
% Usage: \cvtag{<tag label>}
|
||||||
|
\newcommand{\cvtag}[1]{%
|
||||||
|
%\tikz[baseline]\node[anchor=base,draw=darkGrey!70,rounded corners=0.5ex,inner xsep=1ex,inner ysep =0.55ex,text height=1.3ex,text depth=.25ex]{#1};
|
||||||
|
\begin{tikzpicture}
|
||||||
|
\node[anchor=base,draw=darkGrey!70,rounded corners=0.5ex,inner xsep=1ex,inner ysep =0.4ex,text height=2ex,text depth=.25ex]{#1};
|
||||||
|
\end{tikzpicture}
|
||||||
|
}
|
||||||
|
|
||||||
|
% Create a chinese tag
|
||||||
|
% Usage: \cvtag{<tag label>}
|
||||||
|
\newcommand{\cvtagcn}[1]{%
|
||||||
|
%\tikz[baseline]\node[anchor=base,draw=darkGrey!70,rounded corners=0.5ex,inner xsep=1ex,inner ysep =0.55ex,text height=1.3ex,text depth=.25ex]{#1};
|
||||||
|
\begin{tikzpicture}
|
||||||
|
\node[anchor=base,draw=darkGrey!70,rounded corners=0.5ex,inner xsep=1ex,inner ysep =0.4ex,text height=2ex,text depth=.25ex]{#1};
|
||||||
|
\end{tikzpicture}
|
||||||
|
}
|
||||||
|
|
||||||
|
% Render author's name
|
||||||
|
% Usage: \user{<firstanme>}{<lastname>}
|
||||||
|
\newcommand\user[2]{\color{accentcolor}{\LARGE #1 \textbf{#2}}\color{Black}}
|
||||||
|
|
||||||
|
% Render a text with its symbol
|
||||||
|
% Usage; \socialtext{<icon>}{<label>}
|
||||||
|
\newcommand{\socialtext}[2]{\mbox{\textcolor{symbolcolor}{#1}\hspace{0.5em}#2\hspace{1em}}}
|
||||||
|
|
||||||
|
% Render a link with its symbol
|
||||||
|
% Usage; \sociallink{<icon>}{<label>}
|
||||||
|
%\newcommand{\sociallink}[3]{\mbox{\textcolor{symbolcolor}{#1}\hspace{0.5em}#2\hspace{1em}}}
|
||||||
|
\newcommand{\sociallink}[3]{\mbox{\textcolor{symbolcolor}{#1}\hspace{0.5em}\link{#2}{#3}\hspace{1em}}}
|
||||||
|
|
||||||
|
% Define author's name
|
||||||
|
% Usage: \name{<firstname>}{<lastname>}
|
||||||
|
% Usage: \firstname{<firstname>}
|
||||||
|
% Usage: \lastname{<lastname>}
|
||||||
|
% Usage: \familyname{<familyname>}
|
||||||
|
\newcommand*{\name}[2]{\def\@firstname{#1}\def\@lastname{#2}}
|
||||||
|
\newcommand*{\firstname}[1]{\def\@firstname{#1}}
|
||||||
|
\newcommand*{\lastname}[1]{\def\@lastname{#1}}
|
||||||
|
\newcommand*{\familyname}[1]{\def\@lastname{#1}}
|
||||||
|
\def\@familyname{\@lastname}
|
||||||
|
|
||||||
|
% Define author's tagline
|
||||||
|
% Usage: \tagline{<tag line>}
|
||||||
|
\newcommand*{\tagline}[1]{\def\@tagline{#1}}
|
||||||
|
|
||||||
|
% Define author's photo
|
||||||
|
% Usage \photo{<diameter>}{<photo>}
|
||||||
|
\newcommand{\photo}[2]{\def\@photo{#2}\def\@photodiameter{#1}}
|
||||||
|
|
||||||
|
%----------------------------------------------------------------------
|
||||||
|
% 校徽(可选,默认不印)
|
||||||
|
%
|
||||||
|
% 用法(导言区,\begin{document} 之前):
|
||||||
|
% \cvlogo{28mm} % 用仓库里带的横式彩色校徽
|
||||||
|
% \cvlogo{28mm}[ouc_logo_彩色] % 换成圆形校徽
|
||||||
|
% \cvlogo{28mm}[ouc_横式_海大红] % 换配色
|
||||||
|
% 不调用就完全不出现,版面与调用前逐字节一致。
|
||||||
|
%
|
||||||
|
% ⚠️ 本目录 logos/ 下**只放实际用到的那一个**(横式彩色,377KB)。
|
||||||
|
% 想换圆形或别的配色,从 ../科技报告/logos/ 复制过来即可,
|
||||||
|
% 那边有全部官方 VI 素材:
|
||||||
|
% ouc_logo_{彩色,海大红,海大蓝,天蓝,专金,墨黑}.png 圆形 1200×1200
|
||||||
|
% ouc_横式_{彩色,海大红,海大蓝,黑}.png 横式 2400×640
|
||||||
|
% (不预先全放进来,是因为每个 300~380KB,用不到就是纯占体积。)
|
||||||
|
%
|
||||||
|
% ⚠️ 导言区只**登记**参数,真正画图是在 \makecvheader 开头做的
|
||||||
|
% (见下面 \@makecvlogo)。原因:导言区不能产生任何内容,
|
||||||
|
% 直接在导言区画 tikzpicture 会报
|
||||||
|
% ! LaTeX Error: Missing \begin{document}.
|
||||||
|
%
|
||||||
|
% 定位:距纸左 10mm、距纸顶 6mm(相对【纸边】,不随页边距变)。
|
||||||
|
% 两个数值分别由 \cvlogox / \cvlogoy 控制,想在导言区微调就重设:
|
||||||
|
% \setlength{\cvlogox}{12mm}
|
||||||
|
% \setlength{\cvlogoy}{8mm}
|
||||||
|
%
|
||||||
|
% ⚠️ 为什么距顶是 6mm 而不是科技报告的 20mm:
|
||||||
|
% 简历页边距只有 15mm(科技报告是 27mm),抬头第一行「姓名」的墨迹顶
|
||||||
|
% 就在 48.8pt = 17.2mm。28mm 宽的横式 logo 高 7.06mm,若距顶 20mm
|
||||||
|
% 会直接压到姓名上,距顶 8mm 也只剩 6pt 间隙(2mm,视觉上贴着)。
|
||||||
|
% 实际6mm 时 logo 下沿在 13.1mm,仍在 15mm 版心边距以内,
|
||||||
|
% 距姓名顶有 11.6pt(4.1mm),是这块空间里最平衡的位置。
|
||||||
|
%
|
||||||
|
% ⚠️ 距纸左 10mm 已接近 A4 打印的裁切余量(一般 10~12mm),
|
||||||
|
% 不要再改小。同理距顶 6mm 也偏小 —— **屏幕阅读和普通办公打印没问题**
|
||||||
|
% (A4 纸本身不裁切),但若要专业印刷/装订,建议把 \cvlogoy 改成 8mm
|
||||||
|
% 以上,并接受 logo 与姓名靠得近一点。
|
||||||
|
%
|
||||||
|
% ⚠️⚠️ 为什么后面跟着 \vspace*{-17pt}:
|
||||||
|
% tikzpicture 即使全部内容都是 overlay,它本身仍是一个**占一行的盒子**,
|
||||||
|
% 插在 \makecvheader 前面会把姓名整体往下推 17pt(实际48.8 → 65.8)。
|
||||||
|
% \smash、\hbox to 0pt、\vbox to 0pt 三种写法都消不掉这一行
|
||||||
|
% (因为要断行就必须有 \par,有 \par 就有行高)。
|
||||||
|
% 直接用等量的负 \vspace 抵消,姓名回到 48.8pt,误差 0.0。
|
||||||
|
% ⚠️ 这个 17pt 与 logo 尺寸无关(18~30mm 五档实际姓名都是 48.8),
|
||||||
|
% 它是一行正文的高度。但若改了 \parskip 或正文字号,要重新量。
|
||||||
|
%----------------------------------------------------------------------
|
||||||
|
\newlength{\cvlogox}
|
||||||
|
\newlength{\cvlogoy}
|
||||||
|
\setlength{\cvlogox}{10mm}
|
||||||
|
\setlength{\cvlogoy}{6mm}
|
||||||
|
|
||||||
|
\newcommand{\cvlogo}[2][ouc_横式_彩色]{%
|
||||||
|
\def\@cvlogowidth{#2}%
|
||||||
|
\def\@cvlogofile{#1}%
|
||||||
|
}
|
||||||
|
% 内部命令:真正画 logo。未调用 \cvlogo 时为空操作。
|
||||||
|
\newcommand{\@makecvlogo}{%
|
||||||
|
\ifdefined\@cvlogofile
|
||||||
|
\begin{tikzpicture}[remember picture, overlay]
|
||||||
|
\node[anchor=north west, inner sep=0pt,
|
||||||
|
xshift=\cvlogox, yshift=-\cvlogoy]
|
||||||
|
at (current page.north west)
|
||||||
|
{\includegraphics[width=\@cvlogowidth]{logos/\@cvlogofile.png}};
|
||||||
|
\end{tikzpicture}%
|
||||||
|
\par\vspace*{-17pt}%
|
||||||
|
\fi
|
||||||
|
}
|
||||||
|
|
||||||
|
% Render author's address
|
||||||
|
% Usage: \address{<address>}
|
||||||
|
\newcommand*{\address}[1]{\socialtext{\locationSymbol}{#1}}
|
||||||
|
|
||||||
|
% Render author's infos
|
||||||
|
% Usage: \infos{<infos>}
|
||||||
|
\newcommand*{\infos}[1]{\socialtext{\infoSymbol}{#1}}
|
||||||
|
|
||||||
|
% Render author's homepage
|
||||||
|
% Usage: \homepage{<homepage>}
|
||||||
|
\newcommand*{\homepage}[1]{\sociallink{\homeSymbol}{http://#1}{#1}}
|
||||||
|
|
||||||
|
% Render author's homepage
|
||||||
|
% Usage: \weibo{<weibo>}
|
||||||
|
\newcommand*{\weibo}[1]{\sociallink{\weiboSymbol}{http://www.weibo.com/#1}{weibo.com/#1}}
|
||||||
|
|
||||||
|
|
||||||
|
% Render author's linked-in (optional)
|
||||||
|
% Usage: \linkedin{<linked-in-nick>}
|
||||||
|
\newcommand*{\linkedin}[1]{\sociallink{\linkedinSymbol}{http://www.linkedin.com/in/#1}{linkedin.com/in/#1}}
|
||||||
|
|
||||||
|
% Render author's viadeo(optional)
|
||||||
|
% Usage: \viadeo{<viadeo-nick>}
|
||||||
|
\newcommand*{\viadeo}[1]{\sociallink{\viadeoSymbol}{http://www.viadeo.com/fr/profile/#1}{viadeo.com/fr/profile/#1}}
|
||||||
|
|
||||||
|
% Render author's github (optional)
|
||||||
|
% Usage: \github{<github-nick>}
|
||||||
|
\newcommand*{\github}[1]{\sociallink{\githubSymbol}{https://www.github.com/#1}{github.com/#1}} % Github icon + URL
|
||||||
|
|
||||||
|
% Render author's email (optional)
|
||||||
|
% Usage: \email{<email adress>}
|
||||||
|
\newcommand*{\email}[1]{\sociallink{\mailSymbol}{mailto:#1}{#1}}
|
||||||
|
\newcommand*{\emailO}[1]{\sociallink{\mailSymbolO}{mailto:#1}{#1}}
|
||||||
|
|
||||||
|
% Render author's mobile phone (optional)
|
||||||
|
% Usage: \smartphone{<mobile phone number>}
|
||||||
|
\newcommand*\smartphone[1]{\socialtext{\mobileSymbol}{#1}}
|
||||||
|
|
||||||
|
% Render author's tagline
|
||||||
|
\newcommand\resumetitle[1]{
|
||||||
|
\ifundef{\@
|
||||||
|
}{
|
||||||
|
\par{
|
||||||
|
\bigskip\center{\Large \color{accentcolor}\textsc{#1}\color{Black}}\par
|
||||||
|
}
|
||||||
|
\bigskip
|
||||||
|
}{
|
||||||
|
% \color{accentcolor}\textsc{\large{#1}}\color{black}
|
||||||
|
\par{
|
||||||
|
\bigskip\center{\Large \color{accentcolor}\textsc{#1}\color{Black}}\par
|
||||||
|
}
|
||||||
|
\bigskip
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
% Define social entries to print in header
|
||||||
|
\newcommand{\socialinfo}[1]{\def\@socialinfo{#1}}
|
||||||
|
|
||||||
|
|
||||||
|
% Render CV header
|
||||||
|
% Needs \@firstname, \@lastname and \@tagline to be defined
|
||||||
|
\newcommand*{\makecvheader}{
|
||||||
|
\@makecvlogo% 校徽(未调用 \cvlogo 时为空操作,不占位)
|
||||||
|
\ifundef{\@alternative}{
|
||||||
|
|
||||||
|
\ifundef{\@photodiameter}{
|
||||||
|
\begin{minipage}{\linewidth}
|
||||||
|
}{
|
||||||
|
\begin{minipage}{\dimexpr\linewidth-\@photodiameter-2em}
|
||||||
|
}
|
||||||
|
% ⚠️ 原文是 \vspace*{0.3cm}\\ —— \vspace 后面紧跟 \\ 会在
|
||||||
|
% 换行前多出一个**空的 hbox**,日志每条都刷
|
||||||
|
% Underfull \hbox (badness 10000) in paragraph at lines 75--75
|
||||||
|
% 改用 \\[0.3cm](换行并附垂直间距,LaTeX 标准写法),
|
||||||
|
% 间距效果完全一样,但不产生空盒。下面的 \smallskip\\
|
||||||
|
% 同理改成 \\[\smallskipamount]。
|
||||||
|
\color{accentcolor}\user{\@firstname}{\@lastname}\color{black}\\[0.3cm]
|
||||||
|
\small{\@socialinfo}
|
||||||
|
\end{minipage}
|
||||||
|
\ifdef{\@photodiameter}{
|
||||||
|
\begin{minipage}{\@photodiameter}
|
||||||
|
\begin{tikzpicture}%
|
||||||
|
\node[circle, text=white, minimum size=2.5cm,
|
||||||
|
path picture={\node at (path picture bounding box.center){
|
||||||
|
\includegraphics[width=2.5cm]{\@photo}
|
||||||
|
};
|
||||||
|
}]{ };
|
||||||
|
\end{tikzpicture}
|
||||||
|
\end{minipage}
|
||||||
|
}{}
|
||||||
|
\resumetitle{\@tagline}
|
||||||
|
}{
|
||||||
|
\ifundef{\@photodiameter}{
|
||||||
|
\begin{minipage}{\linewidth}
|
||||||
|
}{
|
||||||
|
\begin{minipage} {\dimexpr\linewidth-\@photodiameter-2em}
|
||||||
|
}
|
||||||
|
\user{\@firstname}{\@lastname}\\[0.3cm]
|
||||||
|
\resumetitle{\@tagline}
|
||||||
|
\\[\smallskipamount]
|
||||||
|
\small{\@socialinfo}
|
||||||
|
\end{minipage}
|
||||||
|
\ifdef{\@photodiameter}{
|
||||||
|
\begin{minipage}{\@photodiameter}
|
||||||
|
\begin{tikzpicture}%
|
||||||
|
\node[circle, text=white, minimum size=2.5cm,
|
||||||
|
path picture={\node at (path picture bounding box.center){
|
||||||
|
\includegraphics[width=2.5cm]{\@photo}
|
||||||
|
};
|
||||||
|
}]{ };
|
||||||
|
\end{tikzpicture}
|
||||||
|
\end{minipage}
|
||||||
|
% \begin{minipage}{\@photodiameter}
|
||||||
|
% \tikz\path[fill overzoom image={\@photo}]circle[radius=0.5\linewidth];
|
||||||
|
% \end{minipage}
|
||||||
|
|
||||||
|
}{}
|
||||||
|
\bigskip
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
% Resume part title definition
|
||||||
|
\newcommand\sectionTitle[2]{\section{\texorpdfstring{\color{accentcolor}#2\enspace \textbf{#1}}{#1}}}
|
||||||
|
|
||||||
|
% Define a new column type for the scholarship environment
|
||||||
|
\newcolumntype{Y}{>{\raggedleft}p{\leftcolumn}}
|
||||||
|
|
||||||
|
% Define the 'scholarship' environment
|
||||||
|
\newenvironment{scholarship}{%
|
||||||
|
\begin{tabular}{Y p{\rightcolumnlength}}
|
||||||
|
}{%
|
||||||
|
\end{tabular}
|
||||||
|
}
|
||||||
|
|
||||||
|
% Render a scholarshipentry in the scolarship environment
|
||||||
|
% Usage: \scholarshipentry{<date>}{<description>}
|
||||||
|
\newcommand\scholarshipentry[2]{
|
||||||
|
#1 & #2 \\
|
||||||
|
}
|
||||||
|
|
||||||
|
% Define the 'skills' environment
|
||||||
|
\newenvironment{skills}{%
|
||||||
|
\begin{longtable}{R{\leftcolumn}p{\rightcolumnlength}}
|
||||||
|
}{%
|
||||||
|
\end{longtable}
|
||||||
|
}
|
||||||
|
|
||||||
|
% Render a skill in the skills environment
|
||||||
|
% Usage: \skill{<skill>}{<level>}
|
||||||
|
\newcommand\skill[2]{
|
||||||
|
\textsc{#1} & \foreach \x in {1,...,5}{{\color{accentcolor!80} \ifnumgreater{\x}{#2}{\faCircleO}{\faCircle}}\enspace }
|
||||||
|
}
|
||||||
|
|
||||||
|
\newcolumntype{E}{>{\raggedright\arraybackslash}p{\rightcolumnlength}}
|
||||||
|
|
||||||
|
% Define the 'experiences' environment
|
||||||
|
\newenvironment{experiences}{%
|
||||||
|
\begin{longtable}{R{\leftcolumn}|E}
|
||||||
|
}{%
|
||||||
|
\end{longtable}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
% Render an experience in the experiences environment
|
||||||
|
% Usage:
|
||||||
|
% \tags {<Technology list>}
|
||||||
|
|
||||||
|
\newcommand\tags[1]{
|
||||||
|
\foreach \n in {#1}{\cvtagcn{\n}}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
% Render an experience in the experiences environment
|
||||||
|
% Usage:
|
||||||
|
% \experience
|
||||||
|
% {<End date>} {<Title>}{<Enterprise>}{<Country>}
|
||||||
|
% {<Start date} {
|
||||||
|
% <Experience description (Could be a list)>
|
||||||
|
% }
|
||||||
|
% {<Technology list>}
|
||||||
|
\newcommand\experience[7]{
|
||||||
|
\textsc{#1} & \textsc{#2, #3, #4} \\*
|
||||||
|
\textsc{#5} & \begin{minipage}[t]{\rightcolumnlength}
|
||||||
|
#6
|
||||||
|
\end{minipage} \\*
|
||||||
|
& \footnotesize{\foreach \n in {#7}{\cvtag{\n}}} \\
|
||||||
|
}
|
||||||
|
|
||||||
|
% Render a consultant experience in the experiences environment
|
||||||
|
% Usage:
|
||||||
|
% \consultantexperience
|
||||||
|
% {<End date>} {<Consultant title>}{<Consulting Enterprise>}{<Country>}
|
||||||
|
% {<Start date} {<Client title>}{<Client business unit>}
|
||||||
|
% {
|
||||||
|
% <Experience description (Could be a list)>
|
||||||
|
% }
|
||||||
|
% {<Technology list>}
|
||||||
|
\newcommand\consultantexperience[9]{
|
||||||
|
\textsc{#1} & \textsc{#2, #3, #4} \\*
|
||||||
|
\textsc{#5} & \emph{#6} pour #7 \\*
|
||||||
|
& \begin{minipage}[t]{\rightcolumnlength}
|
||||||
|
#8
|
||||||
|
\end{minipage} \\*
|
||||||
|
& \footnotesize{\foreach \n in {#9}{\cvtag{\n}}} \\
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
\newcommand\emptySeparator{\multicolumn{2}{c}{}\\}
|
||||||
|
|
||||||
|
%======================================================================
|
||||||
|
% 成果统计:让概述里的数字自动来自后面章节的条目
|
||||||
|
%
|
||||||
|
% 问题:简历第一段概述通常写「发表论文 40 余篇、授权专利 12 项、成果转化
|
||||||
|
% 3 项……」。这些数字若手写,每增删一条论文就得回头改概述,极易漏改。
|
||||||
|
%
|
||||||
|
% 思路:正文里计数,概述用 \cvnum 取数。**列几条就算几条**,不去猜总数——
|
||||||
|
% 你不列出来的成果本来也不该出现在概述里。
|
||||||
|
%
|
||||||
|
% 两种写法,按「一条算几类」选:
|
||||||
|
%
|
||||||
|
% 【全自动】cvlist 环境 —— 一条 = 一个成果时用,**条目里什么都不用写**
|
||||||
|
% \begin{cvlist}{软著}
|
||||||
|
% \item 某某系统...登记号...
|
||||||
|
% \item 另一个系统...
|
||||||
|
% \end{cvlist}
|
||||||
|
% 每多一个 \item 自动 +1。增删条目完全不用管标记。
|
||||||
|
% 目前用于:软著(section_06)、成果转化(section_08)、教研(section_09)。
|
||||||
|
%
|
||||||
|
% 【半自动】逐条标记 —— 一条要算进多个类别时用
|
||||||
|
% \cvmark{类别} 只计数,不显示(专利、科研项目用)
|
||||||
|
% \cvtagcount{类别} 显示加粗文字 + 计数(论文的 SCI/EI/核心用)
|
||||||
|
% 专利一条要同时算「专利」和「第一发明人」,项目要同时算
|
||||||
|
% 「科研项目」和「主持/负责」,cvlist 一次只能管一类,故用标记。
|
||||||
|
%
|
||||||
|
% 【概述取数】两种写法统一:
|
||||||
|
% \cvnum{类别} 单类
|
||||||
|
% \cvnum*{A,B} 多类求和(英文逗号)
|
||||||
|
% 空类别返回 0,不会出现 ??,所以可以先写 \cvnum{EI} 再加标记。
|
||||||
|
% 类别名随用随建,不需要预先注册。
|
||||||
|
%
|
||||||
|
% ⚠️ 为什么用独立数据文件而不是 LaTeX 的 aux:
|
||||||
|
% 实际中文键经 aux 往返后 \ifcsname 全部匹配不上(xeCJK 把汉字设为
|
||||||
|
% 活动字符,键的 token 形态与写入时不一致;ASCII 键正常,中文键失效)。
|
||||||
|
% 故改用独立文件 \jobname.cvnum,导言区末尾 \input,键原样保留。
|
||||||
|
%
|
||||||
|
% ⚠️ 必须编译两遍(或直接用 latexmk):
|
||||||
|
% 第一遍边累加边写 \jobname.cvnum,此时概述读到的是**上一遍**的值,
|
||||||
|
% 首次编译会显示 0;第二遍才是正确数字。日志末尾有 CVSTATS 一行提示。
|
||||||
|
%
|
||||||
|
% ⚠️ \jobname.cvnum 是**生成文件**,不要手改、不要提交 git(已在
|
||||||
|
% .gitignore 里挡住)。删掉它只会让数字从 0 重新算一遍,下一遍即恢复。
|
||||||
|
%
|
||||||
|
% ⚠️ 类别名限制:
|
||||||
|
% · 不要含英文逗号(, 是 \cvnum* 的分隔符)
|
||||||
|
% · 不要含 @ % # \ { } 这些特殊字符
|
||||||
|
% · 中文、英文、汉字混排都可以
|
||||||
|
%======================================================================
|
||||||
|
\makeatletter
|
||||||
|
|
||||||
|
% ---- 数据文件 ------------------------------------------------------
|
||||||
|
\newwrite\cv@statsout
|
||||||
|
|
||||||
|
% 读:导言区末尾把上一遍写入的数字读进来。
|
||||||
|
% 此时正文尚未开始,不会和本遍的累加互相干扰。
|
||||||
|
\AtBeginDocument{\InputIfFileExists{\jobname.cvnum}{}{}}
|
||||||
|
|
||||||
|
% ---- 内部:类别 -> 计数器名 ----------------------------------------
|
||||||
|
% 累加值存在 \cvacc@<类别>(TeX 整数寄存器,不用 LaTeX counter,
|
||||||
|
% 既省事又避开 \the\csname...\endcsname 的展开陷阱)。
|
||||||
|
% 显示值存在 \cvnum@<类别>(\def 出来的宏,内容就是数字字符串)。
|
||||||
|
\newcommand\cv@accname[1]{cvacc@#1}
|
||||||
|
|
||||||
|
% 保证某类别的累加器存在
|
||||||
|
\newcommand\cv@ensureacc[1]{%
|
||||||
|
\@ifundefined{\cv@accname{#1}}%
|
||||||
|
{\expandafter\newcount\csname\cv@accname{#1}\endcsname}%
|
||||||
|
{}%
|
||||||
|
}
|
||||||
|
|
||||||
|
% ---- 标记 ----------------------------------------------------------
|
||||||
|
% \cvmark{<类别>}:把该类别的累加器 +1,无可见输出。
|
||||||
|
\newcommand\cvmark[1]{%
|
||||||
|
\cv@ensureacc{#1}%
|
||||||
|
\global\advance\csname\cv@accname{#1}\endcsname\@ne
|
||||||
|
% 顺便登记该类别的名字,收尾时按登记顺序写文件
|
||||||
|
\@ifundefined{cv@seen@\detokenize{#1}}%
|
||||||
|
{\expandafter\gdef\csname cv@seen@\detokenize{#1}\endcsname{1}%
|
||||||
|
\g@addto@macro\cv@taglist{\cv@writeone{#1}}}%
|
||||||
|
{}%
|
||||||
|
}
|
||||||
|
|
||||||
|
% ---- 自动计数列表环境:cvlist --------------------------------------
|
||||||
|
% \begin{cvlist}{<类别>} ... \end{cvlist}
|
||||||
|
%
|
||||||
|
% 进入环境后,**每个 \item 自动 +1**,不需要在条目里写 \cvmark。
|
||||||
|
% 这是最省事也最不容易漏的方式:增删条目完全不用管标记。
|
||||||
|
%
|
||||||
|
% 适用于「一条就是一个成果、章节条目数就是总数」的章节:
|
||||||
|
% 软件著作权、成果转化、教研项目、专利(见下)、奖励……
|
||||||
|
% 不适用于「一条里含多个类别」的场景(比如论文一条要同时算 SCI 和总篇数),
|
||||||
|
% 那种仍用 \cvtagcount / \cvmark 逐条标。
|
||||||
|
%
|
||||||
|
% 用法:
|
||||||
|
% \begin{cvlist}{软著}
|
||||||
|
% \item 某系统...登记号...
|
||||||
|
% \item 另一个系统...
|
||||||
|
% \end{cvlist}
|
||||||
|
% 概述里写 \cvnum{软著} → 2
|
||||||
|
%
|
||||||
|
% ⚠️ 环境内部就是普通 itemize,版式完全不变(\begin{itemize} 包在里面)。
|
||||||
|
% ⚠️ 不能在 cvlist 里再嵌套 itemize 写子项——子项的 \item 也会被算进去。
|
||||||
|
% 需要子项就用普通 itemize + 手写 \cvmark。
|
||||||
|
\newenvironment{cvlist}[1]{%
|
||||||
|
\cvlistcat{#1}%
|
||||||
|
\begin{itemize}%
|
||||||
|
}{%
|
||||||
|
\end{itemize}%
|
||||||
|
}
|
||||||
|
|
||||||
|
% 记录当前 cvlist 的类别;\item 被重定义成「先计数再走原 \item」
|
||||||
|
% ⚠️ \cvmark 内部用 \detokenize 处理类别名,所以必须先把 \cv@listcat
|
||||||
|
% **展开成实际文字**再传进去;否则写进 .cvnum 的是字面串 "\cv@listcat"。
|
||||||
|
\newcommand\cvlistcat[1]{%
|
||||||
|
\def\cv@listcat{#1}%
|
||||||
|
\let\cv@origitem\item
|
||||||
|
\renewcommand\item{\expandafter\cvmark\expandafter{\cv@listcat}\cv@origitem}%
|
||||||
|
}
|
||||||
|
|
||||||
|
% ---- 输出 ----------------------------------------------------------
|
||||||
|
% \cvnum{SCI} 单类取数
|
||||||
|
% \cvnum*{SCI,EI} 多类求和
|
||||||
|
\newcommand\cvnum{\@ifstar\cv@numsum\cv@numone}
|
||||||
|
|
||||||
|
% ---- 带计数的标签:显示 + 计数一步完成 ------------------------------
|
||||||
|
% \cvtagcount{<显示文字>}[<类别>]
|
||||||
|
% 显示「显示文字」(与正文同号加粗,和原来的 \textbf{SCI} 完全一样),
|
||||||
|
% 同时给类别 +1。省略类别时用显示文字本身当类别。
|
||||||
|
%
|
||||||
|
% 为什么需要它:论文的收录类型本来就写成 \textbf{SCI} 显示在条目末尾,
|
||||||
|
% 若再单独写一个 \cvmark{SCI},一是啰嗦,二是迟早会漏标。
|
||||||
|
% 用 \cvtagcount{SCI} 一次到位,显示与计数永远同步。
|
||||||
|
%
|
||||||
|
% 用法:
|
||||||
|
% \cvtagcount{SCI} % 显示 SCI,类别也叫 SCI
|
||||||
|
% \cvtagcount{核心}[中文核心] % 显示「核心」,类别记为「中文核心」
|
||||||
|
\newcommand\cvtagcount[2][\relax]{%
|
||||||
|
\textbf{#2}%
|
||||||
|
\ifx\relax#1\relax\cvmark{#2}\else\cvmark{#1}\fi}
|
||||||
|
|
||||||
|
\newcommand\cv@numone[1]{%
|
||||||
|
\@ifundefined{cvnum@#1}{0}{\csname cvnum@#1\endcsname}}
|
||||||
|
|
||||||
|
\newcommand\cv@numsum[1]{%
|
||||||
|
\begingroup
|
||||||
|
\count@\z@
|
||||||
|
\@for\cv@k:=#1\do{%
|
||||||
|
\@ifundefined{cvnum@\cv@k}{}{\advance\count@\csname cvnum@\cv@k\endcsname\relax}%
|
||||||
|
}%
|
||||||
|
\the\count@
|
||||||
|
\endgroup}
|
||||||
|
|
||||||
|
% ---- 收尾:写数据文件 ----------------------------------------------
|
||||||
|
% 用独立的 write 流,与 aux 完全无关,因此不受 aux 读入时机影响。
|
||||||
|
\newcommand\cv@taglist{}
|
||||||
|
|
||||||
|
\newcommand\cv@writeone[1]{%
|
||||||
|
\immediate\write\cv@statsout{%
|
||||||
|
\string\cvSetNum{\detokenize{#1}}{\the\csname\cv@accname{#1}\endcsname}}%
|
||||||
|
}
|
||||||
|
|
||||||
|
\AtEndDocument{%
|
||||||
|
\immediate\openout\cv@statsout=\jobname.cvnum\relax
|
||||||
|
\cv@taglist
|
||||||
|
\immediate\closeout\cv@statsout
|
||||||
|
% 日志提示:本遍写入了多少类
|
||||||
|
\typeout{CVSTATS: 已写入 \jobname.cvnum(若概述数字为 0,请再编译一遍)}%
|
||||||
|
}
|
||||||
|
|
||||||
|
% 数据文件里调用的设置命令。
|
||||||
|
% ⚠️ 不能含 @:读回时若 @ 不是字母,命令名会被拆断。
|
||||||
|
\newcommand\cvSetNum[2]{%
|
||||||
|
\expandafter\def\csname cvnum@#1\endcsname{#2}}
|
||||||
|
|
||||||
|
\makeatother
|
||||||
@@ -0,0 +1,88 @@
|
|||||||
|
%% start of file `fontawesome.sty'.
|
||||||
|
%% Copyright 2013-2016 Xavier Danaux (xdanaux@gmail.com).
|
||||||
|
%
|
||||||
|
% This work may be distributed and/or modified under the
|
||||||
|
% conditions of the LaTeX Project Public License version 1.3c,
|
||||||
|
% available at http://www.latex-project.org/lppl/.
|
||||||
|
|
||||||
|
|
||||||
|
%-------------------------------------------------------------------------------
|
||||||
|
% identification
|
||||||
|
%-------------------------------------------------------------------------------
|
||||||
|
\NeedsTeXFormat{LaTeX2e}
|
||||||
|
\ProvidesPackage{fontawesome}[2016/05/15 v4.6.3.1 font awesome icons]
|
||||||
|
|
||||||
|
|
||||||
|
%-------------------------------------------------------------------------------
|
||||||
|
% requirements
|
||||||
|
%-------------------------------------------------------------------------------
|
||||||
|
\RequirePackage{ifxetex,ifluatex}
|
||||||
|
\newif\iffontawesome@otf\fontawesome@otffalse
|
||||||
|
\ifxetex
|
||||||
|
\fontawesome@otftrue
|
||||||
|
\else
|
||||||
|
\ifluatex
|
||||||
|
\fontawesome@otftrue\fi\fi
|
||||||
|
|
||||||
|
|
||||||
|
%-------------------------------------------------------------------------------
|
||||||
|
% generic implementation
|
||||||
|
%-------------------------------------------------------------------------------
|
||||||
|
% generic command to display an icon by its name
|
||||||
|
\newcommand*{\faicon}[1]{%
|
||||||
|
{\csname faicon@#1\endcsname}}
|
||||||
|
|
||||||
|
% generic icon commands and aliases
|
||||||
|
\input{fontawesomesymbols-generic.tex}
|
||||||
|
|
||||||
|
%-------------------------------------------------------------------------------
|
||||||
|
% xe- and lualatex implementation
|
||||||
|
%-------------------------------------------------------------------------------
|
||||||
|
\iffontawesome@otf
|
||||||
|
\usepackage{fontspec}
|
||||||
|
|
||||||
|
% definition of \FA as a shortcut to load the Font Awesome font
|
||||||
|
%
|
||||||
|
% ⚠️ 本行已改(原为 \newfontfamily{\FA}{FontAwesome})。
|
||||||
|
% 原写法按**字体名**去找系统字体,只在装过 fontawesome 宏包+字体的
|
||||||
|
% TeX 发行版里成立;本仓库要求"字体只有一份来源",所以显式给路径。
|
||||||
|
% Path 相对**编译时的工作目录**,也就是本模板目录(简历/)。
|
||||||
|
% 字体文件:../fonts/fontawesome/FontAwesome.otf
|
||||||
|
%
|
||||||
|
% ⚠️ 是 ../fonts 不是 ../../fonts。模板目录与 fonts/ 同在仓库根下,
|
||||||
|
% 只隔一层。写成 ../../ 时 fontspec 报的错是
|
||||||
|
% Package fontspec Error: The font "FontAwesome" cannot be found.
|
||||||
|
% 看起来像"字体名不对",实际是路径根本不存在 —— 排查时别被
|
||||||
|
% 错误信息误导,先 ls 一下路径。
|
||||||
|
\newfontfamily{\FA}[Path=../fonts/fontawesome/,Extension=.otf]{FontAwesome}
|
||||||
|
|
||||||
|
% icon-specific commands
|
||||||
|
\input{fontawesomesymbols-xeluatex.tex}
|
||||||
|
|
||||||
|
%-------------------------------------------------------------------------------
|
||||||
|
% (pdf)latex implementation
|
||||||
|
%-------------------------------------------------------------------------------
|
||||||
|
\else
|
||||||
|
% definition of \FA... as a shortcut to load the Font Awesome font
|
||||||
|
\DeclareRobustCommand\FAone{\fontencoding{U}\fontfamily{fontawesomeone}\selectfont}
|
||||||
|
\DeclareRobustCommand\FAtwo{\fontencoding{U}\fontfamily{fontawesometwo}\selectfont}
|
||||||
|
\DeclareRobustCommand\FAthree{\fontencoding{U}\fontfamily{fontawesomethree}\selectfont}
|
||||||
|
|
||||||
|
% icon-specific commands
|
||||||
|
\input{fontawesomesymbols-pdftex.tex}
|
||||||
|
|
||||||
|
\fi
|
||||||
|
|
||||||
|
%-------------------------------------------------------------------------------
|
||||||
|
% fix for FontAwesome icon names containing numerals
|
||||||
|
%-------------------------------------------------------------------------------
|
||||||
|
\renewcommand{\faHourglass}[1][]{%
|
||||||
|
\faicon{hourglass\if\relax\detokenize{#1}\relax\else-#1\fi}}
|
||||||
|
\renewcommand{\faBattery}[1][4]{%
|
||||||
|
\faicon{battery-#1}}
|
||||||
|
|
||||||
|
|
||||||
|
\endinput
|
||||||
|
|
||||||
|
|
||||||
|
%% end of file `fontawesome.sty'.
|
||||||
@@ -0,0 +1,731 @@
|
|||||||
|
\def\faGlass{\faicon{glass}}
|
||||||
|
\def\faMusic{\faicon{music}}
|
||||||
|
\def\faSearch{\faicon{search}}
|
||||||
|
\def\faEnvelopeO{\faicon{envelope-o}}
|
||||||
|
\def\faHeart{\faicon{heart}}
|
||||||
|
\def\faStar{\faicon{star}}
|
||||||
|
\def\faStarO{\faicon{star-o}}
|
||||||
|
\def\faUser{\faicon{user}}
|
||||||
|
\def\faFilm{\faicon{film}}
|
||||||
|
\def\faThLarge{\faicon{th-large}}
|
||||||
|
\def\faTh{\faicon{th}}
|
||||||
|
\def\faThList{\faicon{th-list}}
|
||||||
|
\def\faCheck{\faicon{check}}
|
||||||
|
\def\faTimes{\faicon{times}}
|
||||||
|
\def\faSearchPlus{\faicon{search-plus}}
|
||||||
|
\def\faSearchMinus{\faicon{search-minus}}
|
||||||
|
\def\faPowerOff{\faicon{power-off}}
|
||||||
|
\def\faSignal{\faicon{signal}}
|
||||||
|
\def\faCog{\faicon{cog}}
|
||||||
|
\def\faTrashO{\faicon{trash-o}}
|
||||||
|
\def\faHome{\faicon{home}}
|
||||||
|
\def\faFileO{\faicon{file-o}}
|
||||||
|
\def\faClockO{\faicon{clock-o}}
|
||||||
|
\def\faRoad{\faicon{road}}
|
||||||
|
\def\faDownload{\faicon{download}}
|
||||||
|
\def\faArrowCircleODown{\faicon{arrow-circle-o-down}}
|
||||||
|
\def\faArrowCircleOUp{\faicon{arrow-circle-o-up}}
|
||||||
|
\def\faInbox{\faicon{inbox}}
|
||||||
|
\def\faPlayCircleO{\faicon{play-circle-o}}
|
||||||
|
\def\faRepeat{\faicon{repeat}}
|
||||||
|
\def\faRefresh{\faicon{refresh}}
|
||||||
|
\def\faListAlt{\faicon{list-alt}}
|
||||||
|
\def\faLock{\faicon{lock}}
|
||||||
|
\def\faFlag{\faicon{flag}}
|
||||||
|
\def\faHeadphones{\faicon{headphones}}
|
||||||
|
\def\faVolumeOff{\faicon{volume-off}}
|
||||||
|
\def\faVolumeDown{\faicon{volume-down}}
|
||||||
|
\def\faVolumeUp{\faicon{volume-up}}
|
||||||
|
\def\faQrcode{\faicon{qrcode}}
|
||||||
|
\def\faBarcode{\faicon{barcode}}
|
||||||
|
\def\faTag{\faicon{tag}}
|
||||||
|
\def\faTags{\faicon{tags}}
|
||||||
|
\def\faBook{\faicon{book}}
|
||||||
|
\def\faBookmark{\faicon{bookmark}}
|
||||||
|
\def\faPrint{\faicon{print}}
|
||||||
|
\def\faCamera{\faicon{camera}}
|
||||||
|
\def\faFont{\faicon{font}}
|
||||||
|
\def\faBold{\faicon{bold}}
|
||||||
|
\def\faItalic{\faicon{italic}}
|
||||||
|
\def\faTextHeight{\faicon{text-height}}
|
||||||
|
\def\faTextWidth{\faicon{text-width}}
|
||||||
|
\def\faAlignLeft{\faicon{align-left}}
|
||||||
|
\def\faAlignCenter{\faicon{align-center}}
|
||||||
|
\def\faAlignRight{\faicon{align-right}}
|
||||||
|
\def\faAlignJustify{\faicon{align-justify}}
|
||||||
|
\def\faList{\faicon{list}}
|
||||||
|
\def\faOutdent{\faicon{outdent}}
|
||||||
|
\def\faIndent{\faicon{indent}}
|
||||||
|
\def\faVideoCamera{\faicon{video-camera}}
|
||||||
|
\def\faPictureO{\faicon{picture-o}}
|
||||||
|
\def\faPencil{\faicon{pencil}}
|
||||||
|
\def\faMapMarker{\faicon{map-marker}}
|
||||||
|
\def\faAdjust{\faicon{adjust}}
|
||||||
|
\def\faTint{\faicon{tint}}
|
||||||
|
\def\faPencilSquareO{\faicon{pencil-square-o}}
|
||||||
|
\def\faShareSquareO{\faicon{share-square-o}}
|
||||||
|
\def\faCheckSquareO{\faicon{check-square-o}}
|
||||||
|
\def\faArrows{\faicon{arrows}}
|
||||||
|
\def\faStepBackward{\faicon{step-backward}}
|
||||||
|
\def\faFastBackward{\faicon{fast-backward}}
|
||||||
|
\def\faBackward{\faicon{backward}}
|
||||||
|
\def\faPlay{\faicon{play}}
|
||||||
|
\def\faPause{\faicon{pause}}
|
||||||
|
\def\faStop{\faicon{stop}}
|
||||||
|
\def\faForward{\faicon{forward}}
|
||||||
|
\def\faFastForward{\faicon{fast-forward}}
|
||||||
|
\def\faStepForward{\faicon{step-forward}}
|
||||||
|
\def\faEject{\faicon{eject}}
|
||||||
|
\def\faChevronLeft{\faicon{chevron-left}}
|
||||||
|
\def\faChevronRight{\faicon{chevron-right}}
|
||||||
|
\def\faPlusCircle{\faicon{plus-circle}}
|
||||||
|
\def\faMinusCircle{\faicon{minus-circle}}
|
||||||
|
\def\faTimesCircle{\faicon{times-circle}}
|
||||||
|
\def\faCheckCircle{\faicon{check-circle}}
|
||||||
|
\def\faQuestionCircle{\faicon{question-circle}}
|
||||||
|
\def\faInfoCircle{\faicon{info-circle}}
|
||||||
|
\def\faCrosshairs{\faicon{crosshairs}}
|
||||||
|
\def\faTimesCircleO{\faicon{times-circle-o}}
|
||||||
|
\def\faCheckCircleO{\faicon{check-circle-o}}
|
||||||
|
\def\faBan{\faicon{ban}}
|
||||||
|
\def\faArrowLeft{\faicon{arrow-left}}
|
||||||
|
\def\faArrowRight{\faicon{arrow-right}}
|
||||||
|
\def\faArrowUp{\faicon{arrow-up}}
|
||||||
|
\def\faArrowDown{\faicon{arrow-down}}
|
||||||
|
\def\faShare{\faicon{share}}
|
||||||
|
\def\faExpand{\faicon{expand}}
|
||||||
|
\def\faCompress{\faicon{compress}}
|
||||||
|
\def\faPlus{\faicon{plus}}
|
||||||
|
\def\faMinus{\faicon{minus}}
|
||||||
|
\def\faAsterisk{\faicon{asterisk}}
|
||||||
|
\def\faExclamationCircle{\faicon{exclamation-circle}}
|
||||||
|
\def\faGift{\faicon{gift}}
|
||||||
|
\def\faLeaf{\faicon{leaf}}
|
||||||
|
\def\faFire{\faicon{fire}}
|
||||||
|
\def\faEye{\faicon{eye}}
|
||||||
|
\def\faEyeSlash{\faicon{eye-slash}}
|
||||||
|
\def\faExclamationTriangle{\faicon{exclamation-triangle}}
|
||||||
|
\def\faPlane{\faicon{plane}}
|
||||||
|
\def\faCalendar{\faicon{calendar}}
|
||||||
|
\def\faRandom{\faicon{random}}
|
||||||
|
\def\faComment{\faicon{comment}}
|
||||||
|
\def\faMagnet{\faicon{magnet}}
|
||||||
|
\def\faChevronUp{\faicon{chevron-up}}
|
||||||
|
\def\faChevronDown{\faicon{chevron-down}}
|
||||||
|
\def\faRetweet{\faicon{retweet}}
|
||||||
|
\def\faShoppingCart{\faicon{shopping-cart}}
|
||||||
|
\def\faFolder{\faicon{folder}}
|
||||||
|
\def\faFolderOpen{\faicon{folder-open}}
|
||||||
|
\def\faArrowsV{\faicon{arrows-v}}
|
||||||
|
\def\faArrowsH{\faicon{arrows-h}}
|
||||||
|
\def\faBarChart{\faicon{bar-chart}}
|
||||||
|
\def\faTwitterSquare{\faicon{twitter-square}}
|
||||||
|
\def\faFacebookSquare{\faicon{facebook-square}}
|
||||||
|
\def\faCameraRetro{\faicon{camera-retro}}
|
||||||
|
\def\faKey{\faicon{key}}
|
||||||
|
\def\faCogs{\faicon{cogs}}
|
||||||
|
\def\faComments{\faicon{comments}}
|
||||||
|
\def\faThumbsOUp{\faicon{thumbs-o-up}}
|
||||||
|
\def\faThumbsODown{\faicon{thumbs-o-down}}
|
||||||
|
\def\faStarHalf{\faicon{star-half}}
|
||||||
|
\def\faHeartO{\faicon{heart-o}}
|
||||||
|
\def\faSignOut{\faicon{sign-out}}
|
||||||
|
\def\faLinkedinSquare{\faicon{linkedin-square}}
|
||||||
|
\def\faThumbTack{\faicon{thumb-tack}}
|
||||||
|
\def\faExternalLink{\faicon{external-link}}
|
||||||
|
\def\faSignIn{\faicon{sign-in}}
|
||||||
|
\def\faTrophy{\faicon{trophy}}
|
||||||
|
\def\faGithubSquare{\faicon{github-square}}
|
||||||
|
\def\faUpload{\faicon{upload}}
|
||||||
|
\def\faLemonO{\faicon{lemon-o}}
|
||||||
|
\def\faPhone{\faicon{phone}}
|
||||||
|
\def\faSquareO{\faicon{square-o}}
|
||||||
|
\def\faBookmarkO{\faicon{bookmark-o}}
|
||||||
|
\def\faPhoneSquare{\faicon{phone-square}}
|
||||||
|
\def\faTwitter{\faicon{twitter}}
|
||||||
|
\def\faFacebook{\faicon{facebook}}
|
||||||
|
\def\faGithub{\faicon{github}}
|
||||||
|
\def\faUnlock{\faicon{unlock}}
|
||||||
|
\def\faCreditCard{\faicon{credit-card}}
|
||||||
|
\def\faRss{\faicon{rss}}
|
||||||
|
\def\faHddO{\faicon{hdd-o}}
|
||||||
|
\def\faBullhorn{\faicon{bullhorn}}
|
||||||
|
\def\faBell{\faicon{bell}}
|
||||||
|
\def\faCertificate{\faicon{certificate}}
|
||||||
|
\def\faHandORight{\faicon{hand-o-right}}
|
||||||
|
\def\faHandOLeft{\faicon{hand-o-left}}
|
||||||
|
\def\faHandOUp{\faicon{hand-o-up}}
|
||||||
|
\def\faHandODown{\faicon{hand-o-down}}
|
||||||
|
\def\faArrowCircleLeft{\faicon{arrow-circle-left}}
|
||||||
|
\def\faArrowCircleRight{\faicon{arrow-circle-right}}
|
||||||
|
\def\faArrowCircleUp{\faicon{arrow-circle-up}}
|
||||||
|
\def\faArrowCircleDown{\faicon{arrow-circle-down}}
|
||||||
|
\def\faGlobe{\faicon{globe}}
|
||||||
|
\def\faWrench{\faicon{wrench}}
|
||||||
|
\def\faTasks{\faicon{tasks}}
|
||||||
|
\def\faFilter{\faicon{filter}}
|
||||||
|
\def\faBriefcase{\faicon{briefcase}}
|
||||||
|
\def\faArrowsAlt{\faicon{arrows-alt}}
|
||||||
|
\def\faUsers{\faicon{users}}
|
||||||
|
\def\faLink{\faicon{link}}
|
||||||
|
\def\faCloud{\faicon{cloud}}
|
||||||
|
\def\faFlask{\faicon{flask}}
|
||||||
|
\def\faScissors{\faicon{scissors}}
|
||||||
|
\def\faFilesO{\faicon{files-o}}
|
||||||
|
\def\faPaperclip{\faicon{paperclip}}
|
||||||
|
\def\faFloppyO{\faicon{floppy-o}}
|
||||||
|
\def\faSquare{\faicon{square}}
|
||||||
|
\def\faBars{\faicon{bars}}
|
||||||
|
\def\faListUl{\faicon{list-ul}}
|
||||||
|
\def\faListOl{\faicon{list-ol}}
|
||||||
|
\def\faStrikethrough{\faicon{strikethrough}}
|
||||||
|
\def\faUnderline{\faicon{underline}}
|
||||||
|
\def\faTable{\faicon{table}}
|
||||||
|
\def\faMagic{\faicon{magic}}
|
||||||
|
\def\faTruck{\faicon{truck}}
|
||||||
|
\def\faPinterest{\faicon{pinterest}}
|
||||||
|
\def\faPinterestSquare{\faicon{pinterest-square}}
|
||||||
|
\def\faGooglePlusSquare{\faicon{google-plus-square}}
|
||||||
|
\def\faGooglePlus{\faicon{google-plus}}
|
||||||
|
\def\faMoney{\faicon{money}}
|
||||||
|
\def\faCaretDown{\faicon{caret-down}}
|
||||||
|
\def\faCaretUp{\faicon{caret-up}}
|
||||||
|
\def\faCaretLeft{\faicon{caret-left}}
|
||||||
|
\def\faCaretRight{\faicon{caret-right}}
|
||||||
|
\def\faColumns{\faicon{columns}}
|
||||||
|
\def\faSort{\faicon{sort}}
|
||||||
|
\def\faSortDesc{\faicon{sort-desc}}
|
||||||
|
\def\faSortAsc{\faicon{sort-asc}}
|
||||||
|
\def\faEnvelope{\faicon{envelope}}
|
||||||
|
\def\faLinkedin{\faicon{linkedin}}
|
||||||
|
\def\faUndo{\faicon{undo}}
|
||||||
|
\def\faGavel{\faicon{gavel}}
|
||||||
|
\def\faTachometer{\faicon{tachometer}}
|
||||||
|
\def\faCommentO{\faicon{comment-o}}
|
||||||
|
\def\faCommentsO{\faicon{comments-o}}
|
||||||
|
\def\faBolt{\faicon{bolt}}
|
||||||
|
\def\faSitemap{\faicon{sitemap}}
|
||||||
|
\def\faUmbrella{\faicon{umbrella}}
|
||||||
|
\def\faClipboard{\faicon{clipboard}}
|
||||||
|
\def\faLightbulbO{\faicon{lightbulb-o}}
|
||||||
|
\def\faExchange{\faicon{exchange}}
|
||||||
|
\def\faCloudDownload{\faicon{cloud-download}}
|
||||||
|
\def\faCloudUpload{\faicon{cloud-upload}}
|
||||||
|
\def\faUserMd{\faicon{user-md}}
|
||||||
|
\def\faStethoscope{\faicon{stethoscope}}
|
||||||
|
\def\faSuitcase{\faicon{suitcase}}
|
||||||
|
\def\faBellO{\faicon{bell-o}}
|
||||||
|
\def\faCoffee{\faicon{coffee}}
|
||||||
|
\def\faCutlery{\faicon{cutlery}}
|
||||||
|
\def\faFileTextO{\faicon{file-text-o}}
|
||||||
|
\def\faBuildingO{\faicon{building-o}}
|
||||||
|
\def\faHospitalO{\faicon{hospital-o}}
|
||||||
|
\def\faAmbulance{\faicon{ambulance}}
|
||||||
|
\def\faMedkit{\faicon{medkit}}
|
||||||
|
\def\faFighterJet{\faicon{fighter-jet}}
|
||||||
|
\def\faBeer{\faicon{beer}}
|
||||||
|
\def\faHSquare{\faicon{h-square}}
|
||||||
|
\def\faPlusSquare{\faicon{plus-square}}
|
||||||
|
\def\faAngleDoubleLeft{\faicon{angle-double-left}}
|
||||||
|
\def\faAngleDoubleRight{\faicon{angle-double-right}}
|
||||||
|
\def\faAngleDoubleUp{\faicon{angle-double-up}}
|
||||||
|
\def\faAngleDoubleDown{\faicon{angle-double-down}}
|
||||||
|
\def\faAngleLeft{\faicon{angle-left}}
|
||||||
|
\def\faAngleRight{\faicon{angle-right}}
|
||||||
|
\def\faAngleUp{\faicon{angle-up}}
|
||||||
|
\def\faAngleDown{\faicon{angle-down}}
|
||||||
|
\def\faDesktop{\faicon{desktop}}
|
||||||
|
\def\faLaptop{\faicon{laptop}}
|
||||||
|
\def\faTablet{\faicon{tablet}}
|
||||||
|
\def\faMobile{\faicon{mobile}}
|
||||||
|
\def\faCircleO{\faicon{circle-o}}
|
||||||
|
\def\faQuoteLeft{\faicon{quote-left}}
|
||||||
|
\def\faQuoteRight{\faicon{quote-right}}
|
||||||
|
\def\faSpinner{\faicon{spinner}}
|
||||||
|
\def\faCircle{\faicon{circle}}
|
||||||
|
\def\faReply{\faicon{reply}}
|
||||||
|
\def\faGithubAlt{\faicon{github-alt}}
|
||||||
|
\def\faFolderO{\faicon{folder-o}}
|
||||||
|
\def\faFolderOpenO{\faicon{folder-open-o}}
|
||||||
|
\def\faSmileO{\faicon{smile-o}}
|
||||||
|
\def\faFrownO{\faicon{frown-o}}
|
||||||
|
\def\faMehO{\faicon{meh-o}}
|
||||||
|
\def\faGamepad{\faicon{gamepad}}
|
||||||
|
\def\faKeyboardO{\faicon{keyboard-o}}
|
||||||
|
\def\faFlagO{\faicon{flag-o}}
|
||||||
|
\def\faFlagCheckered{\faicon{flag-checkered}}
|
||||||
|
\def\faTerminal{\faicon{terminal}}
|
||||||
|
\def\faCode{\faicon{code}}
|
||||||
|
\def\faReplyAll{\faicon{reply-all}}
|
||||||
|
\def\faStarHalfO{\faicon{star-half-o}}
|
||||||
|
\def\faLocationArrow{\faicon{location-arrow}}
|
||||||
|
\def\faCrop{\faicon{crop}}
|
||||||
|
\def\faCodeFork{\faicon{code-fork}}
|
||||||
|
\def\faChainBroken{\faicon{chain-broken}}
|
||||||
|
\def\faQuestion{\faicon{question}}
|
||||||
|
\def\faInfo{\faicon{info}}
|
||||||
|
\def\faExclamation{\faicon{exclamation}}
|
||||||
|
\def\faSuperscript{\faicon{superscript}}
|
||||||
|
\def\faSubscript{\faicon{subscript}}
|
||||||
|
\def\faEraser{\faicon{eraser}}
|
||||||
|
\def\faPuzzlePiece{\faicon{puzzle-piece}}
|
||||||
|
\def\faMicrophone{\faicon{microphone}}
|
||||||
|
\def\faMicrophoneSlash{\faicon{microphone-slash}}
|
||||||
|
\def\faShield{\faicon{shield}}
|
||||||
|
\def\faCalendarO{\faicon{calendar-o}}
|
||||||
|
\def\faFireExtinguisher{\faicon{fire-extinguisher}}
|
||||||
|
\def\faRocket{\faicon{rocket}}
|
||||||
|
\def\faMaxcdn{\faicon{maxcdn}}
|
||||||
|
\def\faChevronCircleLeft{\faicon{chevron-circle-left}}
|
||||||
|
\def\faChevronCircleRight{\faicon{chevron-circle-right}}
|
||||||
|
\def\faChevronCircleUp{\faicon{chevron-circle-up}}
|
||||||
|
\def\faChevronCircleDown{\faicon{chevron-circle-down}}
|
||||||
|
\def\faHtml5{\faicon{html5}}
|
||||||
|
\def\faCss3{\faicon{css3}}
|
||||||
|
\def\faAnchor{\faicon{anchor}}
|
||||||
|
\def\faUnlockAlt{\faicon{unlock-alt}}
|
||||||
|
\def\faBullseye{\faicon{bullseye}}
|
||||||
|
\def\faEllipsisH{\faicon{ellipsis-h}}
|
||||||
|
\def\faEllipsisV{\faicon{ellipsis-v}}
|
||||||
|
\def\faRssSquare{\faicon{rss-square}}
|
||||||
|
\def\faPlayCircle{\faicon{play-circle}}
|
||||||
|
\def\faTicket{\faicon{ticket}}
|
||||||
|
\def\faMinusSquare{\faicon{minus-square}}
|
||||||
|
\def\faMinusSquareO{\faicon{minus-square-o}}
|
||||||
|
\def\faLevelUp{\faicon{level-up}}
|
||||||
|
\def\faLevelDown{\faicon{level-down}}
|
||||||
|
\def\faCheckSquare{\faicon{check-square}}
|
||||||
|
\def\faPencilSquare{\faicon{pencil-square}}
|
||||||
|
\def\faExternalLinkSquare{\faicon{external-link-square}}
|
||||||
|
\def\faShareSquare{\faicon{share-square}}
|
||||||
|
\def\faCompass{\faicon{compass}}
|
||||||
|
\def\faCaretSquareODown{\faicon{caret-square-o-down}}
|
||||||
|
\def\faCaretSquareOUp{\faicon{caret-square-o-up}}
|
||||||
|
\def\faCaretSquareORight{\faicon{caret-square-o-right}}
|
||||||
|
\def\faEur{\faicon{eur}}
|
||||||
|
\def\faGbp{\faicon{gbp}}
|
||||||
|
\def\faUsd{\faicon{usd}}
|
||||||
|
\def\faInr{\faicon{inr}}
|
||||||
|
\def\faJpy{\faicon{jpy}}
|
||||||
|
\def\faRub{\faicon{rub}}
|
||||||
|
\def\faKrw{\faicon{krw}}
|
||||||
|
\def\faBtc{\faicon{btc}}
|
||||||
|
\def\faFile{\faicon{file}}
|
||||||
|
\def\faFileText{\faicon{file-text}}
|
||||||
|
\def\faSortAlphaAsc{\faicon{sort-alpha-asc}}
|
||||||
|
\def\faSortAlphaDesc{\faicon{sort-alpha-desc}}
|
||||||
|
\def\faSortAmountAsc{\faicon{sort-amount-asc}}
|
||||||
|
\def\faSortAmountDesc{\faicon{sort-amount-desc}}
|
||||||
|
\def\faSortNumericAsc{\faicon{sort-numeric-asc}}
|
||||||
|
\def\faSortNumericDesc{\faicon{sort-numeric-desc}}
|
||||||
|
\def\faThumbsUp{\faicon{thumbs-up}}
|
||||||
|
\def\faThumbsDown{\faicon{thumbs-down}}
|
||||||
|
\def\faYoutubeSquare{\faicon{youtube-square}}
|
||||||
|
\def\faYoutube{\faicon{youtube}}
|
||||||
|
\def\faXing{\faicon{xing}}
|
||||||
|
\def\faXingSquare{\faicon{xing-square}}
|
||||||
|
\def\faYoutubePlay{\faicon{youtube-play}}
|
||||||
|
\def\faDropbox{\faicon{dropbox}}
|
||||||
|
\def\faStackOverflow{\faicon{stack-overflow}}
|
||||||
|
\def\faInstagram{\faicon{instagram}}
|
||||||
|
\def\faFlickr{\faicon{flickr}}
|
||||||
|
\def\faAdn{\faicon{adn}}
|
||||||
|
\def\faBitbucket{\faicon{bitbucket}}
|
||||||
|
\def\faBitbucketSquare{\faicon{bitbucket-square}}
|
||||||
|
\def\faTumblr{\faicon{tumblr}}
|
||||||
|
\def\faTumblrSquare{\faicon{tumblr-square}}
|
||||||
|
\def\faLongArrowDown{\faicon{long-arrow-down}}
|
||||||
|
\def\faLongArrowUp{\faicon{long-arrow-up}}
|
||||||
|
\def\faLongArrowLeft{\faicon{long-arrow-left}}
|
||||||
|
\def\faLongArrowRight{\faicon{long-arrow-right}}
|
||||||
|
\def\faApple{\faicon{apple}}
|
||||||
|
\def\faWindows{\faicon{windows}}
|
||||||
|
\def\faAndroid{\faicon{android}}
|
||||||
|
\def\faLinux{\faicon{linux}}
|
||||||
|
\def\faDribbble{\faicon{dribbble}}
|
||||||
|
\def\faSkype{\faicon{skype}}
|
||||||
|
\def\faFoursquare{\faicon{foursquare}}
|
||||||
|
\def\faTrello{\faicon{trello}}
|
||||||
|
\def\faFemale{\faicon{female}}
|
||||||
|
\def\faMale{\faicon{male}}
|
||||||
|
\def\faGratipay{\faicon{gratipay}}
|
||||||
|
\def\faSunO{\faicon{sun-o}}
|
||||||
|
\def\faMoonO{\faicon{moon-o}}
|
||||||
|
\def\faArchive{\faicon{archive}}
|
||||||
|
\def\faBug{\faicon{bug}}
|
||||||
|
\def\faVk{\faicon{vk}}
|
||||||
|
\def\faWeibo{\faicon{weibo}}
|
||||||
|
\def\faRenren{\faicon{renren}}
|
||||||
|
\def\faPagelines{\faicon{pagelines}}
|
||||||
|
\def\faStackExchange{\faicon{stack-exchange}}
|
||||||
|
\def\faArrowCircleORight{\faicon{arrow-circle-o-right}}
|
||||||
|
\def\faArrowCircleOLeft{\faicon{arrow-circle-o-left}}
|
||||||
|
\def\faCaretSquareOLeft{\faicon{caret-square-o-left}}
|
||||||
|
\def\faDotCircleO{\faicon{dot-circle-o}}
|
||||||
|
\def\faWheelchair{\faicon{wheelchair}}
|
||||||
|
\def\faVimeoSquare{\faicon{vimeo-square}}
|
||||||
|
\def\faTry{\faicon{try}}
|
||||||
|
\def\faPlusSquareO{\faicon{plus-square-o}}
|
||||||
|
\def\faSpaceShuttle{\faicon{space-shuttle}}
|
||||||
|
\def\faSlack{\faicon{slack}}
|
||||||
|
\def\faEnvelopeSquare{\faicon{envelope-square}}
|
||||||
|
\def\faWordpress{\faicon{wordpress}}
|
||||||
|
\def\faOpenid{\faicon{openid}}
|
||||||
|
\def\faUniversity{\faicon{university}}
|
||||||
|
\def\faGraduationCap{\faicon{graduation-cap}}
|
||||||
|
\def\faYahoo{\faicon{yahoo}}
|
||||||
|
\def\faGoogle{\faicon{google}}
|
||||||
|
\def\faReddit{\faicon{reddit}}
|
||||||
|
\def\faRedditSquare{\faicon{reddit-square}}
|
||||||
|
\def\faStumbleuponCircle{\faicon{stumbleupon-circle}}
|
||||||
|
\def\faStumbleupon{\faicon{stumbleupon}}
|
||||||
|
\def\faDelicious{\faicon{delicious}}
|
||||||
|
\def\faDigg{\faicon{digg}}
|
||||||
|
\def\faPiedPiperPp{\faicon{pied-piper-pp}}
|
||||||
|
\def\faPiedPiperAlt{\faicon{pied-piper-alt}}
|
||||||
|
\def\faDrupal{\faicon{drupal}}
|
||||||
|
\def\faJoomla{\faicon{joomla}}
|
||||||
|
\def\faLanguage{\faicon{language}}
|
||||||
|
\def\faFax{\faicon{fax}}
|
||||||
|
\def\faBuilding{\faicon{building}}
|
||||||
|
\def\faChild{\faicon{child}}
|
||||||
|
\def\faPaw{\faicon{paw}}
|
||||||
|
\def\faSpoon{\faicon{spoon}}
|
||||||
|
\def\faCube{\faicon{cube}}
|
||||||
|
\def\faCubes{\faicon{cubes}}
|
||||||
|
\def\faBehance{\faicon{behance}}
|
||||||
|
\def\faBehanceSquare{\faicon{behance-square}}
|
||||||
|
\def\faSteam{\faicon{steam}}
|
||||||
|
\def\faSteamSquare{\faicon{steam-square}}
|
||||||
|
\def\faRecycle{\faicon{recycle}}
|
||||||
|
\def\faCar{\faicon{car}}
|
||||||
|
\def\faTaxi{\faicon{taxi}}
|
||||||
|
\def\faTree{\faicon{tree}}
|
||||||
|
\def\faSpotify{\faicon{spotify}}
|
||||||
|
\def\faDeviantart{\faicon{deviantart}}
|
||||||
|
\def\faSoundcloud{\faicon{soundcloud}}
|
||||||
|
\def\faDatabase{\faicon{database}}
|
||||||
|
\def\faFilePdfO{\faicon{file-pdf-o}}
|
||||||
|
\def\faFileWordO{\faicon{file-word-o}}
|
||||||
|
\def\faFileExcelO{\faicon{file-excel-o}}
|
||||||
|
\def\faFilePowerpointO{\faicon{file-powerpoint-o}}
|
||||||
|
\def\faFileImageO{\faicon{file-image-o}}
|
||||||
|
\def\faFileArchiveO{\faicon{file-archive-o}}
|
||||||
|
\def\faFileAudioO{\faicon{file-audio-o}}
|
||||||
|
\def\faFileVideoO{\faicon{file-video-o}}
|
||||||
|
\def\faFileCodeO{\faicon{file-code-o}}
|
||||||
|
\def\faVine{\faicon{vine}}
|
||||||
|
\def\faCodepen{\faicon{codepen}}
|
||||||
|
\def\faJsfiddle{\faicon{jsfiddle}}
|
||||||
|
\def\faLifeRing{\faicon{life-ring}}
|
||||||
|
\def\faCircleONotch{\faicon{circle-o-notch}}
|
||||||
|
\def\faRebel{\faicon{rebel}}
|
||||||
|
\def\faEmpire{\faicon{empire}}
|
||||||
|
\def\faGitSquare{\faicon{git-square}}
|
||||||
|
\def\faGit{\faicon{git}}
|
||||||
|
\def\faHackerNews{\faicon{hacker-news}}
|
||||||
|
\def\faTencentWeibo{\faicon{tencent-weibo}}
|
||||||
|
\def\faQq{\faicon{qq}}
|
||||||
|
\def\faWeixin{\faicon{weixin}}
|
||||||
|
\def\faPaperPlane{\faicon{paper-plane}}
|
||||||
|
\def\faPaperPlaneO{\faicon{paper-plane-o}}
|
||||||
|
\def\faHistory{\faicon{history}}
|
||||||
|
\def\faCircleThin{\faicon{circle-thin}}
|
||||||
|
\def\faHeader{\faicon{header}}
|
||||||
|
\def\faParagraph{\faicon{paragraph}}
|
||||||
|
\def\faSliders{\faicon{sliders}}
|
||||||
|
\def\faShareAlt{\faicon{share-alt}}
|
||||||
|
\def\faShareAltSquare{\faicon{share-alt-square}}
|
||||||
|
\def\faBomb{\faicon{bomb}}
|
||||||
|
\def\faFutbolO{\faicon{futbol-o}}
|
||||||
|
\def\faTty{\faicon{tty}}
|
||||||
|
\def\faBinoculars{\faicon{binoculars}}
|
||||||
|
\def\faPlug{\faicon{plug}}
|
||||||
|
\def\faSlideshare{\faicon{slideshare}}
|
||||||
|
\def\faTwitch{\faicon{twitch}}
|
||||||
|
\def\faYelp{\faicon{yelp}}
|
||||||
|
\def\faNewspaperO{\faicon{newspaper-o}}
|
||||||
|
\def\faWifi{\faicon{wifi}}
|
||||||
|
\def\faCalculator{\faicon{calculator}}
|
||||||
|
\def\faPaypal{\faicon{paypal}}
|
||||||
|
\def\faGoogleWallet{\faicon{google-wallet}}
|
||||||
|
\def\faCcVisa{\faicon{cc-visa}}
|
||||||
|
\def\faCcMastercard{\faicon{cc-mastercard}}
|
||||||
|
\def\faCcDiscover{\faicon{cc-discover}}
|
||||||
|
\def\faCcAmex{\faicon{cc-amex}}
|
||||||
|
\def\faCcPaypal{\faicon{cc-paypal}}
|
||||||
|
\def\faCcStripe{\faicon{cc-stripe}}
|
||||||
|
\def\faBellSlash{\faicon{bell-slash}}
|
||||||
|
\def\faBellSlashO{\faicon{bell-slash-o}}
|
||||||
|
\def\faTrash{\faicon{trash}}
|
||||||
|
\def\faCopyright{\faicon{copyright}}
|
||||||
|
\def\faAt{\faicon{at}}
|
||||||
|
\def\faEyedropper{\faicon{eyedropper}}
|
||||||
|
\def\faPaintBrush{\faicon{paint-brush}}
|
||||||
|
\def\faBirthdayCake{\faicon{birthday-cake}}
|
||||||
|
\def\faAreaChart{\faicon{area-chart}}
|
||||||
|
\def\faPieChart{\faicon{pie-chart}}
|
||||||
|
\def\faLineChart{\faicon{line-chart}}
|
||||||
|
\def\faLastfm{\faicon{lastfm}}
|
||||||
|
\def\faLastfmSquare{\faicon{lastfm-square}}
|
||||||
|
\def\faToggleOff{\faicon{toggle-off}}
|
||||||
|
\def\faToggleOn{\faicon{toggle-on}}
|
||||||
|
\def\faBicycle{\faicon{bicycle}}
|
||||||
|
\def\faBus{\faicon{bus}}
|
||||||
|
\def\faIoxhost{\faicon{ioxhost}}
|
||||||
|
\def\faAngellist{\faicon{angellist}}
|
||||||
|
\def\faCc{\faicon{cc}}
|
||||||
|
\def\faIls{\faicon{ils}}
|
||||||
|
\def\faMeanpath{\faicon{meanpath}}
|
||||||
|
\def\faBuysellads{\faicon{buysellads}}
|
||||||
|
\def\faConnectdevelop{\faicon{connectdevelop}}
|
||||||
|
\def\faDashcube{\faicon{dashcube}}
|
||||||
|
\def\faForumbee{\faicon{forumbee}}
|
||||||
|
\def\faLeanpub{\faicon{leanpub}}
|
||||||
|
\def\faSellsy{\faicon{sellsy}}
|
||||||
|
\def\faShirtsinbulk{\faicon{shirtsinbulk}}
|
||||||
|
\def\faSimplybuilt{\faicon{simplybuilt}}
|
||||||
|
\def\faSkyatlas{\faicon{skyatlas}}
|
||||||
|
\def\faCartPlus{\faicon{cart-plus}}
|
||||||
|
\def\faCartArrowDown{\faicon{cart-arrow-down}}
|
||||||
|
\def\faDiamond{\faicon{diamond}}
|
||||||
|
\def\faShip{\faicon{ship}}
|
||||||
|
\def\faUserSecret{\faicon{user-secret}}
|
||||||
|
\def\faMotorcycle{\faicon{motorcycle}}
|
||||||
|
\def\faStreetView{\faicon{street-view}}
|
||||||
|
\def\faHeartbeat{\faicon{heartbeat}}
|
||||||
|
\def\faVenus{\faicon{venus}}
|
||||||
|
\def\faMars{\faicon{mars}}
|
||||||
|
\def\faMercury{\faicon{mercury}}
|
||||||
|
\def\faTransgender{\faicon{transgender}}
|
||||||
|
\def\faTransgenderAlt{\faicon{transgender-alt}}
|
||||||
|
\def\faVenusDouble{\faicon{venus-double}}
|
||||||
|
\def\faMarsDouble{\faicon{mars-double}}
|
||||||
|
\def\faVenusMars{\faicon{venus-mars}}
|
||||||
|
\def\faMarsStroke{\faicon{mars-stroke}}
|
||||||
|
\def\faMarsStrokeV{\faicon{mars-stroke-v}}
|
||||||
|
\def\faMarsStrokeH{\faicon{mars-stroke-h}}
|
||||||
|
\def\faNeuter{\faicon{neuter}}
|
||||||
|
\def\faGenderless{\faicon{genderless}}
|
||||||
|
\def\faFacebookOfficial{\faicon{facebook-official}}
|
||||||
|
\def\faPinterestP{\faicon{pinterest-p}}
|
||||||
|
\def\faWhatsapp{\faicon{whatsapp}}
|
||||||
|
\def\faServer{\faicon{server}}
|
||||||
|
\def\faUserPlus{\faicon{user-plus}}
|
||||||
|
\def\faUserTimes{\faicon{user-times}}
|
||||||
|
\def\faBed{\faicon{bed}}
|
||||||
|
\def\faViacoin{\faicon{viacoin}}
|
||||||
|
\def\faTrain{\faicon{train}}
|
||||||
|
\def\faSubway{\faicon{subway}}
|
||||||
|
\def\faMedium{\faicon{medium}}
|
||||||
|
\def\faYCombinator{\faicon{y-combinator}}
|
||||||
|
\def\faOptinMonster{\faicon{optin-monster}}
|
||||||
|
\def\faOpencart{\faicon{opencart}}
|
||||||
|
\def\faExpeditedssl{\faicon{expeditedssl}}
|
||||||
|
\def\faBatteryFull{\faicon{battery-full}}
|
||||||
|
\def\faBatteryThreeQuarters{\faicon{battery-three-quarters}}
|
||||||
|
\def\faBatteryHalf{\faicon{battery-half}}
|
||||||
|
\def\faBatteryQuarter{\faicon{battery-quarter}}
|
||||||
|
\def\faBatteryEmpty{\faicon{battery-empty}}
|
||||||
|
\def\faMousePointer{\faicon{mouse-pointer}}
|
||||||
|
\def\faICursor{\faicon{i-cursor}}
|
||||||
|
\def\faObjectGroup{\faicon{object-group}}
|
||||||
|
\def\faObjectUngroup{\faicon{object-ungroup}}
|
||||||
|
\def\faStickyNote{\faicon{sticky-note}}
|
||||||
|
\def\faStickyNoteO{\faicon{sticky-note-o}}
|
||||||
|
\def\faCcJcb{\faicon{cc-jcb}}
|
||||||
|
\def\faCcDinersClub{\faicon{cc-diners-club}}
|
||||||
|
\def\faClone{\faicon{clone}}
|
||||||
|
\def\faBalanceScale{\faicon{balance-scale}}
|
||||||
|
\def\faHourglassO{\faicon{hourglass-o}}
|
||||||
|
\def\faHourglassStart{\faicon{hourglass-start}}
|
||||||
|
\def\faHourglassHalf{\faicon{hourglass-half}}
|
||||||
|
\def\faHourglassEnd{\faicon{hourglass-end}}
|
||||||
|
\def\faHourglass{\faicon{hourglass}}
|
||||||
|
\def\faHandRockO{\faicon{hand-rock-o}}
|
||||||
|
\def\faHandPaperO{\faicon{hand-paper-o}}
|
||||||
|
\def\faHandScissorsO{\faicon{hand-scissors-o}}
|
||||||
|
\def\faHandLizardO{\faicon{hand-lizard-o}}
|
||||||
|
\def\faHandSpockO{\faicon{hand-spock-o}}
|
||||||
|
\def\faHandPointerO{\faicon{hand-pointer-o}}
|
||||||
|
\def\faHandPeaceO{\faicon{hand-peace-o}}
|
||||||
|
\def\faTrademark{\faicon{trademark}}
|
||||||
|
\def\faRegistered{\faicon{registered}}
|
||||||
|
\def\faCreativeCommons{\faicon{creative-commons}}
|
||||||
|
\def\faGg{\faicon{gg}}
|
||||||
|
\def\faGgCircle{\faicon{gg-circle}}
|
||||||
|
\def\faTripadvisor{\faicon{tripadvisor}}
|
||||||
|
\def\faOdnoklassniki{\faicon{odnoklassniki}}
|
||||||
|
\def\faOdnoklassnikiSquare{\faicon{odnoklassniki-square}}
|
||||||
|
\def\faGetPocket{\faicon{get-pocket}}
|
||||||
|
\def\faWikipediaW{\faicon{wikipedia-w}}
|
||||||
|
\def\faSafari{\faicon{safari}}
|
||||||
|
\def\faChrome{\faicon{chrome}}
|
||||||
|
\def\faFirefox{\faicon{firefox}}
|
||||||
|
\def\faOpera{\faicon{opera}}
|
||||||
|
\def\faInternetExplorer{\faicon{internet-explorer}}
|
||||||
|
\def\faTelevision{\faicon{television}}
|
||||||
|
\def\faContao{\faicon{contao}}
|
||||||
|
\def\fa500Px{\faicon{500px}}
|
||||||
|
\def\faAmazon{\faicon{amazon}}
|
||||||
|
\def\faCalendarPlusO{\faicon{calendar-plus-o}}
|
||||||
|
\def\faCalendarMinusO{\faicon{calendar-minus-o}}
|
||||||
|
\def\faCalendarTimesO{\faicon{calendar-times-o}}
|
||||||
|
\def\faCalendarCheckO{\faicon{calendar-check-o}}
|
||||||
|
\def\faIndustry{\faicon{industry}}
|
||||||
|
\def\faMapPin{\faicon{map-pin}}
|
||||||
|
\def\faMapSigns{\faicon{map-signs}}
|
||||||
|
\def\faMapO{\faicon{map-o}}
|
||||||
|
\def\faMap{\faicon{map}}
|
||||||
|
\def\faCommenting{\faicon{commenting}}
|
||||||
|
\def\faCommentingO{\faicon{commenting-o}}
|
||||||
|
\def\faHouzz{\faicon{houzz}}
|
||||||
|
\def\faVimeo{\faicon{vimeo}}
|
||||||
|
\def\faBlackTie{\faicon{black-tie}}
|
||||||
|
\def\faFonticons{\faicon{fonticons}}
|
||||||
|
\def\faRedditAlien{\faicon{reddit-alien}}
|
||||||
|
\def\faEdge{\faicon{edge}}
|
||||||
|
\def\faCreditCardAlt{\faicon{credit-card-alt}}
|
||||||
|
\def\faCodiepie{\faicon{codiepie}}
|
||||||
|
\def\faModx{\faicon{modx}}
|
||||||
|
\def\faFortAwesome{\faicon{fort-awesome}}
|
||||||
|
\def\faUsb{\faicon{usb}}
|
||||||
|
\def\faProductHunt{\faicon{product-hunt}}
|
||||||
|
\def\faMixcloud{\faicon{mixcloud}}
|
||||||
|
\def\faScribd{\faicon{scribd}}
|
||||||
|
\def\faPauseCircle{\faicon{pause-circle}}
|
||||||
|
\def\faPauseCircleO{\faicon{pause-circle-o}}
|
||||||
|
\def\faStopCircle{\faicon{stop-circle}}
|
||||||
|
\def\faStopCircleO{\faicon{stop-circle-o}}
|
||||||
|
\def\faShoppingBag{\faicon{shopping-bag}}
|
||||||
|
\def\faShoppingBasket{\faicon{shopping-basket}}
|
||||||
|
\def\faHashtag{\faicon{hashtag}}
|
||||||
|
\def\faBluetooth{\faicon{bluetooth}}
|
||||||
|
\def\faBluetoothB{\faicon{bluetooth-b}}
|
||||||
|
\def\faPercent{\faicon{percent}}
|
||||||
|
\def\faGitlab{\faicon{gitlab}}
|
||||||
|
\def\faWpbeginner{\faicon{wpbeginner}}
|
||||||
|
\def\faWpforms{\faicon{wpforms}}
|
||||||
|
\def\faEnvira{\faicon{envira}}
|
||||||
|
\def\faUniversalAccess{\faicon{universal-access}}
|
||||||
|
\def\faWheelchairAlt{\faicon{wheelchair-alt}}
|
||||||
|
\def\faQuestionCircleO{\faicon{question-circle-o}}
|
||||||
|
\def\faBlind{\faicon{blind}}
|
||||||
|
\def\faAudioDescription{\faicon{audio-description}}
|
||||||
|
\def\faVolumeControlPhone{\faicon{volume-control-phone}}
|
||||||
|
\def\faBraille{\faicon{braille}}
|
||||||
|
\def\faAssistiveListeningSystems{\faicon{assistive-listening-systems}}
|
||||||
|
\def\faAmericanSignLanguageInterpreting{\faicon{american-sign-language-interpreting}}
|
||||||
|
\def\faDeaf{\faicon{deaf}}
|
||||||
|
\def\faGlide{\faicon{glide}}
|
||||||
|
\def\faGlideG{\faicon{glide-g}}
|
||||||
|
\def\faSignLanguage{\faicon{sign-language}}
|
||||||
|
\def\faLowVision{\faicon{low-vision}}
|
||||||
|
\def\faViadeo{\faicon{viadeo}}
|
||||||
|
\def\faViadeoSquare{\faicon{viadeo-square}}
|
||||||
|
\def\faSnapchat{\faicon{snapchat}}
|
||||||
|
\def\faSnapchatGhost{\faicon{snapchat-ghost}}
|
||||||
|
\def\faSnapchatSquare{\faicon{snapchat-square}}
|
||||||
|
\def\faPiedPiper{\faicon{pied-piper}}
|
||||||
|
\def\faFirstOrder{\faicon{first-order}}
|
||||||
|
\def\faYoast{\faicon{yoast}}
|
||||||
|
\def\faThemeisle{\faicon{themeisle}}
|
||||||
|
\def\faGooglePlusOfficial{\faicon{google-plus-official}}
|
||||||
|
\def\faFontAwesome{\faicon{font-awesome}}
|
||||||
|
% aliases
|
||||||
|
\def\faCny{\faicon{cny}}\expandafter\def\csname faicon@cny\endcsname{\faicon{jpy}}
|
||||||
|
\def\faYCombinatorSquare{\faicon{y-combinator-square}}\expandafter\def\csname faicon@y-combinator-square\endcsname{\faicon{hacker-news}}
|
||||||
|
\def\faCab{\faicon{cab}}\expandafter\def\csname faicon@cab\endcsname{\faicon{taxi}}
|
||||||
|
\def\faToggleUp{\faicon{toggle-up}}\expandafter\def\csname faicon@toggle-up\endcsname{\faicon{caret-square-o-up}}
|
||||||
|
\def\faLifeBuoy{\faicon{life-buoy}}\expandafter\def\csname faicon@life-buoy\endcsname{\faicon{life-ring}}
|
||||||
|
\def\faFileZipO{\faicon{file-zip-o}}\expandafter\def\csname faicon@file-zip-o\endcsname{\faicon{file-archive-o}}
|
||||||
|
\def\faBitcoin{\faicon{bitcoin}}\expandafter\def\csname faicon@bitcoin\endcsname{\faicon{btc}}
|
||||||
|
\def\faAutomobile{\faicon{automobile}}\expandafter\def\csname faicon@automobile\endcsname{\faicon{car}}
|
||||||
|
\def\faPaste{\faicon{paste}}\expandafter\def\csname faicon@paste\endcsname{\faicon{clipboard}}
|
||||||
|
\def\faResistance{\faicon{resistance}}\expandafter\def\csname faicon@resistance\endcsname{\faicon{rebel}}
|
||||||
|
\def\faCopy{\faicon{copy}}\expandafter\def\csname faicon@copy\endcsname{\faicon{files-o}}
|
||||||
|
\def\faIntersex{\faicon{intersex}}\expandafter\def\csname faicon@intersex\endcsname{\faicon{transgender}}
|
||||||
|
\def\faHardOfHearing{\faicon{hard-of-hearing}}\expandafter\def\csname faicon@hard-of-hearing\endcsname{\faicon{deaf}}
|
||||||
|
\def\faMailReply{\faicon{mail-reply}}\expandafter\def\csname faicon@mail-reply\endcsname{\faicon{reply}}
|
||||||
|
\def\faSortDown{\faicon{sort-down}}\expandafter\def\csname faicon@sort-down\endcsname{\faicon{sort-desc}}
|
||||||
|
\def\faGe{\faicon{ge}}\expandafter\def\csname faicon@ge\endcsname{\faicon{empire}}
|
||||||
|
\def\faBattery2{\faicon{battery-2}}\expandafter\def\csname faicon@battery-2\endcsname{\faicon{battery-half}}
|
||||||
|
\def\faHandStopO{\faicon{hand-stop-o}}\expandafter\def\csname faicon@hand-stop-o\endcsname{\faicon{hand-paper-o}}
|
||||||
|
\def\faGroup{\faicon{group}}\expandafter\def\csname faicon@group\endcsname{\faicon{users}}
|
||||||
|
\def\faRotateRight{\faicon{rotate-right}}\expandafter\def\csname faicon@rotate-right\endcsname{\faicon{repeat}}
|
||||||
|
\def\faWon{\faicon{won}}\expandafter\def\csname faicon@won\endcsname{\faicon{krw}}
|
||||||
|
\def\faFa{\faicon{fa}}\expandafter\def\csname faicon@fa\endcsname{\faicon{font-awesome}}
|
||||||
|
\def\faHourglass3{\faicon{hourglass-3}}\expandafter\def\csname faicon@hourglass-3\endcsname{\faicon{hourglass-end}}
|
||||||
|
\def\faStarHalfEmpty{\faicon{star-half-empty}}\expandafter\def\csname faicon@star-half-empty\endcsname{\faicon{star-half-o}}
|
||||||
|
\def\faCut{\faicon{cut}}\expandafter\def\csname faicon@cut\endcsname{\faicon{scissors}}
|
||||||
|
\def\faToggleDown{\faicon{toggle-down}}\expandafter\def\csname faicon@toggle-down\endcsname{\faicon{caret-square-o-down}}
|
||||||
|
\def\faGooglePlusCircle{\faicon{google-plus-circle}}\expandafter\def\csname faicon@google-plus-circle\endcsname{\faicon{google-plus-official}}
|
||||||
|
\def\faSheqel{\faicon{sheqel}}\expandafter\def\csname faicon@sheqel\endcsname{\faicon{ils}}
|
||||||
|
\def\faDashboard{\faicon{dashboard}}\expandafter\def\csname faicon@dashboard\endcsname{\faicon{tachometer}}
|
||||||
|
\def\faSend{\faicon{send}}\expandafter\def\csname faicon@send\endcsname{\faicon{paper-plane}}
|
||||||
|
\def\faYc{\faicon{yc}}\expandafter\def\csname faicon@yc\endcsname{\faicon{y-combinator}}
|
||||||
|
\def\faToggleLeft{\faicon{toggle-left}}\expandafter\def\csname faicon@toggle-left\endcsname{\faicon{caret-square-o-left}}
|
||||||
|
\def\faWarning{\faicon{warning}}\expandafter\def\csname faicon@warning\endcsname{\faicon{exclamation-triangle}}
|
||||||
|
\def\faImage{\faicon{image}}\expandafter\def\csname faicon@image\endcsname{\faicon{picture-o}}
|
||||||
|
\def\faInstitution{\faicon{institution}}\expandafter\def\csname faicon@institution\endcsname{\faicon{university}}
|
||||||
|
\def\faFileMovieO{\faicon{file-movie-o}}\expandafter\def\csname faicon@file-movie-o\endcsname{\faicon{file-video-o}}
|
||||||
|
\def\faPhoto{\faicon{photo}}\expandafter\def\csname faicon@photo\endcsname{\faicon{picture-o}}
|
||||||
|
\def\faFileSoundO{\faicon{file-sound-o}}\expandafter\def\csname faicon@file-sound-o\endcsname{\faicon{file-audio-o}}
|
||||||
|
\def\faMortarBoard{\faicon{mortar-board}}\expandafter\def\csname faicon@mortar-board\endcsname{\faicon{graduation-cap}}
|
||||||
|
\def\faGittip{\faicon{gittip}}\expandafter\def\csname faicon@gittip\endcsname{\faicon{gratipay}}
|
||||||
|
\def\faHourglass2{\faicon{hourglass-2}}\expandafter\def\csname faicon@hourglass-2\endcsname{\faicon{hourglass-half}}
|
||||||
|
\def\faSupport{\faicon{support}}\expandafter\def\csname faicon@support\endcsname{\faicon{life-ring}}
|
||||||
|
\def\faEdit{\faicon{edit}}\expandafter\def\csname faicon@edit\endcsname{\faicon{pencil-square-o}}
|
||||||
|
\def\faHotel{\faicon{hotel}}\expandafter\def\csname faicon@hotel\endcsname{\faicon{bed}}
|
||||||
|
\def\faSoccerBallO{\faicon{soccer-ball-o}}\expandafter\def\csname faicon@soccer-ball-o\endcsname{\faicon{futbol-o}}
|
||||||
|
\def\faFilePictureO{\faicon{file-picture-o}}\expandafter\def\csname faicon@file-picture-o\endcsname{\faicon{file-image-o}}
|
||||||
|
\def\faClose{\faicon{close}}\expandafter\def\csname faicon@close\endcsname{\faicon{times}}
|
||||||
|
\def\faYcSquare{\faicon{yc-square}}\expandafter\def\csname faicon@yc-square\endcsname{\faicon{hacker-news}}
|
||||||
|
\def\faShekel{\faicon{shekel}}\expandafter\def\csname faicon@shekel\endcsname{\faicon{ils}}
|
||||||
|
\def\faDollar{\faicon{dollar}}\expandafter\def\csname faicon@dollar\endcsname{\faicon{usd}}
|
||||||
|
\def\faUnsorted{\faicon{unsorted}}\expandafter\def\csname faicon@unsorted\endcsname{\faicon{sort}}
|
||||||
|
\def\faReorder{\faicon{reorder}}\expandafter\def\csname faicon@reorder\endcsname{\faicon{bars}}
|
||||||
|
\def\faBattery3{\faicon{battery-3}}\expandafter\def\csname faicon@battery-3\endcsname{\faicon{battery-three-quarters}}
|
||||||
|
\def\faRupee{\faicon{rupee}}\expandafter\def\csname faicon@rupee\endcsname{\faicon{inr}}
|
||||||
|
\def\faRouble{\faicon{rouble}}\expandafter\def\csname faicon@rouble\endcsname{\faicon{rub}}
|
||||||
|
\def\faHourglass1{\faicon{hourglass-1}}\expandafter\def\csname faicon@hourglass-1\endcsname{\faicon{hourglass-start}}
|
||||||
|
\def\faAslInterpreting{\faicon{asl-interpreting}}\expandafter\def\csname faicon@asl-interpreting\endcsname{\faicon{american-sign-language-interpreting}}
|
||||||
|
\def\faTv{\faicon{tv}}\expandafter\def\csname faicon@tv\endcsname{\faicon{television}}
|
||||||
|
\def\faSave{\faicon{save}}\expandafter\def\csname faicon@save\endcsname{\faicon{floppy-o}}
|
||||||
|
\def\faToggleRight{\faicon{toggle-right}}\expandafter\def\csname faicon@toggle-right\endcsname{\faicon{caret-square-o-right}}
|
||||||
|
\def\faDedent{\faicon{dedent}}\expandafter\def\csname faicon@dedent\endcsname{\faicon{outdent}}
|
||||||
|
\def\faGear{\faicon{gear}}\expandafter\def\csname faicon@gear\endcsname{\faicon{cog}}
|
||||||
|
\def\faLegal{\faicon{legal}}\expandafter\def\csname faicon@legal\endcsname{\faicon{gavel}}
|
||||||
|
\def\faWechat{\faicon{wechat}}\expandafter\def\csname faicon@wechat\endcsname{\faicon{weixin}}
|
||||||
|
\def\faFacebookF{\faicon{facebook-f}}\expandafter\def\csname faicon@facebook-f\endcsname{\faicon{facebook}}
|
||||||
|
\def\faFeed{\faicon{feed}}\expandafter\def\csname faicon@feed\endcsname{\faicon{rss}}
|
||||||
|
\def\faBank{\faicon{bank}}\expandafter\def\csname faicon@bank\endcsname{\faicon{university}}
|
||||||
|
\def\faTurkishLira{\faicon{turkish-lira}}\expandafter\def\csname faicon@turkish-lira\endcsname{\faicon{try}}
|
||||||
|
\def\faUnlink{\faicon{unlink}}\expandafter\def\csname faicon@unlink\endcsname{\faicon{chain-broken}}
|
||||||
|
\def\faChain{\faicon{chain}}\expandafter\def\csname faicon@chain\endcsname{\faicon{link}}
|
||||||
|
\def\faGears{\faicon{gears}}\expandafter\def\csname faicon@gears\endcsname{\faicon{cogs}}
|
||||||
|
\def\faRmb{\faicon{rmb}}\expandafter\def\csname faicon@rmb\endcsname{\faicon{jpy}}
|
||||||
|
\def\faBattery1{\faicon{battery-1}}\expandafter\def\csname faicon@battery-1\endcsname{\faicon{battery-quarter}}
|
||||||
|
\def\faLifeBouy{\faicon{life-bouy}}\expandafter\def\csname faicon@life-bouy\endcsname{\faicon{life-ring}}
|
||||||
|
\def\faYen{\faicon{yen}}\expandafter\def\csname faicon@yen\endcsname{\faicon{jpy}}
|
||||||
|
\def\faBattery4{\faicon{battery-4}}\expandafter\def\csname faicon@battery-4\endcsname{\faicon{battery-full}}
|
||||||
|
\def\faBattery0{\faicon{battery-0}}\expandafter\def\csname faicon@battery-0\endcsname{\faicon{battery-empty}}
|
||||||
|
\def\faHandGrabO{\faicon{hand-grab-o}}\expandafter\def\csname faicon@hand-grab-o\endcsname{\faicon{hand-rock-o}}
|
||||||
|
\def\faMailReplyAll{\faicon{mail-reply-all}}\expandafter\def\csname faicon@mail-reply-all\endcsname{\faicon{reply-all}}
|
||||||
|
\def\faMobilePhone{\faicon{mobile-phone}}\expandafter\def\csname faicon@mobile-phone\endcsname{\faicon{mobile}}
|
||||||
|
\def\faRotateLeft{\faicon{rotate-left}}\expandafter\def\csname faicon@rotate-left\endcsname{\faicon{undo}}
|
||||||
|
\def\faEuro{\faicon{euro}}\expandafter\def\csname faicon@euro\endcsname{\faicon{eur}}
|
||||||
|
\def\faRuble{\faicon{ruble}}\expandafter\def\csname faicon@ruble\endcsname{\faicon{rub}}
|
||||||
|
\def\faRa{\faicon{ra}}\expandafter\def\csname faicon@ra\endcsname{\faicon{rebel}}
|
||||||
|
\def\faStarHalfFull{\faicon{star-half-full}}\expandafter\def\csname faicon@star-half-full\endcsname{\faicon{star-half-o}}
|
||||||
|
\def\faSortUp{\faicon{sort-up}}\expandafter\def\csname faicon@sort-up\endcsname{\faicon{sort-asc}}
|
||||||
|
\def\faMailForward{\faicon{mail-forward}}\expandafter\def\csname faicon@mail-forward\endcsname{\faicon{share}}
|
||||||
|
\def\faSigning{\faicon{signing}}\expandafter\def\csname faicon@signing\endcsname{\faicon{sign-language}}
|
||||||
|
\def\faFlash{\faicon{flash}}\expandafter\def\csname faicon@flash\endcsname{\faicon{bolt}}
|
||||||
|
\def\faLifeSaver{\faicon{life-saver}}\expandafter\def\csname faicon@life-saver\endcsname{\faicon{life-ring}}
|
||||||
|
\def\faFilePhotoO{\faicon{file-photo-o}}\expandafter\def\csname faicon@file-photo-o\endcsname{\faicon{file-image-o}}
|
||||||
|
\def\faDeafness{\faicon{deafness}}\expandafter\def\csname faicon@deafness\endcsname{\faicon{deaf}}
|
||||||
|
\def\faBarChartO{\faicon{bar-chart-o}}\expandafter\def\csname faicon@bar-chart-o\endcsname{\faicon{bar-chart}}
|
||||||
|
\def\faSendO{\faicon{send-o}}\expandafter\def\csname faicon@send-o\endcsname{\faicon{paper-plane-o}}
|
||||||
|
\def\faNavicon{\faicon{navicon}}\expandafter\def\csname faicon@navicon\endcsname{\faicon{bars}}
|
||||||
|
\def\faRemove{\faicon{remove}}\expandafter\def\csname faicon@remove\endcsname{\faicon{times}}
|
||||||
@@ -0,0 +1,637 @@
|
|||||||
|
%% start of file `fontawesomesymbols-pdftex.tex'.
|
||||||
|
\expandafter\def\csname faicon@info\endcsname{{\FAone\symbol{0}}}
|
||||||
|
\expandafter\def\csname faicon@eraser\endcsname{{\FAone\symbol{1}}}
|
||||||
|
\expandafter\def\csname faicon@rss-square\endcsname{{\FAone\symbol{2}}}
|
||||||
|
\expandafter\def\csname faicon@external-link-square\endcsname{{\FAone\symbol{3}}}
|
||||||
|
\expandafter\def\csname faicon@caret-square-o-right\endcsname{{\FAone\symbol{4}}}
|
||||||
|
\expandafter\def\csname faicon@sort-alpha-desc\endcsname{{\FAone\symbol{5}}}
|
||||||
|
\expandafter\def\csname faicon@thumbs-up\endcsname{{\FAone\symbol{6}}}
|
||||||
|
\expandafter\def\csname faicon@thumbs-down\endcsname{{\FAone\symbol{7}}}
|
||||||
|
\expandafter\def\csname faicon@moon-o\endcsname{{\FAone\symbol{8}}}
|
||||||
|
\expandafter\def\csname faicon@pagelines\endcsname{{\FAone\symbol{9}}}
|
||||||
|
\expandafter\def\csname faicon@arrow-circle-o-right\endcsname{{\FAone\symbol{10}}}
|
||||||
|
\expandafter\def\csname faicon@caret-square-o-left\endcsname{{\FAone\symbol{11}}}
|
||||||
|
\expandafter\def\csname faicon@wheelchair\endcsname{{\FAone\symbol{12}}}
|
||||||
|
\expandafter\def\csname faicon@try\endcsname{{\FAone\symbol{13}}}
|
||||||
|
\expandafter\def\csname faicon@space-shuttle\endcsname{{\FAone\symbol{14}}}
|
||||||
|
\expandafter\def\csname faicon@slack\endcsname{{\FAone\symbol{15}}}
|
||||||
|
\expandafter\def\csname faicon@envelope-square\endcsname{{\FAone\symbol{16}}}
|
||||||
|
\expandafter\def\csname faicon@wordpress\endcsname{{\FAone\symbol{17}}}
|
||||||
|
\expandafter\def\csname faicon@openid\endcsname{{\FAone\symbol{18}}}
|
||||||
|
\expandafter\def\csname faicon@university\endcsname{{\FAone\symbol{19}}}
|
||||||
|
\expandafter\def\csname faicon@graduation-cap\endcsname{{\FAone\symbol{20}}}
|
||||||
|
\expandafter\def\csname faicon@yahoo\endcsname{{\FAone\symbol{21}}}
|
||||||
|
\expandafter\def\csname faicon@reddit-square\endcsname{{\FAone\symbol{22}}}
|
||||||
|
\expandafter\def\csname faicon@stumbleupon-circle\endcsname{{\FAone\symbol{23}}}
|
||||||
|
\expandafter\def\csname faicon@delicious\endcsname{{\FAone\symbol{24}}}
|
||||||
|
\expandafter\def\csname faicon@digg\endcsname{{\FAone\symbol{25}}}
|
||||||
|
\expandafter\def\csname faicon@pied-piper-pp\endcsname{{\FAone\symbol{26}}}
|
||||||
|
\expandafter\def\csname faicon@pied-piper-alt\endcsname{{\FAone\symbol{27}}}
|
||||||
|
\expandafter\def\csname faicon@drupal\endcsname{{\FAone\symbol{28}}}
|
||||||
|
\expandafter\def\csname faicon@joomla\endcsname{{\FAone\symbol{29}}}
|
||||||
|
\expandafter\def\csname faicon@fax\endcsname{{\FAone\symbol{30}}}
|
||||||
|
\expandafter\def\csname faicon@building\endcsname{{\FAone\symbol{31}}}
|
||||||
|
\expandafter\def\csname faicon@child\endcsname{{\FAone\symbol{32}}}
|
||||||
|
\expandafter\def\csname faicon@spoon\endcsname{{\FAone\symbol{33}}}
|
||||||
|
\expandafter\def\csname faicon@cube\endcsname{{\FAone\symbol{34}}}
|
||||||
|
\expandafter\def\csname faicon@cubes\endcsname{{\FAone\symbol{35}}}
|
||||||
|
\expandafter\def\csname faicon@behance\endcsname{{\FAone\symbol{36}}}
|
||||||
|
\expandafter\def\csname faicon@behance-square\endcsname{{\FAone\symbol{37}}}
|
||||||
|
\expandafter\def\csname faicon@steam\endcsname{{\FAone\symbol{38}}}
|
||||||
|
\expandafter\def\csname faicon@steam-square\endcsname{{\FAone\symbol{39}}}
|
||||||
|
\expandafter\def\csname faicon@recycle\endcsname{{\FAone\symbol{40}}}
|
||||||
|
\expandafter\def\csname faicon@car\endcsname{{\FAone\symbol{41}}}
|
||||||
|
\expandafter\def\csname faicon@taxi\endcsname{{\FAone\symbol{42}}}
|
||||||
|
\expandafter\def\csname faicon@tree\endcsname{{\FAone\symbol{43}}}
|
||||||
|
\expandafter\def\csname faicon@spotify\endcsname{{\FAone\symbol{44}}}
|
||||||
|
\expandafter\def\csname faicon@deviantart\endcsname{{\FAone\symbol{45}}}
|
||||||
|
\expandafter\def\csname faicon@soundcloud\endcsname{{\FAone\symbol{46}}}
|
||||||
|
\expandafter\def\csname faicon@file-word-o\endcsname{{\FAone\symbol{47}}}
|
||||||
|
\expandafter\def\csname faicon@file-excel-o\endcsname{{\FAone\symbol{48}}}
|
||||||
|
\expandafter\def\csname faicon@file-powerpoint-o\endcsname{{\FAone\symbol{49}}}
|
||||||
|
\expandafter\def\csname faicon@file-image-o\endcsname{{\FAone\symbol{50}}}
|
||||||
|
\expandafter\def\csname faicon@file-archive-o\endcsname{{\FAone\symbol{51}}}
|
||||||
|
\expandafter\def\csname faicon@file-audio-o\endcsname{{\FAone\symbol{52}}}
|
||||||
|
\expandafter\def\csname faicon@file-video-o\endcsname{{\FAone\symbol{53}}}
|
||||||
|
\expandafter\def\csname faicon@file-code-o\endcsname{{\FAone\symbol{54}}}
|
||||||
|
\expandafter\def\csname faicon@vine\endcsname{{\FAone\symbol{55}}}
|
||||||
|
\expandafter\def\csname faicon@codepen\endcsname{{\FAone\symbol{56}}}
|
||||||
|
\expandafter\def\csname faicon@jsfiddle\endcsname{{\FAone\symbol{57}}}
|
||||||
|
\expandafter\def\csname faicon@life-ring\endcsname{{\FAone\symbol{58}}}
|
||||||
|
\expandafter\def\csname faicon@circle-o-notch\endcsname{{\FAone\symbol{59}}}
|
||||||
|
\expandafter\def\csname faicon@git\endcsname{{\FAone\symbol{60}}}
|
||||||
|
\expandafter\def\csname faicon@hacker-news\endcsname{{\FAone\symbol{61}}}
|
||||||
|
\expandafter\def\csname faicon@paper-plane\endcsname{{\FAone\symbol{62}}}
|
||||||
|
\expandafter\def\csname faicon@paper-plane-o\endcsname{{\FAone\symbol{63}}}
|
||||||
|
\expandafter\def\csname faicon@history\endcsname{{\FAone\symbol{64}}}
|
||||||
|
\expandafter\def\csname faicon@circle-thin\endcsname{{\FAone\symbol{65}}}
|
||||||
|
\expandafter\def\csname faicon@header\endcsname{{\FAone\symbol{66}}}
|
||||||
|
\expandafter\def\csname faicon@paragraph\endcsname{{\FAone\symbol{67}}}
|
||||||
|
\expandafter\def\csname faicon@sliders\endcsname{{\FAone\symbol{68}}}
|
||||||
|
\expandafter\def\csname faicon@share-alt-square\endcsname{{\FAone\symbol{69}}}
|
||||||
|
\expandafter\def\csname faicon@bomb\endcsname{{\FAone\symbol{70}}}
|
||||||
|
\expandafter\def\csname faicon@futbol-o\endcsname{{\FAone\symbol{71}}}
|
||||||
|
\expandafter\def\csname faicon@tty\endcsname{{\FAone\symbol{72}}}
|
||||||
|
\expandafter\def\csname faicon@binoculars\endcsname{{\FAone\symbol{73}}}
|
||||||
|
\expandafter\def\csname faicon@plug\endcsname{{\FAone\symbol{74}}}
|
||||||
|
\expandafter\def\csname faicon@slideshare\endcsname{{\FAone\symbol{75}}}
|
||||||
|
\expandafter\def\csname faicon@twitch\endcsname{{\FAone\symbol{76}}}
|
||||||
|
\expandafter\def\csname faicon@yelp\endcsname{{\FAone\symbol{77}}}
|
||||||
|
\expandafter\def\csname faicon@newspaper-o\endcsname{{\FAone\symbol{78}}}
|
||||||
|
\expandafter\def\csname faicon@wifi\endcsname{{\FAone\symbol{79}}}
|
||||||
|
\expandafter\def\csname faicon@calculator\endcsname{{\FAone\symbol{80}}}
|
||||||
|
\expandafter\def\csname faicon@paypal\endcsname{{\FAone\symbol{81}}}
|
||||||
|
\expandafter\def\csname faicon@google-wallet\endcsname{{\FAone\symbol{82}}}
|
||||||
|
\expandafter\def\csname faicon@cc-mastercard\endcsname{{\FAone\symbol{83}}}
|
||||||
|
\expandafter\def\csname faicon@cc-discover\endcsname{{\FAone\symbol{84}}}
|
||||||
|
\expandafter\def\csname faicon@cc-paypal\endcsname{{\FAone\symbol{85}}}
|
||||||
|
\expandafter\def\csname faicon@cc-stripe\endcsname{{\FAone\symbol{86}}}
|
||||||
|
\expandafter\def\csname faicon@bell-slash\endcsname{{\FAone\symbol{87}}}
|
||||||
|
\expandafter\def\csname faicon@bell-slash-o\endcsname{{\FAone\symbol{88}}}
|
||||||
|
\expandafter\def\csname faicon@trash\endcsname{{\FAone\symbol{89}}}
|
||||||
|
\expandafter\def\csname faicon@copyright\endcsname{{\FAone\symbol{90}}}
|
||||||
|
\expandafter\def\csname faicon@at\endcsname{{\FAone\symbol{91}}}
|
||||||
|
\expandafter\def\csname faicon@eyedropper\endcsname{{\FAone\symbol{92}}}
|
||||||
|
\expandafter\def\csname faicon@birthday-cake\endcsname{{\FAone\symbol{93}}}
|
||||||
|
\expandafter\def\csname faicon@area-chart\endcsname{{\FAone\symbol{94}}}
|
||||||
|
\expandafter\def\csname faicon@pie-chart\endcsname{{\FAone\symbol{95}}}
|
||||||
|
\expandafter\def\csname faicon@line-chart\endcsname{{\FAone\symbol{96}}}
|
||||||
|
\expandafter\def\csname faicon@lastfm\endcsname{{\FAone\symbol{97}}}
|
||||||
|
\expandafter\def\csname faicon@lastfm-square\endcsname{{\FAone\symbol{98}}}
|
||||||
|
\expandafter\def\csname faicon@toggle-off\endcsname{{\FAone\symbol{99}}}
|
||||||
|
\expandafter\def\csname faicon@toggle-on\endcsname{{\FAone\symbol{100}}}
|
||||||
|
\expandafter\def\csname faicon@bicycle\endcsname{{\FAone\symbol{101}}}
|
||||||
|
\expandafter\def\csname faicon@bus\endcsname{{\FAone\symbol{102}}}
|
||||||
|
\expandafter\def\csname faicon@ioxhost\endcsname{{\FAone\symbol{103}}}
|
||||||
|
\expandafter\def\csname faicon@angellist\endcsname{{\FAone\symbol{104}}}
|
||||||
|
\expandafter\def\csname faicon@cc\endcsname{{\FAone\symbol{105}}}
|
||||||
|
\expandafter\def\csname faicon@ils\endcsname{{\FAone\symbol{106}}}
|
||||||
|
\expandafter\def\csname faicon@meanpath\endcsname{{\FAone\symbol{107}}}
|
||||||
|
\expandafter\def\csname faicon@buysellads\endcsname{{\FAone\symbol{108}}}
|
||||||
|
\expandafter\def\csname faicon@connectdevelop\endcsname{{\FAone\symbol{109}}}
|
||||||
|
\expandafter\def\csname faicon@forumbee\endcsname{{\FAone\symbol{110}}}
|
||||||
|
\expandafter\def\csname faicon@sellsy\endcsname{{\FAone\symbol{111}}}
|
||||||
|
\expandafter\def\csname faicon@shirtsinbulk\endcsname{{\FAone\symbol{112}}}
|
||||||
|
\expandafter\def\csname faicon@simplybuilt\endcsname{{\FAone\symbol{113}}}
|
||||||
|
\expandafter\def\csname faicon@skyatlas\endcsname{{\FAone\symbol{114}}}
|
||||||
|
\expandafter\def\csname faicon@cart-plus\endcsname{{\FAone\symbol{115}}}
|
||||||
|
\expandafter\def\csname faicon@cart-arrow-down\endcsname{{\FAone\symbol{116}}}
|
||||||
|
\expandafter\def\csname faicon@diamond\endcsname{{\FAone\symbol{117}}}
|
||||||
|
\expandafter\def\csname faicon@ship\endcsname{{\FAone\symbol{118}}}
|
||||||
|
\expandafter\def\csname faicon@user-secret\endcsname{{\FAone\symbol{119}}}
|
||||||
|
\expandafter\def\csname faicon@motorcycle\endcsname{{\FAone\symbol{120}}}
|
||||||
|
\expandafter\def\csname faicon@street-view\endcsname{{\FAone\symbol{121}}}
|
||||||
|
\expandafter\def\csname faicon@heartbeat\endcsname{{\FAone\symbol{122}}}
|
||||||
|
\expandafter\def\csname faicon@mars\endcsname{{\FAone\symbol{123}}}
|
||||||
|
\expandafter\def\csname faicon@mercury\endcsname{{\FAone\symbol{124}}}
|
||||||
|
\expandafter\def\csname faicon@transgender\endcsname{{\FAone\symbol{125}}}
|
||||||
|
\expandafter\def\csname faicon@transgender-alt\endcsname{{\FAone\symbol{126}}}
|
||||||
|
\expandafter\def\csname faicon@venus-double\endcsname{{\FAone\symbol{127}}}
|
||||||
|
\expandafter\def\csname faicon@mars-double\endcsname{{\FAone\symbol{128}}}
|
||||||
|
\expandafter\def\csname faicon@venus-mars\endcsname{{\FAone\symbol{129}}}
|
||||||
|
\expandafter\def\csname faicon@mars-stroke\endcsname{{\FAone\symbol{130}}}
|
||||||
|
\expandafter\def\csname faicon@mars-stroke-v\endcsname{{\FAone\symbol{131}}}
|
||||||
|
\expandafter\def\csname faicon@mars-stroke-h\endcsname{{\FAone\symbol{132}}}
|
||||||
|
\expandafter\def\csname faicon@neuter\endcsname{{\FAone\symbol{133}}}
|
||||||
|
\expandafter\def\csname faicon@genderless\endcsname{{\FAone\symbol{134}}}
|
||||||
|
\expandafter\def\csname faicon@facebook-official\endcsname{{\FAone\symbol{135}}}
|
||||||
|
\expandafter\def\csname faicon@pinterest-p\endcsname{{\FAone\symbol{136}}}
|
||||||
|
\expandafter\def\csname faicon@whatsapp\endcsname{{\FAone\symbol{137}}}
|
||||||
|
\expandafter\def\csname faicon@server\endcsname{{\FAone\symbol{138}}}
|
||||||
|
\expandafter\def\csname faicon@user-plus\endcsname{{\FAone\symbol{139}}}
|
||||||
|
\expandafter\def\csname faicon@user-times\endcsname{{\FAone\symbol{140}}}
|
||||||
|
\expandafter\def\csname faicon@bed\endcsname{{\FAone\symbol{141}}}
|
||||||
|
\expandafter\def\csname faicon@viacoin\endcsname{{\FAone\symbol{142}}}
|
||||||
|
\expandafter\def\csname faicon@train\endcsname{{\FAone\symbol{143}}}
|
||||||
|
\expandafter\def\csname faicon@subway\endcsname{{\FAone\symbol{144}}}
|
||||||
|
\expandafter\def\csname faicon@medium\endcsname{{\FAone\symbol{145}}}
|
||||||
|
\expandafter\def\csname faicon@y-combinator\endcsname{{\FAone\symbol{146}}}
|
||||||
|
\expandafter\def\csname faicon@optin-monster\endcsname{{\FAone\symbol{147}}}
|
||||||
|
\expandafter\def\csname faicon@opencart\endcsname{{\FAone\symbol{148}}}
|
||||||
|
\expandafter\def\csname faicon@expeditedssl\endcsname{{\FAone\symbol{149}}}
|
||||||
|
\expandafter\def\csname faicon@battery-full\endcsname{{\FAone\symbol{150}}}
|
||||||
|
\expandafter\def\csname faicon@battery-three-quarters\endcsname{{\FAone\symbol{151}}}
|
||||||
|
\expandafter\def\csname faicon@battery-half\endcsname{{\FAone\symbol{152}}}
|
||||||
|
\expandafter\def\csname faicon@battery-quarter\endcsname{{\FAone\symbol{153}}}
|
||||||
|
\expandafter\def\csname faicon@battery-empty\endcsname{{\FAone\symbol{154}}}
|
||||||
|
\expandafter\def\csname faicon@mouse-pointer\endcsname{{\FAone\symbol{155}}}
|
||||||
|
\expandafter\def\csname faicon@i-cursor\endcsname{{\FAone\symbol{156}}}
|
||||||
|
\expandafter\def\csname faicon@object-group\endcsname{{\FAone\symbol{157}}}
|
||||||
|
\expandafter\def\csname faicon@object-ungroup\endcsname{{\FAone\symbol{158}}}
|
||||||
|
\expandafter\def\csname faicon@sticky-note\endcsname{{\FAone\symbol{159}}}
|
||||||
|
\expandafter\def\csname faicon@sticky-note-o\endcsname{{\FAone\symbol{160}}}
|
||||||
|
\expandafter\def\csname faicon@cc-jcb\endcsname{{\FAone\symbol{161}}}
|
||||||
|
\expandafter\def\csname faicon@cc-diners-club\endcsname{{\FAone\symbol{162}}}
|
||||||
|
\expandafter\def\csname faicon@clone\endcsname{{\FAone\symbol{163}}}
|
||||||
|
\expandafter\def\csname faicon@balance-scale\endcsname{{\FAone\symbol{164}}}
|
||||||
|
\expandafter\def\csname faicon@hourglass-o\endcsname{{\FAone\symbol{165}}}
|
||||||
|
\expandafter\def\csname faicon@hourglass-start\endcsname{{\FAone\symbol{166}}}
|
||||||
|
\expandafter\def\csname faicon@hourglass-half\endcsname{{\FAone\symbol{167}}}
|
||||||
|
\expandafter\def\csname faicon@hourglass-end\endcsname{{\FAone\symbol{168}}}
|
||||||
|
\expandafter\def\csname faicon@hourglass\endcsname{{\FAone\symbol{169}}}
|
||||||
|
\expandafter\def\csname faicon@hand-rock-o\endcsname{{\FAone\symbol{170}}}
|
||||||
|
\expandafter\def\csname faicon@hand-paper-o\endcsname{{\FAone\symbol{171}}}
|
||||||
|
\expandafter\def\csname faicon@hand-scissors-o\endcsname{{\FAone\symbol{172}}}
|
||||||
|
\expandafter\def\csname faicon@hand-lizard-o\endcsname{{\FAone\symbol{173}}}
|
||||||
|
\expandafter\def\csname faicon@hand-spock-o\endcsname{{\FAone\symbol{174}}}
|
||||||
|
\expandafter\def\csname faicon@hand-pointer-o\endcsname{{\FAone\symbol{175}}}
|
||||||
|
\expandafter\def\csname faicon@hand-peace-o\endcsname{{\FAone\symbol{176}}}
|
||||||
|
\expandafter\def\csname faicon@trademark\endcsname{{\FAone\symbol{177}}}
|
||||||
|
\expandafter\def\csname faicon@registered\endcsname{{\FAone\symbol{178}}}
|
||||||
|
\expandafter\def\csname faicon@creative-commons\endcsname{{\FAone\symbol{179}}}
|
||||||
|
\expandafter\def\csname faicon@tripadvisor\endcsname{{\FAone\symbol{180}}}
|
||||||
|
\expandafter\def\csname faicon@odnoklassniki-square\endcsname{{\FAone\symbol{181}}}
|
||||||
|
\expandafter\def\csname faicon@get-pocket\endcsname{{\FAone\symbol{182}}}
|
||||||
|
\expandafter\def\csname faicon@wikipedia-w\endcsname{{\FAone\symbol{183}}}
|
||||||
|
\expandafter\def\csname faicon@safari\endcsname{{\FAone\symbol{184}}}
|
||||||
|
\expandafter\def\csname faicon@chrome\endcsname{{\FAone\symbol{185}}}
|
||||||
|
\expandafter\def\csname faicon@firefox\endcsname{{\FAone\symbol{186}}}
|
||||||
|
\expandafter\def\csname faicon@opera\endcsname{{\FAone\symbol{187}}}
|
||||||
|
\expandafter\def\csname faicon@internet-explorer\endcsname{{\FAone\symbol{188}}}
|
||||||
|
\expandafter\def\csname faicon@television\endcsname{{\FAone\symbol{189}}}
|
||||||
|
\expandafter\def\csname faicon@contao\endcsname{{\FAone\symbol{190}}}
|
||||||
|
\expandafter\def\csname faicon@500px\endcsname{{\FAone\symbol{191}}}
|
||||||
|
\expandafter\def\csname faicon@amazon\endcsname{{\FAone\symbol{192}}}
|
||||||
|
\expandafter\def\csname faicon@calendar-plus-o\endcsname{{\FAone\symbol{193}}}
|
||||||
|
\expandafter\def\csname faicon@calendar-minus-o\endcsname{{\FAone\symbol{194}}}
|
||||||
|
\expandafter\def\csname faicon@calendar-times-o\endcsname{{\FAone\symbol{195}}}
|
||||||
|
\expandafter\def\csname faicon@calendar-check-o\endcsname{{\FAone\symbol{196}}}
|
||||||
|
\expandafter\def\csname faicon@industry\endcsname{{\FAone\symbol{197}}}
|
||||||
|
\expandafter\def\csname faicon@map-pin\endcsname{{\FAone\symbol{198}}}
|
||||||
|
\expandafter\def\csname faicon@map-signs\endcsname{{\FAone\symbol{199}}}
|
||||||
|
\expandafter\def\csname faicon@map-o\endcsname{{\FAone\symbol{200}}}
|
||||||
|
\expandafter\def\csname faicon@map\endcsname{{\FAone\symbol{201}}}
|
||||||
|
\expandafter\def\csname faicon@commenting\endcsname{{\FAone\symbol{202}}}
|
||||||
|
\expandafter\def\csname faicon@commenting-o\endcsname{{\FAone\symbol{203}}}
|
||||||
|
\expandafter\def\csname faicon@houzz\endcsname{{\FAone\symbol{204}}}
|
||||||
|
\expandafter\def\csname faicon@vimeo\endcsname{{\FAone\symbol{205}}}
|
||||||
|
\expandafter\def\csname faicon@edge\endcsname{{\FAone\symbol{206}}}
|
||||||
|
\expandafter\def\csname faicon@credit-card-alt\endcsname{{\FAone\symbol{207}}}
|
||||||
|
\expandafter\def\csname faicon@codiepie\endcsname{{\FAone\symbol{208}}}
|
||||||
|
\expandafter\def\csname faicon@usb\endcsname{{\FAone\symbol{209}}}
|
||||||
|
\expandafter\def\csname faicon@product-hunt\endcsname{{\FAone\symbol{210}}}
|
||||||
|
\expandafter\def\csname faicon@mixcloud\endcsname{{\FAone\symbol{211}}}
|
||||||
|
\expandafter\def\csname faicon@scribd\endcsname{{\FAone\symbol{212}}}
|
||||||
|
\expandafter\def\csname faicon@pause-circle\endcsname{{\FAone\symbol{213}}}
|
||||||
|
\expandafter\def\csname faicon@pause-circle-o\endcsname{{\FAone\symbol{214}}}
|
||||||
|
\expandafter\def\csname faicon@stop-circle\endcsname{{\FAone\symbol{215}}}
|
||||||
|
\expandafter\def\csname faicon@stop-circle-o\endcsname{{\FAone\symbol{216}}}
|
||||||
|
\expandafter\def\csname faicon@shopping-bag\endcsname{{\FAone\symbol{217}}}
|
||||||
|
\expandafter\def\csname faicon@shopping-basket\endcsname{{\FAone\symbol{218}}}
|
||||||
|
\expandafter\def\csname faicon@hashtag\endcsname{{\FAone\symbol{219}}}
|
||||||
|
\expandafter\def\csname faicon@bluetooth\endcsname{{\FAone\symbol{220}}}
|
||||||
|
\expandafter\def\csname faicon@bluetooth-b\endcsname{{\FAone\symbol{221}}}
|
||||||
|
\expandafter\def\csname faicon@percent\endcsname{{\FAone\symbol{222}}}
|
||||||
|
\expandafter\def\csname faicon@gitlab\endcsname{{\FAone\symbol{223}}}
|
||||||
|
\expandafter\def\csname faicon@wpbeginner\endcsname{{\FAone\symbol{224}}}
|
||||||
|
\expandafter\def\csname faicon@wpforms\endcsname{{\FAone\symbol{225}}}
|
||||||
|
\expandafter\def\csname faicon@envira\endcsname{{\FAone\symbol{226}}}
|
||||||
|
\expandafter\def\csname faicon@universal-access\endcsname{{\FAone\symbol{227}}}
|
||||||
|
\expandafter\def\csname faicon@wheelchair-alt\endcsname{{\FAone\symbol{228}}}
|
||||||
|
\expandafter\def\csname faicon@question-circle-o\endcsname{{\FAone\symbol{229}}}
|
||||||
|
\expandafter\def\csname faicon@blind\endcsname{{\FAone\symbol{230}}}
|
||||||
|
\expandafter\def\csname faicon@audio-description\endcsname{{\FAone\symbol{231}}}
|
||||||
|
\expandafter\def\csname faicon@adjust\endcsname{{\FAone\symbol{232}}}
|
||||||
|
\expandafter\def\csname faicon@adn\endcsname{{\FAone\symbol{233}}}
|
||||||
|
\expandafter\def\csname faicon@align-center\endcsname{{\FAone\symbol{234}}}
|
||||||
|
\expandafter\def\csname faicon@align-justify\endcsname{{\FAone\symbol{235}}}
|
||||||
|
\expandafter\def\csname faicon@align-left\endcsname{{\FAone\symbol{236}}}
|
||||||
|
\expandafter\def\csname faicon@align-right\endcsname{{\FAone\symbol{237}}}
|
||||||
|
\expandafter\def\csname faicon@ambulance\endcsname{{\FAone\symbol{238}}}
|
||||||
|
\expandafter\def\csname faicon@anchor\endcsname{{\FAone\symbol{239}}}
|
||||||
|
\expandafter\def\csname faicon@android\endcsname{{\FAone\symbol{240}}}
|
||||||
|
\expandafter\def\csname faicon@angle-down\endcsname{{\FAone\symbol{241}}}
|
||||||
|
\expandafter\def\csname faicon@angle-left\endcsname{{\FAone\symbol{242}}}
|
||||||
|
\expandafter\def\csname faicon@angle-right\endcsname{{\FAone\symbol{243}}}
|
||||||
|
\expandafter\def\csname faicon@angle-up\endcsname{{\FAone\symbol{244}}}
|
||||||
|
\expandafter\def\csname faicon@apple\endcsname{{\FAone\symbol{245}}}
|
||||||
|
\expandafter\def\csname faicon@archive\endcsname{{\FAone\symbol{246}}}
|
||||||
|
\expandafter\def\csname faicon@arrow-circle-o-left\endcsname{{\FAone\symbol{247}}}
|
||||||
|
\expandafter\def\csname faicon@arrow-down\endcsname{{\FAone\symbol{248}}}
|
||||||
|
\expandafter\def\csname faicon@arrow-left\endcsname{{\FAone\symbol{249}}}
|
||||||
|
\expandafter\def\csname faicon@arrow-right\endcsname{{\FAone\symbol{250}}}
|
||||||
|
\expandafter\def\csname faicon@arrow-up\endcsname{{\FAone\symbol{251}}}
|
||||||
|
\expandafter\def\csname faicon@asterisk\endcsname{{\FAone\symbol{252}}}
|
||||||
|
\expandafter\def\csname faicon@backward\endcsname{{\FAone\symbol{253}}}
|
||||||
|
\expandafter\def\csname faicon@ban\endcsname{{\FAone\symbol{254}}}
|
||||||
|
\expandafter\def\csname faicon@bar-chart\endcsname{{\FAone\symbol{255}}}
|
||||||
|
\expandafter\def\csname faicon@barcode\endcsname{{\FAtwo\symbol{0}}}
|
||||||
|
\expandafter\def\csname faicon@flask\endcsname{{\FAtwo\symbol{1}}}
|
||||||
|
\expandafter\def\csname faicon@beer\endcsname{{\FAtwo\symbol{2}}}
|
||||||
|
\expandafter\def\csname faicon@bell-o\endcsname{{\FAtwo\symbol{3}}}
|
||||||
|
\expandafter\def\csname faicon@bell\endcsname{{\FAtwo\symbol{4}}}
|
||||||
|
\expandafter\def\csname faicon@bitbucket-square\endcsname{{\FAtwo\symbol{5}}}
|
||||||
|
\expandafter\def\csname faicon@bold\endcsname{{\FAtwo\symbol{6}}}
|
||||||
|
\expandafter\def\csname faicon@bolt\endcsname{{\FAtwo\symbol{7}}}
|
||||||
|
\expandafter\def\csname faicon@book\endcsname{{\FAtwo\symbol{8}}}
|
||||||
|
\expandafter\def\csname faicon@bookmark\endcsname{{\FAtwo\symbol{9}}}
|
||||||
|
\expandafter\def\csname faicon@bookmark-o\endcsname{{\FAtwo\symbol{10}}}
|
||||||
|
\expandafter\def\csname faicon@briefcase\endcsname{{\FAtwo\symbol{11}}}
|
||||||
|
\expandafter\def\csname faicon@btc\endcsname{{\FAtwo\symbol{12}}}
|
||||||
|
\expandafter\def\csname faicon@bug\endcsname{{\FAtwo\symbol{13}}}
|
||||||
|
\expandafter\def\csname faicon@building-o\endcsname{{\FAtwo\symbol{14}}}
|
||||||
|
\expandafter\def\csname faicon@bullhorn\endcsname{{\FAtwo\symbol{15}}}
|
||||||
|
\expandafter\def\csname faicon@bullseye\endcsname{{\FAtwo\symbol{16}}}
|
||||||
|
\expandafter\def\csname faicon@calendar\endcsname{{\FAtwo\symbol{17}}}
|
||||||
|
\expandafter\def\csname faicon@calendar-o\endcsname{{\FAtwo\symbol{18}}}
|
||||||
|
\expandafter\def\csname faicon@camera\endcsname{{\FAtwo\symbol{19}}}
|
||||||
|
\expandafter\def\csname faicon@camera-retro\endcsname{{\FAtwo\symbol{20}}}
|
||||||
|
\expandafter\def\csname faicon@caret-down\endcsname{{\FAtwo\symbol{21}}}
|
||||||
|
\expandafter\def\csname faicon@caret-left\endcsname{{\FAtwo\symbol{22}}}
|
||||||
|
\expandafter\def\csname faicon@caret-right\endcsname{{\FAtwo\symbol{23}}}
|
||||||
|
\expandafter\def\csname faicon@caret-up\endcsname{{\FAtwo\symbol{24}}}
|
||||||
|
\expandafter\def\csname faicon@certificate\endcsname{{\FAtwo\symbol{25}}}
|
||||||
|
\expandafter\def\csname faicon@check-square-o\endcsname{{\FAtwo\symbol{26}}}
|
||||||
|
\expandafter\def\csname faicon@square-o\endcsname{{\FAtwo\symbol{27}}}
|
||||||
|
\expandafter\def\csname faicon@minus-square-o\endcsname{{\FAtwo\symbol{28}}}
|
||||||
|
\expandafter\def\csname faicon@check-square\endcsname{{\FAtwo\symbol{29}}}
|
||||||
|
\expandafter\def\csname faicon@chevron-down\endcsname{{\FAtwo\symbol{30}}}
|
||||||
|
\expandafter\def\csname faicon@chevron-left\endcsname{{\FAtwo\symbol{31}}}
|
||||||
|
\expandafter\def\csname faicon@chevron-right\endcsname{{\FAtwo\symbol{32}}}
|
||||||
|
\expandafter\def\csname faicon@chevron-circle-down\endcsname{{\FAtwo\symbol{33}}}
|
||||||
|
\expandafter\def\csname faicon@chevron-circle-left\endcsname{{\FAtwo\symbol{34}}}
|
||||||
|
\expandafter\def\csname faicon@chevron-circle-right\endcsname{{\FAtwo\symbol{35}}}
|
||||||
|
\expandafter\def\csname faicon@chevron-circle-up\endcsname{{\FAtwo\symbol{36}}}
|
||||||
|
\expandafter\def\csname faicon@chevron-up\endcsname{{\FAtwo\symbol{37}}}
|
||||||
|
\expandafter\def\csname faicon@circle\endcsname{{\FAtwo\symbol{38}}}
|
||||||
|
\expandafter\def\csname faicon@arrow-circle-down\endcsname{{\FAtwo\symbol{39}}}
|
||||||
|
\expandafter\def\csname faicon@arrow-circle-left\endcsname{{\FAtwo\symbol{40}}}
|
||||||
|
\expandafter\def\csname faicon@arrow-circle-right\endcsname{{\FAtwo\symbol{41}}}
|
||||||
|
\expandafter\def\csname faicon@arrow-circle-up\endcsname{{\FAtwo\symbol{42}}}
|
||||||
|
\expandafter\def\csname faicon@circle-o\endcsname{{\FAtwo\symbol{43}}}
|
||||||
|
\expandafter\def\csname faicon@cloud\endcsname{{\FAtwo\symbol{44}}}
|
||||||
|
\expandafter\def\csname faicon@cloud-download\endcsname{{\FAtwo\symbol{45}}}
|
||||||
|
\expandafter\def\csname faicon@cloud-upload\endcsname{{\FAtwo\symbol{46}}}
|
||||||
|
\expandafter\def\csname faicon@code\endcsname{{\FAtwo\symbol{47}}}
|
||||||
|
\expandafter\def\csname faicon@code-fork\endcsname{{\FAtwo\symbol{48}}}
|
||||||
|
\expandafter\def\csname faicon@coffee\endcsname{{\FAtwo\symbol{49}}}
|
||||||
|
\expandafter\def\csname faicon@cog\endcsname{{\FAtwo\symbol{50}}}
|
||||||
|
\expandafter\def\csname faicon@cogs\endcsname{{\FAtwo\symbol{51}}}
|
||||||
|
\expandafter\def\csname faicon@caret-square-o-down\endcsname{{\FAtwo\symbol{52}}}
|
||||||
|
\expandafter\def\csname faicon@caret-square-o-up\endcsname{{\FAtwo\symbol{53}}}
|
||||||
|
\expandafter\def\csname faicon@columns\endcsname{{\FAtwo\symbol{54}}}
|
||||||
|
\expandafter\def\csname faicon@comment\endcsname{{\FAtwo\symbol{55}}}
|
||||||
|
\expandafter\def\csname faicon@comment-o\endcsname{{\FAtwo\symbol{56}}}
|
||||||
|
\expandafter\def\csname faicon@comments\endcsname{{\FAtwo\symbol{57}}}
|
||||||
|
\expandafter\def\csname faicon@comments-o\endcsname{{\FAtwo\symbol{58}}}
|
||||||
|
\expandafter\def\csname faicon@compass\endcsname{{\FAtwo\symbol{59}}}
|
||||||
|
\expandafter\def\csname faicon@files-o\endcsname{{\FAtwo\symbol{60}}}
|
||||||
|
\expandafter\def\csname faicon@credit-card\endcsname{{\FAtwo\symbol{61}}}
|
||||||
|
\expandafter\def\csname faicon@crop\endcsname{{\FAtwo\symbol{62}}}
|
||||||
|
\expandafter\def\csname faicon@css3\endcsname{{\FAtwo\symbol{63}}}
|
||||||
|
\expandafter\def\csname faicon@scissors\endcsname{{\FAtwo\symbol{64}}}
|
||||||
|
\expandafter\def\csname faicon@tachometer\endcsname{{\FAtwo\symbol{65}}}
|
||||||
|
\expandafter\def\csname faicon@desktop\endcsname{{\FAtwo\symbol{66}}}
|
||||||
|
\expandafter\def\csname faicon@dot-circle-o\endcsname{{\FAtwo\symbol{67}}}
|
||||||
|
\expandafter\def\csname faicon@angle-double-down\endcsname{{\FAtwo\symbol{68}}}
|
||||||
|
\expandafter\def\csname faicon@angle-double-left\endcsname{{\FAtwo\symbol{69}}}
|
||||||
|
\expandafter\def\csname faicon@angle-double-right\endcsname{{\FAtwo\symbol{70}}}
|
||||||
|
\expandafter\def\csname faicon@angle-double-up\endcsname{{\FAtwo\symbol{71}}}
|
||||||
|
\expandafter\def\csname faicon@arrow-circle-o-down\endcsname{{\FAtwo\symbol{72}}}
|
||||||
|
\expandafter\def\csname faicon@download\endcsname{{\FAtwo\symbol{73}}}
|
||||||
|
\expandafter\def\csname faicon@dribbble\endcsname{{\FAtwo\symbol{74}}}
|
||||||
|
\expandafter\def\csname faicon@dropbox\endcsname{{\FAtwo\symbol{75}}}
|
||||||
|
\expandafter\def\csname faicon@pencil-square-o\endcsname{{\FAtwo\symbol{76}}}
|
||||||
|
\expandafter\def\csname faicon@pencil-square\endcsname{{\FAtwo\symbol{77}}}
|
||||||
|
\expandafter\def\csname faicon@eject\endcsname{{\FAtwo\symbol{78}}}
|
||||||
|
\expandafter\def\csname faicon@ellipsis-h\endcsname{{\FAtwo\symbol{79}}}
|
||||||
|
\expandafter\def\csname faicon@ellipsis-v\endcsname{{\FAtwo\symbol{80}}}
|
||||||
|
\expandafter\def\csname faicon@envelope-o\endcsname{{\FAtwo\symbol{81}}}
|
||||||
|
\expandafter\def\csname faicon@envelope\endcsname{{\FAtwo\symbol{82}}}
|
||||||
|
\expandafter\def\csname faicon@eur\endcsname{{\FAtwo\symbol{83}}}
|
||||||
|
\expandafter\def\csname faicon@exchange\endcsname{{\FAtwo\symbol{84}}}
|
||||||
|
\expandafter\def\csname faicon@exclamation\endcsname{{\FAtwo\symbol{85}}}
|
||||||
|
\expandafter\def\csname faicon@exclamation-circle\endcsname{{\FAtwo\symbol{86}}}
|
||||||
|
\expandafter\def\csname faicon@external-link\endcsname{{\FAtwo\symbol{87}}}
|
||||||
|
\expandafter\def\csname faicon@eye-slash\endcsname{{\FAtwo\symbol{88}}}
|
||||||
|
\expandafter\def\csname faicon@eye\endcsname{{\FAtwo\symbol{89}}}
|
||||||
|
\expandafter\def\csname faicon@plus-square\endcsname{{\FAtwo\symbol{90}}}
|
||||||
|
\expandafter\def\csname faicon@bitbucket\endcsname{{\FAtwo\symbol{91}}}
|
||||||
|
\expandafter\def\csname faicon@reddit\endcsname{{\FAtwo\symbol{92}}}
|
||||||
|
\expandafter\def\csname faicon@stumbleupon\endcsname{{\FAtwo\symbol{93}}}
|
||||||
|
\expandafter\def\csname faicon@language\endcsname{{\FAtwo\symbol{94}}}
|
||||||
|
\expandafter\def\csname faicon@cc-amex\endcsname{{\FAtwo\symbol{95}}}
|
||||||
|
\expandafter\def\csname faicon@paint-brush\endcsname{{\FAtwo\symbol{96}}}
|
||||||
|
\expandafter\def\csname faicon@dashcube\endcsname{{\FAtwo\symbol{97}}}
|
||||||
|
\expandafter\def\csname faicon@leanpub\endcsname{{\FAtwo\symbol{98}}}
|
||||||
|
\expandafter\def\csname faicon@gg\endcsname{{\FAtwo\symbol{99}}}
|
||||||
|
\expandafter\def\csname faicon@gg-circle\endcsname{{\FAtwo\symbol{100}}}
|
||||||
|
\expandafter\def\csname faicon@odnoklassniki\endcsname{{\FAtwo\symbol{101}}}
|
||||||
|
\expandafter\def\csname faicon@black-tie\endcsname{{\FAtwo\symbol{102}}}
|
||||||
|
\expandafter\def\csname faicon@facebook\endcsname{{\FAtwo\symbol{103}}}
|
||||||
|
\expandafter\def\csname faicon@facebook-square\endcsname{{\FAtwo\symbol{104}}}
|
||||||
|
\expandafter\def\csname faicon@video-camera\endcsname{{\FAtwo\symbol{105}}}
|
||||||
|
\expandafter\def\csname faicon@fast-backward\endcsname{{\FAtwo\symbol{106}}}
|
||||||
|
\expandafter\def\csname faicon@fast-forward\endcsname{{\FAtwo\symbol{107}}}
|
||||||
|
\expandafter\def\csname faicon@female\endcsname{{\FAtwo\symbol{108}}}
|
||||||
|
\expandafter\def\csname faicon@fighter-jet\endcsname{{\FAtwo\symbol{109}}}
|
||||||
|
\expandafter\def\csname faicon@file\endcsname{{\FAtwo\symbol{110}}}
|
||||||
|
\expandafter\def\csname faicon@file-o\endcsname{{\FAtwo\symbol{111}}}
|
||||||
|
\expandafter\def\csname faicon@file-text\endcsname{{\FAtwo\symbol{112}}}
|
||||||
|
\expandafter\def\csname faicon@file-text-o\endcsname{{\FAtwo\symbol{113}}}
|
||||||
|
\expandafter\def\csname faicon@film\endcsname{{\FAtwo\symbol{114}}}
|
||||||
|
\expandafter\def\csname faicon@filter\endcsname{{\FAtwo\symbol{115}}}
|
||||||
|
\expandafter\def\csname faicon@fire\endcsname{{\FAtwo\symbol{116}}}
|
||||||
|
\expandafter\def\csname faicon@fire-extinguisher\endcsname{{\FAtwo\symbol{117}}}
|
||||||
|
\expandafter\def\csname faicon@flag\endcsname{{\FAtwo\symbol{118}}}
|
||||||
|
\expandafter\def\csname faicon@flag-o\endcsname{{\FAtwo\symbol{119}}}
|
||||||
|
\expandafter\def\csname faicon@flag-checkered\endcsname{{\FAtwo\symbol{120}}}
|
||||||
|
\expandafter\def\csname faicon@flickr\endcsname{{\FAtwo\symbol{121}}}
|
||||||
|
\expandafter\def\csname faicon@folder\endcsname{{\FAtwo\symbol{122}}}
|
||||||
|
\expandafter\def\csname faicon@folder-o\endcsname{{\FAtwo\symbol{123}}}
|
||||||
|
\expandafter\def\csname faicon@folder-open\endcsname{{\FAtwo\symbol{124}}}
|
||||||
|
\expandafter\def\csname faicon@folder-open-o\endcsname{{\FAtwo\symbol{125}}}
|
||||||
|
\expandafter\def\csname faicon@font\endcsname{{\FAtwo\symbol{126}}}
|
||||||
|
\expandafter\def\csname faicon@cutlery\endcsname{{\FAtwo\symbol{127}}}
|
||||||
|
\expandafter\def\csname faicon@forward\endcsname{{\FAtwo\symbol{128}}}
|
||||||
|
\expandafter\def\csname faicon@foursquare\endcsname{{\FAtwo\symbol{129}}}
|
||||||
|
\expandafter\def\csname faicon@frown-o\endcsname{{\FAtwo\symbol{130}}}
|
||||||
|
\expandafter\def\csname faicon@arrows-alt\endcsname{{\FAtwo\symbol{131}}}
|
||||||
|
\expandafter\def\csname faicon@gamepad\endcsname{{\FAtwo\symbol{132}}}
|
||||||
|
\expandafter\def\csname faicon@gbp\endcsname{{\FAtwo\symbol{133}}}
|
||||||
|
\expandafter\def\csname faicon@gift\endcsname{{\FAtwo\symbol{134}}}
|
||||||
|
\expandafter\def\csname faicon@github\endcsname{{\FAtwo\symbol{135}}}
|
||||||
|
\expandafter\def\csname faicon@github-alt\endcsname{{\FAtwo\symbol{136}}}
|
||||||
|
\expandafter\def\csname faicon@github-square\endcsname{{\FAtwo\symbol{137}}}
|
||||||
|
\expandafter\def\csname faicon@gratipay\endcsname{{\FAtwo\symbol{138}}}
|
||||||
|
\expandafter\def\csname faicon@glass\endcsname{{\FAtwo\symbol{139}}}
|
||||||
|
\expandafter\def\csname faicon@globe\endcsname{{\FAtwo\symbol{140}}}
|
||||||
|
\expandafter\def\csname faicon@google-plus\endcsname{{\FAtwo\symbol{141}}}
|
||||||
|
\expandafter\def\csname faicon@google-plus-square\endcsname{{\FAtwo\symbol{142}}}
|
||||||
|
\expandafter\def\csname faicon@users\endcsname{{\FAtwo\symbol{143}}}
|
||||||
|
\expandafter\def\csname faicon@h-square\endcsname{{\FAtwo\symbol{144}}}
|
||||||
|
\expandafter\def\csname faicon@hand-o-down\endcsname{{\FAtwo\symbol{145}}}
|
||||||
|
\expandafter\def\csname faicon@hand-o-left\endcsname{{\FAtwo\symbol{146}}}
|
||||||
|
\expandafter\def\csname faicon@hand-o-right\endcsname{{\FAtwo\symbol{147}}}
|
||||||
|
\expandafter\def\csname faicon@hand-o-up\endcsname{{\FAtwo\symbol{148}}}
|
||||||
|
\expandafter\def\csname faicon@hdd-o\endcsname{{\FAtwo\symbol{149}}}
|
||||||
|
\expandafter\def\csname faicon@headphones\endcsname{{\FAtwo\symbol{150}}}
|
||||||
|
\expandafter\def\csname faicon@heart\endcsname{{\FAtwo\symbol{151}}}
|
||||||
|
\expandafter\def\csname faicon@heart-o\endcsname{{\FAtwo\symbol{152}}}
|
||||||
|
\expandafter\def\csname faicon@home\endcsname{{\FAtwo\symbol{153}}}
|
||||||
|
\expandafter\def\csname faicon@hospital-o\endcsname{{\FAtwo\symbol{154}}}
|
||||||
|
\expandafter\def\csname faicon@html5\endcsname{{\FAtwo\symbol{155}}}
|
||||||
|
\expandafter\def\csname faicon@inbox\endcsname{{\FAtwo\symbol{156}}}
|
||||||
|
\expandafter\def\csname faicon@outdent\endcsname{{\FAtwo\symbol{157}}}
|
||||||
|
\expandafter\def\csname faicon@indent\endcsname{{\FAtwo\symbol{158}}}
|
||||||
|
\expandafter\def\csname faicon@info-circle\endcsname{{\FAtwo\symbol{159}}}
|
||||||
|
\expandafter\def\csname faicon@inr\endcsname{{\FAtwo\symbol{160}}}
|
||||||
|
\expandafter\def\csname faicon@instagram\endcsname{{\FAtwo\symbol{161}}}
|
||||||
|
\expandafter\def\csname faicon@italic\endcsname{{\FAtwo\symbol{162}}}
|
||||||
|
\expandafter\def\csname faicon@jpy\endcsname{{\FAtwo\symbol{163}}}
|
||||||
|
\expandafter\def\csname faicon@key\endcsname{{\FAtwo\symbol{164}}}
|
||||||
|
\expandafter\def\csname faicon@keyboard-o\endcsname{{\FAtwo\symbol{165}}}
|
||||||
|
\expandafter\def\csname faicon@krw\endcsname{{\FAtwo\symbol{166}}}
|
||||||
|
\expandafter\def\csname faicon@laptop\endcsname{{\FAtwo\symbol{167}}}
|
||||||
|
\expandafter\def\csname faicon@leaf\endcsname{{\FAtwo\symbol{168}}}
|
||||||
|
\expandafter\def\csname faicon@gavel\endcsname{{\FAtwo\symbol{169}}}
|
||||||
|
\expandafter\def\csname faicon@lemon-o\endcsname{{\FAtwo\symbol{170}}}
|
||||||
|
\expandafter\def\csname faicon@level-down\endcsname{{\FAtwo\symbol{171}}}
|
||||||
|
\expandafter\def\csname faicon@level-up\endcsname{{\FAtwo\symbol{172}}}
|
||||||
|
\expandafter\def\csname faicon@lightbulb-o\endcsname{{\FAtwo\symbol{173}}}
|
||||||
|
\expandafter\def\csname faicon@link\endcsname{{\FAtwo\symbol{174}}}
|
||||||
|
\expandafter\def\csname faicon@linkedin\endcsname{{\FAtwo\symbol{175}}}
|
||||||
|
\expandafter\def\csname faicon@linkedin-square\endcsname{{\FAtwo\symbol{176}}}
|
||||||
|
\expandafter\def\csname faicon@linux\endcsname{{\FAtwo\symbol{177}}}
|
||||||
|
\expandafter\def\csname faicon@list\endcsname{{\FAtwo\symbol{178}}}
|
||||||
|
\expandafter\def\csname faicon@list-alt\endcsname{{\FAtwo\symbol{179}}}
|
||||||
|
\expandafter\def\csname faicon@location-arrow\endcsname{{\FAtwo\symbol{180}}}
|
||||||
|
\expandafter\def\csname faicon@lock\endcsname{{\FAtwo\symbol{181}}}
|
||||||
|
\expandafter\def\csname faicon@long-arrow-down\endcsname{{\FAtwo\symbol{182}}}
|
||||||
|
\expandafter\def\csname faicon@long-arrow-left\endcsname{{\FAtwo\symbol{183}}}
|
||||||
|
\expandafter\def\csname faicon@long-arrow-right\endcsname{{\FAtwo\symbol{184}}}
|
||||||
|
\expandafter\def\csname faicon@long-arrow-up\endcsname{{\FAtwo\symbol{185}}}
|
||||||
|
\expandafter\def\csname faicon@magic\endcsname{{\FAtwo\symbol{186}}}
|
||||||
|
\expandafter\def\csname faicon@magnet\endcsname{{\FAtwo\symbol{187}}}
|
||||||
|
\expandafter\def\csname faicon@male\endcsname{{\FAtwo\symbol{188}}}
|
||||||
|
\expandafter\def\csname faicon@map-marker\endcsname{{\FAtwo\symbol{189}}}
|
||||||
|
\expandafter\def\csname faicon@maxcdn\endcsname{{\FAtwo\symbol{190}}}
|
||||||
|
\expandafter\def\csname faicon@medkit\endcsname{{\FAtwo\symbol{191}}}
|
||||||
|
\expandafter\def\csname faicon@meh-o\endcsname{{\FAtwo\symbol{192}}}
|
||||||
|
\expandafter\def\csname faicon@microphone\endcsname{{\FAtwo\symbol{193}}}
|
||||||
|
\expandafter\def\csname faicon@microphone-slash\endcsname{{\FAtwo\symbol{194}}}
|
||||||
|
\expandafter\def\csname faicon@minus\endcsname{{\FAtwo\symbol{195}}}
|
||||||
|
\expandafter\def\csname faicon@minus-circle\endcsname{{\FAtwo\symbol{196}}}
|
||||||
|
\expandafter\def\csname faicon@minus-square\endcsname{{\FAtwo\symbol{197}}}
|
||||||
|
\expandafter\def\csname faicon@mobile\endcsname{{\FAtwo\symbol{198}}}
|
||||||
|
\expandafter\def\csname faicon@money\endcsname{{\FAtwo\symbol{199}}}
|
||||||
|
\expandafter\def\csname faicon@arrows\endcsname{{\FAtwo\symbol{200}}}
|
||||||
|
\expandafter\def\csname faicon@music\endcsname{{\FAtwo\symbol{201}}}
|
||||||
|
\expandafter\def\csname faicon@power-off\endcsname{{\FAtwo\symbol{202}}}
|
||||||
|
\expandafter\def\csname faicon@check\endcsname{{\FAtwo\symbol{203}}}
|
||||||
|
\expandafter\def\csname faicon@check-circle-o\endcsname{{\FAtwo\symbol{204}}}
|
||||||
|
\expandafter\def\csname faicon@check-circle\endcsname{{\FAtwo\symbol{205}}}
|
||||||
|
\expandafter\def\csname faicon@list-ol\endcsname{{\FAtwo\symbol{206}}}
|
||||||
|
\expandafter\def\csname faicon@paperclip\endcsname{{\FAtwo\symbol{207}}}
|
||||||
|
\expandafter\def\csname faicon@clipboard\endcsname{{\FAtwo\symbol{208}}}
|
||||||
|
\expandafter\def\csname faicon@pause\endcsname{{\FAtwo\symbol{209}}}
|
||||||
|
\expandafter\def\csname faicon@pencil\endcsname{{\FAtwo\symbol{210}}}
|
||||||
|
\expandafter\def\csname faicon@phone\endcsname{{\FAtwo\symbol{211}}}
|
||||||
|
\expandafter\def\csname faicon@phone-square\endcsname{{\FAtwo\symbol{212}}}
|
||||||
|
\expandafter\def\csname faicon@picture-o\endcsname{{\FAtwo\symbol{213}}}
|
||||||
|
\expandafter\def\csname faicon@pinterest\endcsname{{\FAtwo\symbol{214}}}
|
||||||
|
\expandafter\def\csname faicon@pinterest-square\endcsname{{\FAtwo\symbol{215}}}
|
||||||
|
\expandafter\def\csname faicon@plane\endcsname{{\FAtwo\symbol{216}}}
|
||||||
|
\expandafter\def\csname faicon@play\endcsname{{\FAtwo\symbol{217}}}
|
||||||
|
\expandafter\def\csname faicon@play-circle-o\endcsname{{\FAtwo\symbol{218}}}
|
||||||
|
\expandafter\def\csname faicon@play-circle\endcsname{{\FAtwo\symbol{219}}}
|
||||||
|
\expandafter\def\csname faicon@plus\endcsname{{\FAtwo\symbol{220}}}
|
||||||
|
\expandafter\def\csname faicon@plus-circle\endcsname{{\FAtwo\symbol{221}}}
|
||||||
|
\expandafter\def\csname faicon@plus-square-o\endcsname{{\FAtwo\symbol{222}}}
|
||||||
|
\expandafter\def\csname faicon@print\endcsname{{\FAtwo\symbol{223}}}
|
||||||
|
\expandafter\def\csname faicon@thumb-tack\endcsname{{\FAtwo\symbol{224}}}
|
||||||
|
\expandafter\def\csname faicon@puzzle-piece\endcsname{{\FAtwo\symbol{225}}}
|
||||||
|
\expandafter\def\csname faicon@qrcode\endcsname{{\FAtwo\symbol{226}}}
|
||||||
|
\expandafter\def\csname faicon@question\endcsname{{\FAtwo\symbol{227}}}
|
||||||
|
\expandafter\def\csname faicon@question-circle\endcsname{{\FAtwo\symbol{228}}}
|
||||||
|
\expandafter\def\csname faicon@quote-left\endcsname{{\FAtwo\symbol{229}}}
|
||||||
|
\expandafter\def\csname faicon@quote-right\endcsname{{\FAtwo\symbol{230}}}
|
||||||
|
\expandafter\def\csname faicon@random\endcsname{{\FAtwo\symbol{231}}}
|
||||||
|
\expandafter\def\csname faicon@refresh\endcsname{{\FAtwo\symbol{232}}}
|
||||||
|
\expandafter\def\csname faicon@times\endcsname{{\FAtwo\symbol{233}}}
|
||||||
|
\expandafter\def\csname faicon@times-circle-o\endcsname{{\FAtwo\symbol{234}}}
|
||||||
|
\expandafter\def\csname faicon@times-circle\endcsname{{\FAtwo\symbol{235}}}
|
||||||
|
\expandafter\def\csname faicon@renren\endcsname{{\FAtwo\symbol{236}}}
|
||||||
|
\expandafter\def\csname faicon@bars\endcsname{{\FAtwo\symbol{237}}}
|
||||||
|
\expandafter\def\csname faicon@repeat\endcsname{{\FAtwo\symbol{238}}}
|
||||||
|
\expandafter\def\csname faicon@reply\endcsname{{\FAtwo\symbol{239}}}
|
||||||
|
\expandafter\def\csname faicon@reply-all\endcsname{{\FAtwo\symbol{240}}}
|
||||||
|
\expandafter\def\csname faicon@expand\endcsname{{\FAtwo\symbol{241}}}
|
||||||
|
\expandafter\def\csname faicon@arrows-h\endcsname{{\FAtwo\symbol{242}}}
|
||||||
|
\expandafter\def\csname faicon@compress\endcsname{{\FAtwo\symbol{243}}}
|
||||||
|
\expandafter\def\csname faicon@arrows-v\endcsname{{\FAtwo\symbol{244}}}
|
||||||
|
\expandafter\def\csname faicon@retweet\endcsname{{\FAtwo\symbol{245}}}
|
||||||
|
\expandafter\def\csname faicon@road\endcsname{{\FAtwo\symbol{246}}}
|
||||||
|
\expandafter\def\csname faicon@rocket\endcsname{{\FAtwo\symbol{247}}}
|
||||||
|
\expandafter\def\csname faicon@rss\endcsname{{\FAtwo\symbol{248}}}
|
||||||
|
\expandafter\def\csname faicon@rub\endcsname{{\FAtwo\symbol{249}}}
|
||||||
|
\expandafter\def\csname faicon@floppy-o\endcsname{{\FAtwo\symbol{250}}}
|
||||||
|
\expandafter\def\csname faicon@crosshairs\endcsname{{\FAtwo\symbol{251}}}
|
||||||
|
\expandafter\def\csname faicon@search\endcsname{{\FAtwo\symbol{252}}}
|
||||||
|
\expandafter\def\csname faicon@share-square-o\endcsname{{\FAtwo\symbol{253}}}
|
||||||
|
\expandafter\def\csname faicon@share\endcsname{{\FAtwo\symbol{254}}}
|
||||||
|
\expandafter\def\csname faicon@share-square\endcsname{{\FAtwo\symbol{255}}}
|
||||||
|
\expandafter\def\csname faicon@shield\endcsname{{\FAthree\symbol{0}}}
|
||||||
|
\expandafter\def\csname faicon@shopping-cart\endcsname{{\FAthree\symbol{1}}}
|
||||||
|
\expandafter\def\csname faicon@square\endcsname{{\FAthree\symbol{2}}}
|
||||||
|
\expandafter\def\csname faicon@signal\endcsname{{\FAthree\symbol{3}}}
|
||||||
|
\expandafter\def\csname faicon@sign-in\endcsname{{\FAthree\symbol{4}}}
|
||||||
|
\expandafter\def\csname faicon@sign-out\endcsname{{\FAthree\symbol{5}}}
|
||||||
|
\expandafter\def\csname faicon@sitemap\endcsname{{\FAthree\symbol{6}}}
|
||||||
|
\expandafter\def\csname faicon@skype\endcsname{{\FAthree\symbol{7}}}
|
||||||
|
\expandafter\def\csname faicon@smile-o\endcsname{{\FAthree\symbol{8}}}
|
||||||
|
\expandafter\def\csname faicon@sort\endcsname{{\FAthree\symbol{9}}}
|
||||||
|
\expandafter\def\csname faicon@sort-alpha-asc\endcsname{{\FAthree\symbol{10}}}
|
||||||
|
\expandafter\def\csname faicon@sort-amount-asc\endcsname{{\FAthree\symbol{11}}}
|
||||||
|
\expandafter\def\csname faicon@sort-amount-desc\endcsname{{\FAthree\symbol{12}}}
|
||||||
|
\expandafter\def\csname faicon@sort-numeric-asc\endcsname{{\FAthree\symbol{13}}}
|
||||||
|
\expandafter\def\csname faicon@sort-numeric-desc\endcsname{{\FAthree\symbol{14}}}
|
||||||
|
\expandafter\def\csname faicon@sort-desc\endcsname{{\FAthree\symbol{15}}}
|
||||||
|
\expandafter\def\csname faicon@sort-asc\endcsname{{\FAthree\symbol{16}}}
|
||||||
|
\expandafter\def\csname faicon@spinner\endcsname{{\FAthree\symbol{17}}}
|
||||||
|
\expandafter\def\csname faicon@stack-exchange\endcsname{{\FAthree\symbol{18}}}
|
||||||
|
\expandafter\def\csname faicon@stack-overflow\endcsname{{\FAthree\symbol{19}}}
|
||||||
|
\expandafter\def\csname faicon@star\endcsname{{\FAthree\symbol{20}}}
|
||||||
|
\expandafter\def\csname faicon@star-o\endcsname{{\FAthree\symbol{21}}}
|
||||||
|
\expandafter\def\csname faicon@star-half\endcsname{{\FAthree\symbol{22}}}
|
||||||
|
\expandafter\def\csname faicon@star-half-o\endcsname{{\FAthree\symbol{23}}}
|
||||||
|
\expandafter\def\csname faicon@step-backward\endcsname{{\FAthree\symbol{24}}}
|
||||||
|
\expandafter\def\csname faicon@step-forward\endcsname{{\FAthree\symbol{25}}}
|
||||||
|
\expandafter\def\csname faicon@stethoscope\endcsname{{\FAthree\symbol{26}}}
|
||||||
|
\expandafter\def\csname faicon@stop\endcsname{{\FAthree\symbol{27}}}
|
||||||
|
\expandafter\def\csname faicon@strikethrough\endcsname{{\FAthree\symbol{28}}}
|
||||||
|
\expandafter\def\csname faicon@subscript\endcsname{{\FAthree\symbol{29}}}
|
||||||
|
\expandafter\def\csname faicon@suitcase\endcsname{{\FAthree\symbol{30}}}
|
||||||
|
\expandafter\def\csname faicon@sun-o\endcsname{{\FAthree\symbol{31}}}
|
||||||
|
\expandafter\def\csname faicon@superscript\endcsname{{\FAthree\symbol{32}}}
|
||||||
|
\expandafter\def\csname faicon@table\endcsname{{\FAthree\symbol{33}}}
|
||||||
|
\expandafter\def\csname faicon@tablet\endcsname{{\FAthree\symbol{34}}}
|
||||||
|
\expandafter\def\csname faicon@tag\endcsname{{\FAthree\symbol{35}}}
|
||||||
|
\expandafter\def\csname faicon@tags\endcsname{{\FAthree\symbol{36}}}
|
||||||
|
\expandafter\def\csname faicon@tasks\endcsname{{\FAthree\symbol{37}}}
|
||||||
|
\expandafter\def\csname faicon@terminal\endcsname{{\FAthree\symbol{38}}}
|
||||||
|
\expandafter\def\csname faicon@text-height\endcsname{{\FAthree\symbol{39}}}
|
||||||
|
\expandafter\def\csname faicon@text-width\endcsname{{\FAthree\symbol{40}}}
|
||||||
|
\expandafter\def\csname faicon@th\endcsname{{\FAthree\symbol{41}}}
|
||||||
|
\expandafter\def\csname faicon@th-large\endcsname{{\FAthree\symbol{42}}}
|
||||||
|
\expandafter\def\csname faicon@th-list\endcsname{{\FAthree\symbol{43}}}
|
||||||
|
\expandafter\def\csname faicon@thumbs-o-down\endcsname{{\FAthree\symbol{44}}}
|
||||||
|
\expandafter\def\csname faicon@thumbs-o-up\endcsname{{\FAthree\symbol{45}}}
|
||||||
|
\expandafter\def\csname faicon@ticket\endcsname{{\FAthree\symbol{46}}}
|
||||||
|
\expandafter\def\csname faicon@clock-o\endcsname{{\FAthree\symbol{47}}}
|
||||||
|
\expandafter\def\csname faicon@tint\endcsname{{\FAthree\symbol{48}}}
|
||||||
|
\expandafter\def\csname faicon@trash-o\endcsname{{\FAthree\symbol{49}}}
|
||||||
|
\expandafter\def\csname faicon@trello\endcsname{{\FAthree\symbol{50}}}
|
||||||
|
\expandafter\def\csname faicon@trophy\endcsname{{\FAthree\symbol{51}}}
|
||||||
|
\expandafter\def\csname faicon@truck\endcsname{{\FAthree\symbol{52}}}
|
||||||
|
\expandafter\def\csname faicon@tumblr\endcsname{{\FAthree\symbol{53}}}
|
||||||
|
\expandafter\def\csname faicon@tumblr-square\endcsname{{\FAthree\symbol{54}}}
|
||||||
|
\expandafter\def\csname faicon@twitter\endcsname{{\FAthree\symbol{55}}}
|
||||||
|
\expandafter\def\csname faicon@twitter-square\endcsname{{\FAthree\symbol{56}}}
|
||||||
|
\expandafter\def\csname faicon@list-ul\endcsname{{\FAthree\symbol{57}}}
|
||||||
|
\expandafter\def\csname faicon@umbrella\endcsname{{\FAthree\symbol{58}}}
|
||||||
|
\expandafter\def\csname faicon@underline\endcsname{{\FAthree\symbol{59}}}
|
||||||
|
\expandafter\def\csname faicon@undo\endcsname{{\FAthree\symbol{60}}}
|
||||||
|
\expandafter\def\csname faicon@google\endcsname{{\FAthree\symbol{61}}}
|
||||||
|
\expandafter\def\csname faicon@paw\endcsname{{\FAthree\symbol{62}}}
|
||||||
|
\expandafter\def\csname faicon@database\endcsname{{\FAthree\symbol{63}}}
|
||||||
|
\expandafter\def\csname faicon@file-pdf-o\endcsname{{\FAthree\symbol{64}}}
|
||||||
|
\expandafter\def\csname faicon@rebel\endcsname{{\FAthree\symbol{65}}}
|
||||||
|
\expandafter\def\csname faicon@empire\endcsname{{\FAthree\symbol{66}}}
|
||||||
|
\expandafter\def\csname faicon@git-square\endcsname{{\FAthree\symbol{67}}}
|
||||||
|
\expandafter\def\csname faicon@tencent-weibo\endcsname{{\FAthree\symbol{68}}}
|
||||||
|
\expandafter\def\csname faicon@qq\endcsname{{\FAthree\symbol{69}}}
|
||||||
|
\expandafter\def\csname faicon@weixin\endcsname{{\FAthree\symbol{70}}}
|
||||||
|
\expandafter\def\csname faicon@share-alt\endcsname{{\FAthree\symbol{71}}}
|
||||||
|
\expandafter\def\csname faicon@cc-visa\endcsname{{\FAthree\symbol{72}}}
|
||||||
|
\expandafter\def\csname faicon@fonticons\endcsname{{\FAthree\symbol{73}}}
|
||||||
|
\expandafter\def\csname faicon@reddit-alien\endcsname{{\FAthree\symbol{74}}}
|
||||||
|
\expandafter\def\csname faicon@modx\endcsname{{\FAthree\symbol{75}}}
|
||||||
|
\expandafter\def\csname faicon@fort-awesome\endcsname{{\FAthree\symbol{76}}}
|
||||||
|
\expandafter\def\csname faicon@volume-control-phone\endcsname{{\FAthree\symbol{77}}}
|
||||||
|
\expandafter\def\csname faicon@braille\endcsname{{\FAthree\symbol{78}}}
|
||||||
|
\expandafter\def\csname faicon@assistive-listening-systems\endcsname{{\FAthree\symbol{79}}}
|
||||||
|
\expandafter\def\csname faicon@american-sign-language-interpreting\endcsname{{\FAthree\symbol{80}}}
|
||||||
|
\expandafter\def\csname faicon@deaf\endcsname{{\FAthree\symbol{81}}}
|
||||||
|
\expandafter\def\csname faicon@glide\endcsname{{\FAthree\symbol{82}}}
|
||||||
|
\expandafter\def\csname faicon@glide-g\endcsname{{\FAthree\symbol{83}}}
|
||||||
|
\expandafter\def\csname faicon@sign-language\endcsname{{\FAthree\symbol{84}}}
|
||||||
|
\expandafter\def\csname faicon@low-vision\endcsname{{\FAthree\symbol{85}}}
|
||||||
|
\expandafter\def\csname faicon@viadeo\endcsname{{\FAthree\symbol{86}}}
|
||||||
|
\expandafter\def\csname faicon@viadeo-square\endcsname{{\FAthree\symbol{87}}}
|
||||||
|
\expandafter\def\csname faicon@snapchat\endcsname{{\FAthree\symbol{88}}}
|
||||||
|
\expandafter\def\csname faicon@snapchat-ghost\endcsname{{\FAthree\symbol{89}}}
|
||||||
|
\expandafter\def\csname faicon@snapchat-square\endcsname{{\FAthree\symbol{90}}}
|
||||||
|
\expandafter\def\csname faicon@pied-piper\endcsname{{\FAthree\symbol{91}}}
|
||||||
|
\expandafter\def\csname faicon@first-order\endcsname{{\FAthree\symbol{92}}}
|
||||||
|
\expandafter\def\csname faicon@yoast\endcsname{{\FAthree\symbol{93}}}
|
||||||
|
\expandafter\def\csname faicon@themeisle\endcsname{{\FAthree\symbol{94}}}
|
||||||
|
\expandafter\def\csname faicon@google-plus-official\endcsname{{\FAthree\symbol{95}}}
|
||||||
|
\expandafter\def\csname faicon@font-awesome\endcsname{{\FAthree\symbol{96}}}
|
||||||
|
\expandafter\def\csname faicon@chain-broken\endcsname{{\FAthree\symbol{97}}}
|
||||||
|
\expandafter\def\csname faicon@unlock\endcsname{{\FAthree\symbol{98}}}
|
||||||
|
\expandafter\def\csname faicon@unlock-alt\endcsname{{\FAthree\symbol{99}}}
|
||||||
|
\expandafter\def\csname faicon@arrow-circle-o-up\endcsname{{\FAthree\symbol{100}}}
|
||||||
|
\expandafter\def\csname faicon@upload\endcsname{{\FAthree\symbol{101}}}
|
||||||
|
\expandafter\def\csname faicon@usd\endcsname{{\FAthree\symbol{102}}}
|
||||||
|
\expandafter\def\csname faicon@user\endcsname{{\FAthree\symbol{103}}}
|
||||||
|
\expandafter\def\csname faicon@user-md\endcsname{{\FAthree\symbol{104}}}
|
||||||
|
\expandafter\def\csname faicon@venus\endcsname{{\FAthree\symbol{105}}}
|
||||||
|
\expandafter\def\csname faicon@vimeo-square\endcsname{{\FAthree\symbol{106}}}
|
||||||
|
\expandafter\def\csname faicon@vk\endcsname{{\FAthree\symbol{107}}}
|
||||||
|
\expandafter\def\csname faicon@volume-down\endcsname{{\FAthree\symbol{108}}}
|
||||||
|
\expandafter\def\csname faicon@volume-off\endcsname{{\FAthree\symbol{109}}}
|
||||||
|
\expandafter\def\csname faicon@volume-up\endcsname{{\FAthree\symbol{110}}}
|
||||||
|
\expandafter\def\csname faicon@exclamation-triangle\endcsname{{\FAthree\symbol{111}}}
|
||||||
|
\expandafter\def\csname faicon@weibo\endcsname{{\FAthree\symbol{112}}}
|
||||||
|
\expandafter\def\csname faicon@windows\endcsname{{\FAthree\symbol{113}}}
|
||||||
|
\expandafter\def\csname faicon@wrench\endcsname{{\FAthree\symbol{114}}}
|
||||||
|
\expandafter\def\csname faicon@xing\endcsname{{\FAthree\symbol{115}}}
|
||||||
|
\expandafter\def\csname faicon@xing-square\endcsname{{\FAthree\symbol{116}}}
|
||||||
|
\expandafter\def\csname faicon@youtube\endcsname{{\FAthree\symbol{117}}}
|
||||||
|
\expandafter\def\csname faicon@youtube-play\endcsname{{\FAthree\symbol{118}}}
|
||||||
|
\expandafter\def\csname faicon@youtube-square\endcsname{{\FAthree\symbol{119}}}
|
||||||
|
\expandafter\def\csname faicon@search-plus\endcsname{{\FAthree\symbol{120}}}
|
||||||
|
\expandafter\def\csname faicon@search-minus\endcsname{{\FAthree\symbol{121}}}
|
||||||
|
|
||||||
|
%% end of file `fontawesomesymbols-pdftex.tex'.
|
||||||
@@ -0,0 +1,634 @@
|
|||||||
|
\expandafter\def\csname faicon@glass\endcsname{{\FA\symbol{"F000}}}
|
||||||
|
\expandafter\def\csname faicon@music\endcsname{{\FA\symbol{"F001}}}
|
||||||
|
\expandafter\def\csname faicon@search\endcsname{{\FA\symbol{"F002}}}
|
||||||
|
\expandafter\def\csname faicon@envelope-o\endcsname{{\FA\symbol{"F003}}}
|
||||||
|
\expandafter\def\csname faicon@heart\endcsname{{\FA\symbol{"F004}}}
|
||||||
|
\expandafter\def\csname faicon@star\endcsname{{\FA\symbol{"F005}}}
|
||||||
|
\expandafter\def\csname faicon@star-o\endcsname{{\FA\symbol{"F006}}}
|
||||||
|
\expandafter\def\csname faicon@user\endcsname{{\FA\symbol{"F007}}}
|
||||||
|
\expandafter\def\csname faicon@film\endcsname{{\FA\symbol{"F008}}}
|
||||||
|
\expandafter\def\csname faicon@th-large\endcsname{{\FA\symbol{"F009}}}
|
||||||
|
\expandafter\def\csname faicon@th\endcsname{{\FA\symbol{"F00A}}}
|
||||||
|
\expandafter\def\csname faicon@th-list\endcsname{{\FA\symbol{"F00B}}}
|
||||||
|
\expandafter\def\csname faicon@check\endcsname{{\FA\symbol{"F00C}}}
|
||||||
|
\expandafter\def\csname faicon@times\endcsname{{\FA\symbol{"F00D}}}
|
||||||
|
\expandafter\def\csname faicon@search-plus\endcsname{{\FA\symbol{"F00E}}}
|
||||||
|
\expandafter\def\csname faicon@search-minus\endcsname{{\FA\symbol{"F010}}}
|
||||||
|
\expandafter\def\csname faicon@power-off\endcsname{{\FA\symbol{"F011}}}
|
||||||
|
\expandafter\def\csname faicon@signal\endcsname{{\FA\symbol{"F012}}}
|
||||||
|
\expandafter\def\csname faicon@cog\endcsname{{\FA\symbol{"F013}}}
|
||||||
|
\expandafter\def\csname faicon@trash-o\endcsname{{\FA\symbol{"F014}}}
|
||||||
|
\expandafter\def\csname faicon@home\endcsname{{\FA\symbol{"F015}}}
|
||||||
|
\expandafter\def\csname faicon@file-o\endcsname{{\FA\symbol{"F016}}}
|
||||||
|
\expandafter\def\csname faicon@clock-o\endcsname{{\FA\symbol{"F017}}}
|
||||||
|
\expandafter\def\csname faicon@road\endcsname{{\FA\symbol{"F018}}}
|
||||||
|
\expandafter\def\csname faicon@download\endcsname{{\FA\symbol{"F019}}}
|
||||||
|
\expandafter\def\csname faicon@arrow-circle-o-down\endcsname{{\FA\symbol{"F01A}}}
|
||||||
|
\expandafter\def\csname faicon@arrow-circle-o-up\endcsname{{\FA\symbol{"F01B}}}
|
||||||
|
\expandafter\def\csname faicon@inbox\endcsname{{\FA\symbol{"F01C}}}
|
||||||
|
\expandafter\def\csname faicon@play-circle-o\endcsname{{\FA\symbol{"F01D}}}
|
||||||
|
\expandafter\def\csname faicon@repeat\endcsname{{\FA\symbol{"F01E}}}
|
||||||
|
\expandafter\def\csname faicon@refresh\endcsname{{\FA\symbol{"F021}}}
|
||||||
|
\expandafter\def\csname faicon@list-alt\endcsname{{\FA\symbol{"F022}}}
|
||||||
|
\expandafter\def\csname faicon@lock\endcsname{{\FA\symbol{"F023}}}
|
||||||
|
\expandafter\def\csname faicon@flag\endcsname{{\FA\symbol{"F024}}}
|
||||||
|
\expandafter\def\csname faicon@headphones\endcsname{{\FA\symbol{"F025}}}
|
||||||
|
\expandafter\def\csname faicon@volume-off\endcsname{{\FA\symbol{"F026}}}
|
||||||
|
\expandafter\def\csname faicon@volume-down\endcsname{{\FA\symbol{"F027}}}
|
||||||
|
\expandafter\def\csname faicon@volume-up\endcsname{{\FA\symbol{"F028}}}
|
||||||
|
\expandafter\def\csname faicon@qrcode\endcsname{{\FA\symbol{"F029}}}
|
||||||
|
\expandafter\def\csname faicon@barcode\endcsname{{\FA\symbol{"F02A}}}
|
||||||
|
\expandafter\def\csname faicon@tag\endcsname{{\FA\symbol{"F02B}}}
|
||||||
|
\expandafter\def\csname faicon@tags\endcsname{{\FA\symbol{"F02C}}}
|
||||||
|
\expandafter\def\csname faicon@book\endcsname{{\FA\symbol{"F02D}}}
|
||||||
|
\expandafter\def\csname faicon@bookmark\endcsname{{\FA\symbol{"F02E}}}
|
||||||
|
\expandafter\def\csname faicon@print\endcsname{{\FA\symbol{"F02F}}}
|
||||||
|
\expandafter\def\csname faicon@camera\endcsname{{\FA\symbol{"F030}}}
|
||||||
|
\expandafter\def\csname faicon@font\endcsname{{\FA\symbol{"F031}}}
|
||||||
|
\expandafter\def\csname faicon@bold\endcsname{{\FA\symbol{"F032}}}
|
||||||
|
\expandafter\def\csname faicon@italic\endcsname{{\FA\symbol{"F033}}}
|
||||||
|
\expandafter\def\csname faicon@text-height\endcsname{{\FA\symbol{"F034}}}
|
||||||
|
\expandafter\def\csname faicon@text-width\endcsname{{\FA\symbol{"F035}}}
|
||||||
|
\expandafter\def\csname faicon@align-left\endcsname{{\FA\symbol{"F036}}}
|
||||||
|
\expandafter\def\csname faicon@align-center\endcsname{{\FA\symbol{"F037}}}
|
||||||
|
\expandafter\def\csname faicon@align-right\endcsname{{\FA\symbol{"F038}}}
|
||||||
|
\expandafter\def\csname faicon@align-justify\endcsname{{\FA\symbol{"F039}}}
|
||||||
|
\expandafter\def\csname faicon@list\endcsname{{\FA\symbol{"F03A}}}
|
||||||
|
\expandafter\def\csname faicon@outdent\endcsname{{\FA\symbol{"F03B}}}
|
||||||
|
\expandafter\def\csname faicon@indent\endcsname{{\FA\symbol{"F03C}}}
|
||||||
|
\expandafter\def\csname faicon@video-camera\endcsname{{\FA\symbol{"F03D}}}
|
||||||
|
\expandafter\def\csname faicon@picture-o\endcsname{{\FA\symbol{"F03E}}}
|
||||||
|
\expandafter\def\csname faicon@pencil\endcsname{{\FA\symbol{"F040}}}
|
||||||
|
\expandafter\def\csname faicon@map-marker\endcsname{{\FA\symbol{"F041}}}
|
||||||
|
\expandafter\def\csname faicon@adjust\endcsname{{\FA\symbol{"F042}}}
|
||||||
|
\expandafter\def\csname faicon@tint\endcsname{{\FA\symbol{"F043}}}
|
||||||
|
\expandafter\def\csname faicon@pencil-square-o\endcsname{{\FA\symbol{"F044}}}
|
||||||
|
\expandafter\def\csname faicon@share-square-o\endcsname{{\FA\symbol{"F045}}}
|
||||||
|
\expandafter\def\csname faicon@check-square-o\endcsname{{\FA\symbol{"F046}}}
|
||||||
|
\expandafter\def\csname faicon@arrows\endcsname{{\FA\symbol{"F047}}}
|
||||||
|
\expandafter\def\csname faicon@step-backward\endcsname{{\FA\symbol{"F048}}}
|
||||||
|
\expandafter\def\csname faicon@fast-backward\endcsname{{\FA\symbol{"F049}}}
|
||||||
|
\expandafter\def\csname faicon@backward\endcsname{{\FA\symbol{"F04A}}}
|
||||||
|
\expandafter\def\csname faicon@play\endcsname{{\FA\symbol{"F04B}}}
|
||||||
|
\expandafter\def\csname faicon@pause\endcsname{{\FA\symbol{"F04C}}}
|
||||||
|
\expandafter\def\csname faicon@stop\endcsname{{\FA\symbol{"F04D}}}
|
||||||
|
\expandafter\def\csname faicon@forward\endcsname{{\FA\symbol{"F04E}}}
|
||||||
|
\expandafter\def\csname faicon@fast-forward\endcsname{{\FA\symbol{"F050}}}
|
||||||
|
\expandafter\def\csname faicon@step-forward\endcsname{{\FA\symbol{"F051}}}
|
||||||
|
\expandafter\def\csname faicon@eject\endcsname{{\FA\symbol{"F052}}}
|
||||||
|
\expandafter\def\csname faicon@chevron-left\endcsname{{\FA\symbol{"F053}}}
|
||||||
|
\expandafter\def\csname faicon@chevron-right\endcsname{{\FA\symbol{"F054}}}
|
||||||
|
\expandafter\def\csname faicon@plus-circle\endcsname{{\FA\symbol{"F055}}}
|
||||||
|
\expandafter\def\csname faicon@minus-circle\endcsname{{\FA\symbol{"F056}}}
|
||||||
|
\expandafter\def\csname faicon@times-circle\endcsname{{\FA\symbol{"F057}}}
|
||||||
|
\expandafter\def\csname faicon@check-circle\endcsname{{\FA\symbol{"F058}}}
|
||||||
|
\expandafter\def\csname faicon@question-circle\endcsname{{\FA\symbol{"F059}}}
|
||||||
|
\expandafter\def\csname faicon@info-circle\endcsname{{\FA\symbol{"F05A}}}
|
||||||
|
\expandafter\def\csname faicon@crosshairs\endcsname{{\FA\symbol{"F05B}}}
|
||||||
|
\expandafter\def\csname faicon@times-circle-o\endcsname{{\FA\symbol{"F05C}}}
|
||||||
|
\expandafter\def\csname faicon@check-circle-o\endcsname{{\FA\symbol{"F05D}}}
|
||||||
|
\expandafter\def\csname faicon@ban\endcsname{{\FA\symbol{"F05E}}}
|
||||||
|
\expandafter\def\csname faicon@arrow-left\endcsname{{\FA\symbol{"F060}}}
|
||||||
|
\expandafter\def\csname faicon@arrow-right\endcsname{{\FA\symbol{"F061}}}
|
||||||
|
\expandafter\def\csname faicon@arrow-up\endcsname{{\FA\symbol{"F062}}}
|
||||||
|
\expandafter\def\csname faicon@arrow-down\endcsname{{\FA\symbol{"F063}}}
|
||||||
|
\expandafter\def\csname faicon@share\endcsname{{\FA\symbol{"F064}}}
|
||||||
|
\expandafter\def\csname faicon@expand\endcsname{{\FA\symbol{"F065}}}
|
||||||
|
\expandafter\def\csname faicon@compress\endcsname{{\FA\symbol{"F066}}}
|
||||||
|
\expandafter\def\csname faicon@plus\endcsname{{\FA\symbol{"F067}}}
|
||||||
|
\expandafter\def\csname faicon@minus\endcsname{{\FA\symbol{"F068}}}
|
||||||
|
\expandafter\def\csname faicon@asterisk\endcsname{{\FA\symbol{"F069}}}
|
||||||
|
\expandafter\def\csname faicon@exclamation-circle\endcsname{{\FA\symbol{"F06A}}}
|
||||||
|
\expandafter\def\csname faicon@gift\endcsname{{\FA\symbol{"F06B}}}
|
||||||
|
\expandafter\def\csname faicon@leaf\endcsname{{\FA\symbol{"F06C}}}
|
||||||
|
\expandafter\def\csname faicon@fire\endcsname{{\FA\symbol{"F06D}}}
|
||||||
|
\expandafter\def\csname faicon@eye\endcsname{{\FA\symbol{"F06E}}}
|
||||||
|
\expandafter\def\csname faicon@eye-slash\endcsname{{\FA\symbol{"F070}}}
|
||||||
|
\expandafter\def\csname faicon@exclamation-triangle\endcsname{{\FA\symbol{"F071}}}
|
||||||
|
\expandafter\def\csname faicon@plane\endcsname{{\FA\symbol{"F072}}}
|
||||||
|
\expandafter\def\csname faicon@calendar\endcsname{{\FA\symbol{"F073}}}
|
||||||
|
\expandafter\def\csname faicon@random\endcsname{{\FA\symbol{"F074}}}
|
||||||
|
\expandafter\def\csname faicon@comment\endcsname{{\FA\symbol{"F075}}}
|
||||||
|
\expandafter\def\csname faicon@magnet\endcsname{{\FA\symbol{"F076}}}
|
||||||
|
\expandafter\def\csname faicon@chevron-up\endcsname{{\FA\symbol{"F077}}}
|
||||||
|
\expandafter\def\csname faicon@chevron-down\endcsname{{\FA\symbol{"F078}}}
|
||||||
|
\expandafter\def\csname faicon@retweet\endcsname{{\FA\symbol{"F079}}}
|
||||||
|
\expandafter\def\csname faicon@shopping-cart\endcsname{{\FA\symbol{"F07A}}}
|
||||||
|
\expandafter\def\csname faicon@folder\endcsname{{\FA\symbol{"F07B}}}
|
||||||
|
\expandafter\def\csname faicon@folder-open\endcsname{{\FA\symbol{"F07C}}}
|
||||||
|
\expandafter\def\csname faicon@arrows-v\endcsname{{\FA\symbol{"F07D}}}
|
||||||
|
\expandafter\def\csname faicon@arrows-h\endcsname{{\FA\symbol{"F07E}}}
|
||||||
|
\expandafter\def\csname faicon@bar-chart\endcsname{{\FA\symbol{"F080}}}
|
||||||
|
\expandafter\def\csname faicon@twitter-square\endcsname{{\FA\symbol{"F081}}}
|
||||||
|
\expandafter\def\csname faicon@facebook-square\endcsname{{\FA\symbol{"F082}}}
|
||||||
|
\expandafter\def\csname faicon@camera-retro\endcsname{{\FA\symbol{"F083}}}
|
||||||
|
\expandafter\def\csname faicon@key\endcsname{{\FA\symbol{"F084}}}
|
||||||
|
\expandafter\def\csname faicon@cogs\endcsname{{\FA\symbol{"F085}}}
|
||||||
|
\expandafter\def\csname faicon@comments\endcsname{{\FA\symbol{"F086}}}
|
||||||
|
\expandafter\def\csname faicon@thumbs-o-up\endcsname{{\FA\symbol{"F087}}}
|
||||||
|
\expandafter\def\csname faicon@thumbs-o-down\endcsname{{\FA\symbol{"F088}}}
|
||||||
|
\expandafter\def\csname faicon@star-half\endcsname{{\FA\symbol{"F089}}}
|
||||||
|
\expandafter\def\csname faicon@heart-o\endcsname{{\FA\symbol{"F08A}}}
|
||||||
|
\expandafter\def\csname faicon@sign-out\endcsname{{\FA\symbol{"F08B}}}
|
||||||
|
\expandafter\def\csname faicon@linkedin-square\endcsname{{\FA\symbol{"F08C}}}
|
||||||
|
\expandafter\def\csname faicon@thumb-tack\endcsname{{\FA\symbol{"F08D}}}
|
||||||
|
\expandafter\def\csname faicon@external-link\endcsname{{\FA\symbol{"F08E}}}
|
||||||
|
\expandafter\def\csname faicon@sign-in\endcsname{{\FA\symbol{"F090}}}
|
||||||
|
\expandafter\def\csname faicon@trophy\endcsname{{\FA\symbol{"F091}}}
|
||||||
|
\expandafter\def\csname faicon@github-square\endcsname{{\FA\symbol{"F092}}}
|
||||||
|
\expandafter\def\csname faicon@upload\endcsname{{\FA\symbol{"F093}}}
|
||||||
|
\expandafter\def\csname faicon@lemon-o\endcsname{{\FA\symbol{"F094}}}
|
||||||
|
\expandafter\def\csname faicon@phone\endcsname{{\FA\symbol{"F095}}}
|
||||||
|
\expandafter\def\csname faicon@square-o\endcsname{{\FA\symbol{"F096}}}
|
||||||
|
\expandafter\def\csname faicon@bookmark-o\endcsname{{\FA\symbol{"F097}}}
|
||||||
|
\expandafter\def\csname faicon@phone-square\endcsname{{\FA\symbol{"F098}}}
|
||||||
|
\expandafter\def\csname faicon@twitter\endcsname{{\FA\symbol{"F099}}}
|
||||||
|
\expandafter\def\csname faicon@facebook\endcsname{{\FA\symbol{"F09A}}}
|
||||||
|
\expandafter\def\csname faicon@github\endcsname{{\FA\symbol{"F09B}}}
|
||||||
|
\expandafter\def\csname faicon@unlock\endcsname{{\FA\symbol{"F09C}}}
|
||||||
|
\expandafter\def\csname faicon@credit-card\endcsname{{\FA\symbol{"F09D}}}
|
||||||
|
\expandafter\def\csname faicon@rss\endcsname{{\FA\symbol{"F09E}}}
|
||||||
|
\expandafter\def\csname faicon@hdd-o\endcsname{{\FA\symbol{"F0A0}}}
|
||||||
|
\expandafter\def\csname faicon@bullhorn\endcsname{{\FA\symbol{"F0A1}}}
|
||||||
|
\expandafter\def\csname faicon@bell\endcsname{{\FA\symbol{"F0F3}}}
|
||||||
|
\expandafter\def\csname faicon@certificate\endcsname{{\FA\symbol{"F0A3}}}
|
||||||
|
\expandafter\def\csname faicon@hand-o-right\endcsname{{\FA\symbol{"F0A4}}}
|
||||||
|
\expandafter\def\csname faicon@hand-o-left\endcsname{{\FA\symbol{"F0A5}}}
|
||||||
|
\expandafter\def\csname faicon@hand-o-up\endcsname{{\FA\symbol{"F0A6}}}
|
||||||
|
\expandafter\def\csname faicon@hand-o-down\endcsname{{\FA\symbol{"F0A7}}}
|
||||||
|
\expandafter\def\csname faicon@arrow-circle-left\endcsname{{\FA\symbol{"F0A8}}}
|
||||||
|
\expandafter\def\csname faicon@arrow-circle-right\endcsname{{\FA\symbol{"F0A9}}}
|
||||||
|
\expandafter\def\csname faicon@arrow-circle-up\endcsname{{\FA\symbol{"F0AA}}}
|
||||||
|
\expandafter\def\csname faicon@arrow-circle-down\endcsname{{\FA\symbol{"F0AB}}}
|
||||||
|
\expandafter\def\csname faicon@globe\endcsname{{\FA\symbol{"F0AC}}}
|
||||||
|
\expandafter\def\csname faicon@wrench\endcsname{{\FA\symbol{"F0AD}}}
|
||||||
|
\expandafter\def\csname faicon@tasks\endcsname{{\FA\symbol{"F0AE}}}
|
||||||
|
\expandafter\def\csname faicon@filter\endcsname{{\FA\symbol{"F0B0}}}
|
||||||
|
\expandafter\def\csname faicon@briefcase\endcsname{{\FA\symbol{"F0B1}}}
|
||||||
|
\expandafter\def\csname faicon@arrows-alt\endcsname{{\FA\symbol{"F0B2}}}
|
||||||
|
\expandafter\def\csname faicon@users\endcsname{{\FA\symbol{"F0C0}}}
|
||||||
|
\expandafter\def\csname faicon@link\endcsname{{\FA\symbol{"F0C1}}}
|
||||||
|
\expandafter\def\csname faicon@cloud\endcsname{{\FA\symbol{"F0C2}}}
|
||||||
|
\expandafter\def\csname faicon@flask\endcsname{{\FA\symbol{"F0C3}}}
|
||||||
|
\expandafter\def\csname faicon@scissors\endcsname{{\FA\symbol{"F0C4}}}
|
||||||
|
\expandafter\def\csname faicon@files-o\endcsname{{\FA\symbol{"F0C5}}}
|
||||||
|
\expandafter\def\csname faicon@paperclip\endcsname{{\FA\symbol{"F0C6}}}
|
||||||
|
\expandafter\def\csname faicon@floppy-o\endcsname{{\FA\symbol{"F0C7}}}
|
||||||
|
\expandafter\def\csname faicon@square\endcsname{{\FA\symbol{"F0C8}}}
|
||||||
|
\expandafter\def\csname faicon@bars\endcsname{{\FA\symbol{"F0C9}}}
|
||||||
|
\expandafter\def\csname faicon@list-ul\endcsname{{\FA\symbol{"F0CA}}}
|
||||||
|
\expandafter\def\csname faicon@list-ol\endcsname{{\FA\symbol{"F0CB}}}
|
||||||
|
\expandafter\def\csname faicon@strikethrough\endcsname{{\FA\symbol{"F0CC}}}
|
||||||
|
\expandafter\def\csname faicon@underline\endcsname{{\FA\symbol{"F0CD}}}
|
||||||
|
\expandafter\def\csname faicon@table\endcsname{{\FA\symbol{"F0CE}}}
|
||||||
|
\expandafter\def\csname faicon@magic\endcsname{{\FA\symbol{"F0D0}}}
|
||||||
|
\expandafter\def\csname faicon@truck\endcsname{{\FA\symbol{"F0D1}}}
|
||||||
|
\expandafter\def\csname faicon@pinterest\endcsname{{\FA\symbol{"F0D2}}}
|
||||||
|
\expandafter\def\csname faicon@pinterest-square\endcsname{{\FA\symbol{"F0D3}}}
|
||||||
|
\expandafter\def\csname faicon@google-plus-square\endcsname{{\FA\symbol{"F0D4}}}
|
||||||
|
\expandafter\def\csname faicon@google-plus\endcsname{{\FA\symbol{"F0D5}}}
|
||||||
|
\expandafter\def\csname faicon@money\endcsname{{\FA\symbol{"F0D6}}}
|
||||||
|
\expandafter\def\csname faicon@caret-down\endcsname{{\FA\symbol{"F0D7}}}
|
||||||
|
\expandafter\def\csname faicon@caret-up\endcsname{{\FA\symbol{"F0D8}}}
|
||||||
|
\expandafter\def\csname faicon@caret-left\endcsname{{\FA\symbol{"F0D9}}}
|
||||||
|
\expandafter\def\csname faicon@caret-right\endcsname{{\FA\symbol{"F0DA}}}
|
||||||
|
\expandafter\def\csname faicon@columns\endcsname{{\FA\symbol{"F0DB}}}
|
||||||
|
\expandafter\def\csname faicon@sort\endcsname{{\FA\symbol{"F0DC}}}
|
||||||
|
\expandafter\def\csname faicon@sort-desc\endcsname{{\FA\symbol{"F0DD}}}
|
||||||
|
\expandafter\def\csname faicon@sort-asc\endcsname{{\FA\symbol{"F0DE}}}
|
||||||
|
\expandafter\def\csname faicon@envelope\endcsname{{\FA\symbol{"F0E0}}}
|
||||||
|
\expandafter\def\csname faicon@linkedin\endcsname{{\FA\symbol{"F0E1}}}
|
||||||
|
\expandafter\def\csname faicon@undo\endcsname{{\FA\symbol{"F0E2}}}
|
||||||
|
\expandafter\def\csname faicon@gavel\endcsname{{\FA\symbol{"F0E3}}}
|
||||||
|
\expandafter\def\csname faicon@tachometer\endcsname{{\FA\symbol{"F0E4}}}
|
||||||
|
\expandafter\def\csname faicon@comment-o\endcsname{{\FA\symbol{"F0E5}}}
|
||||||
|
\expandafter\def\csname faicon@comments-o\endcsname{{\FA\symbol{"F0E6}}}
|
||||||
|
\expandafter\def\csname faicon@bolt\endcsname{{\FA\symbol{"F0E7}}}
|
||||||
|
\expandafter\def\csname faicon@sitemap\endcsname{{\FA\symbol{"F0E8}}}
|
||||||
|
\expandafter\def\csname faicon@umbrella\endcsname{{\FA\symbol{"F0E9}}}
|
||||||
|
\expandafter\def\csname faicon@clipboard\endcsname{{\FA\symbol{"F0EA}}}
|
||||||
|
\expandafter\def\csname faicon@lightbulb-o\endcsname{{\FA\symbol{"F0EB}}}
|
||||||
|
\expandafter\def\csname faicon@exchange\endcsname{{\FA\symbol{"F0EC}}}
|
||||||
|
\expandafter\def\csname faicon@cloud-download\endcsname{{\FA\symbol{"F0ED}}}
|
||||||
|
\expandafter\def\csname faicon@cloud-upload\endcsname{{\FA\symbol{"F0EE}}}
|
||||||
|
\expandafter\def\csname faicon@user-md\endcsname{{\FA\symbol{"F0F0}}}
|
||||||
|
\expandafter\def\csname faicon@stethoscope\endcsname{{\FA\symbol{"F0F1}}}
|
||||||
|
\expandafter\def\csname faicon@suitcase\endcsname{{\FA\symbol{"F0F2}}}
|
||||||
|
\expandafter\def\csname faicon@bell-o\endcsname{{\FA\symbol{"F0A2}}}
|
||||||
|
\expandafter\def\csname faicon@coffee\endcsname{{\FA\symbol{"F0F4}}}
|
||||||
|
\expandafter\def\csname faicon@cutlery\endcsname{{\FA\symbol{"F0F5}}}
|
||||||
|
\expandafter\def\csname faicon@file-text-o\endcsname{{\FA\symbol{"F0F6}}}
|
||||||
|
\expandafter\def\csname faicon@building-o\endcsname{{\FA\symbol{"F0F7}}}
|
||||||
|
\expandafter\def\csname faicon@hospital-o\endcsname{{\FA\symbol{"F0F8}}}
|
||||||
|
\expandafter\def\csname faicon@ambulance\endcsname{{\FA\symbol{"F0F9}}}
|
||||||
|
\expandafter\def\csname faicon@medkit\endcsname{{\FA\symbol{"F0FA}}}
|
||||||
|
\expandafter\def\csname faicon@fighter-jet\endcsname{{\FA\symbol{"F0FB}}}
|
||||||
|
\expandafter\def\csname faicon@beer\endcsname{{\FA\symbol{"F0FC}}}
|
||||||
|
\expandafter\def\csname faicon@h-square\endcsname{{\FA\symbol{"F0FD}}}
|
||||||
|
\expandafter\def\csname faicon@plus-square\endcsname{{\FA\symbol{"F0FE}}}
|
||||||
|
\expandafter\def\csname faicon@angle-double-left\endcsname{{\FA\symbol{"F100}}}
|
||||||
|
\expandafter\def\csname faicon@angle-double-right\endcsname{{\FA\symbol{"F101}}}
|
||||||
|
\expandafter\def\csname faicon@angle-double-up\endcsname{{\FA\symbol{"F102}}}
|
||||||
|
\expandafter\def\csname faicon@angle-double-down\endcsname{{\FA\symbol{"F103}}}
|
||||||
|
\expandafter\def\csname faicon@angle-left\endcsname{{\FA\symbol{"F104}}}
|
||||||
|
\expandafter\def\csname faicon@angle-right\endcsname{{\FA\symbol{"F105}}}
|
||||||
|
\expandafter\def\csname faicon@angle-up\endcsname{{\FA\symbol{"F106}}}
|
||||||
|
\expandafter\def\csname faicon@angle-down\endcsname{{\FA\symbol{"F107}}}
|
||||||
|
\expandafter\def\csname faicon@desktop\endcsname{{\FA\symbol{"F108}}}
|
||||||
|
\expandafter\def\csname faicon@laptop\endcsname{{\FA\symbol{"F109}}}
|
||||||
|
\expandafter\def\csname faicon@tablet\endcsname{{\FA\symbol{"F10A}}}
|
||||||
|
\expandafter\def\csname faicon@mobile\endcsname{{\FA\symbol{"F10B}}}
|
||||||
|
\expandafter\def\csname faicon@circle-o\endcsname{{\FA\symbol{"F10C}}}
|
||||||
|
\expandafter\def\csname faicon@quote-left\endcsname{{\FA\symbol{"F10D}}}
|
||||||
|
\expandafter\def\csname faicon@quote-right\endcsname{{\FA\symbol{"F10E}}}
|
||||||
|
\expandafter\def\csname faicon@spinner\endcsname{{\FA\symbol{"F110}}}
|
||||||
|
\expandafter\def\csname faicon@circle\endcsname{{\FA\symbol{"F111}}}
|
||||||
|
\expandafter\def\csname faicon@reply\endcsname{{\FA\symbol{"F112}}}
|
||||||
|
\expandafter\def\csname faicon@github-alt\endcsname{{\FA\symbol{"F113}}}
|
||||||
|
\expandafter\def\csname faicon@folder-o\endcsname{{\FA\symbol{"F114}}}
|
||||||
|
\expandafter\def\csname faicon@folder-open-o\endcsname{{\FA\symbol{"F115}}}
|
||||||
|
\expandafter\def\csname faicon@smile-o\endcsname{{\FA\symbol{"F118}}}
|
||||||
|
\expandafter\def\csname faicon@frown-o\endcsname{{\FA\symbol{"F119}}}
|
||||||
|
\expandafter\def\csname faicon@meh-o\endcsname{{\FA\symbol{"F11A}}}
|
||||||
|
\expandafter\def\csname faicon@gamepad\endcsname{{\FA\symbol{"F11B}}}
|
||||||
|
\expandafter\def\csname faicon@keyboard-o\endcsname{{\FA\symbol{"F11C}}}
|
||||||
|
\expandafter\def\csname faicon@flag-o\endcsname{{\FA\symbol{"F11D}}}
|
||||||
|
\expandafter\def\csname faicon@flag-checkered\endcsname{{\FA\symbol{"F11E}}}
|
||||||
|
\expandafter\def\csname faicon@terminal\endcsname{{\FA\symbol{"F120}}}
|
||||||
|
\expandafter\def\csname faicon@code\endcsname{{\FA\symbol{"F121}}}
|
||||||
|
\expandafter\def\csname faicon@reply-all\endcsname{{\FA\symbol{"F122}}}
|
||||||
|
\expandafter\def\csname faicon@star-half-o\endcsname{{\FA\symbol{"F123}}}
|
||||||
|
\expandafter\def\csname faicon@location-arrow\endcsname{{\FA\symbol{"F124}}}
|
||||||
|
\expandafter\def\csname faicon@crop\endcsname{{\FA\symbol{"F125}}}
|
||||||
|
\expandafter\def\csname faicon@code-fork\endcsname{{\FA\symbol{"F126}}}
|
||||||
|
\expandafter\def\csname faicon@chain-broken\endcsname{{\FA\symbol{"F127}}}
|
||||||
|
\expandafter\def\csname faicon@question\endcsname{{\FA\symbol{"F128}}}
|
||||||
|
\expandafter\def\csname faicon@info\endcsname{{\FA\symbol{"F129}}}
|
||||||
|
\expandafter\def\csname faicon@exclamation\endcsname{{\FA\symbol{"F12A}}}
|
||||||
|
\expandafter\def\csname faicon@superscript\endcsname{{\FA\symbol{"F12B}}}
|
||||||
|
\expandafter\def\csname faicon@subscript\endcsname{{\FA\symbol{"F12C}}}
|
||||||
|
\expandafter\def\csname faicon@eraser\endcsname{{\FA\symbol{"F12D}}}
|
||||||
|
\expandafter\def\csname faicon@puzzle-piece\endcsname{{\FA\symbol{"F12E}}}
|
||||||
|
\expandafter\def\csname faicon@microphone\endcsname{{\FA\symbol{"F130}}}
|
||||||
|
\expandafter\def\csname faicon@microphone-slash\endcsname{{\FA\symbol{"F131}}}
|
||||||
|
\expandafter\def\csname faicon@shield\endcsname{{\FA\symbol{"F132}}}
|
||||||
|
\expandafter\def\csname faicon@calendar-o\endcsname{{\FA\symbol{"F133}}}
|
||||||
|
\expandafter\def\csname faicon@fire-extinguisher\endcsname{{\FA\symbol{"F134}}}
|
||||||
|
\expandafter\def\csname faicon@rocket\endcsname{{\FA\symbol{"F135}}}
|
||||||
|
\expandafter\def\csname faicon@maxcdn\endcsname{{\FA\symbol{"F136}}}
|
||||||
|
\expandafter\def\csname faicon@chevron-circle-left\endcsname{{\FA\symbol{"F137}}}
|
||||||
|
\expandafter\def\csname faicon@chevron-circle-right\endcsname{{\FA\symbol{"F138}}}
|
||||||
|
\expandafter\def\csname faicon@chevron-circle-up\endcsname{{\FA\symbol{"F139}}}
|
||||||
|
\expandafter\def\csname faicon@chevron-circle-down\endcsname{{\FA\symbol{"F13A}}}
|
||||||
|
\expandafter\def\csname faicon@html5\endcsname{{\FA\symbol{"F13B}}}
|
||||||
|
\expandafter\def\csname faicon@css3\endcsname{{\FA\symbol{"F13C}}}
|
||||||
|
\expandafter\def\csname faicon@anchor\endcsname{{\FA\symbol{"F13D}}}
|
||||||
|
\expandafter\def\csname faicon@unlock-alt\endcsname{{\FA\symbol{"F13E}}}
|
||||||
|
\expandafter\def\csname faicon@bullseye\endcsname{{\FA\symbol{"F140}}}
|
||||||
|
\expandafter\def\csname faicon@ellipsis-h\endcsname{{\FA\symbol{"F141}}}
|
||||||
|
\expandafter\def\csname faicon@ellipsis-v\endcsname{{\FA\symbol{"F142}}}
|
||||||
|
\expandafter\def\csname faicon@rss-square\endcsname{{\FA\symbol{"F143}}}
|
||||||
|
\expandafter\def\csname faicon@play-circle\endcsname{{\FA\symbol{"F144}}}
|
||||||
|
\expandafter\def\csname faicon@ticket\endcsname{{\FA\symbol{"F145}}}
|
||||||
|
\expandafter\def\csname faicon@minus-square\endcsname{{\FA\symbol{"F146}}}
|
||||||
|
\expandafter\def\csname faicon@minus-square-o\endcsname{{\FA\symbol{"F147}}}
|
||||||
|
\expandafter\def\csname faicon@level-up\endcsname{{\FA\symbol{"F148}}}
|
||||||
|
\expandafter\def\csname faicon@level-down\endcsname{{\FA\symbol{"F149}}}
|
||||||
|
\expandafter\def\csname faicon@check-square\endcsname{{\FA\symbol{"F14A}}}
|
||||||
|
\expandafter\def\csname faicon@pencil-square\endcsname{{\FA\symbol{"F14B}}}
|
||||||
|
\expandafter\def\csname faicon@external-link-square\endcsname{{\FA\symbol{"F14C}}}
|
||||||
|
\expandafter\def\csname faicon@share-square\endcsname{{\FA\symbol{"F14D}}}
|
||||||
|
\expandafter\def\csname faicon@compass\endcsname{{\FA\symbol{"F14E}}}
|
||||||
|
\expandafter\def\csname faicon@caret-square-o-down\endcsname{{\FA\symbol{"F150}}}
|
||||||
|
\expandafter\def\csname faicon@caret-square-o-up\endcsname{{\FA\symbol{"F151}}}
|
||||||
|
\expandafter\def\csname faicon@caret-square-o-right\endcsname{{\FA\symbol{"F152}}}
|
||||||
|
\expandafter\def\csname faicon@eur\endcsname{{\FA\symbol{"F153}}}
|
||||||
|
\expandafter\def\csname faicon@gbp\endcsname{{\FA\symbol{"F154}}}
|
||||||
|
\expandafter\def\csname faicon@usd\endcsname{{\FA\symbol{"F155}}}
|
||||||
|
\expandafter\def\csname faicon@inr\endcsname{{\FA\symbol{"F156}}}
|
||||||
|
\expandafter\def\csname faicon@jpy\endcsname{{\FA\symbol{"F157}}}
|
||||||
|
\expandafter\def\csname faicon@rub\endcsname{{\FA\symbol{"F158}}}
|
||||||
|
\expandafter\def\csname faicon@krw\endcsname{{\FA\symbol{"F159}}}
|
||||||
|
\expandafter\def\csname faicon@btc\endcsname{{\FA\symbol{"F15A}}}
|
||||||
|
\expandafter\def\csname faicon@file\endcsname{{\FA\symbol{"F15B}}}
|
||||||
|
\expandafter\def\csname faicon@file-text\endcsname{{\FA\symbol{"F15C}}}
|
||||||
|
\expandafter\def\csname faicon@sort-alpha-asc\endcsname{{\FA\symbol{"F15D}}}
|
||||||
|
\expandafter\def\csname faicon@sort-alpha-desc\endcsname{{\FA\symbol{"F15E}}}
|
||||||
|
\expandafter\def\csname faicon@sort-amount-asc\endcsname{{\FA\symbol{"F160}}}
|
||||||
|
\expandafter\def\csname faicon@sort-amount-desc\endcsname{{\FA\symbol{"F161}}}
|
||||||
|
\expandafter\def\csname faicon@sort-numeric-asc\endcsname{{\FA\symbol{"F162}}}
|
||||||
|
\expandafter\def\csname faicon@sort-numeric-desc\endcsname{{\FA\symbol{"F163}}}
|
||||||
|
\expandafter\def\csname faicon@thumbs-up\endcsname{{\FA\symbol{"F164}}}
|
||||||
|
\expandafter\def\csname faicon@thumbs-down\endcsname{{\FA\symbol{"F165}}}
|
||||||
|
\expandafter\def\csname faicon@youtube-square\endcsname{{\FA\symbol{"F166}}}
|
||||||
|
\expandafter\def\csname faicon@youtube\endcsname{{\FA\symbol{"F167}}}
|
||||||
|
\expandafter\def\csname faicon@xing\endcsname{{\FA\symbol{"F168}}}
|
||||||
|
\expandafter\def\csname faicon@xing-square\endcsname{{\FA\symbol{"F169}}}
|
||||||
|
\expandafter\def\csname faicon@youtube-play\endcsname{{\FA\symbol{"F16A}}}
|
||||||
|
\expandafter\def\csname faicon@dropbox\endcsname{{\FA\symbol{"F16B}}}
|
||||||
|
\expandafter\def\csname faicon@stack-overflow\endcsname{{\FA\symbol{"F16C}}}
|
||||||
|
\expandafter\def\csname faicon@instagram\endcsname{{\FA\symbol{"F16D}}}
|
||||||
|
\expandafter\def\csname faicon@flickr\endcsname{{\FA\symbol{"F16E}}}
|
||||||
|
\expandafter\def\csname faicon@adn\endcsname{{\FA\symbol{"F170}}}
|
||||||
|
\expandafter\def\csname faicon@bitbucket\endcsname{{\FA\symbol{"F171}}}
|
||||||
|
\expandafter\def\csname faicon@bitbucket-square\endcsname{{\FA\symbol{"F172}}}
|
||||||
|
\expandafter\def\csname faicon@tumblr\endcsname{{\FA\symbol{"F173}}}
|
||||||
|
\expandafter\def\csname faicon@tumblr-square\endcsname{{\FA\symbol{"F174}}}
|
||||||
|
\expandafter\def\csname faicon@long-arrow-down\endcsname{{\FA\symbol{"F175}}}
|
||||||
|
\expandafter\def\csname faicon@long-arrow-up\endcsname{{\FA\symbol{"F176}}}
|
||||||
|
\expandafter\def\csname faicon@long-arrow-left\endcsname{{\FA\symbol{"F177}}}
|
||||||
|
\expandafter\def\csname faicon@long-arrow-right\endcsname{{\FA\symbol{"F178}}}
|
||||||
|
\expandafter\def\csname faicon@apple\endcsname{{\FA\symbol{"F179}}}
|
||||||
|
\expandafter\def\csname faicon@windows\endcsname{{\FA\symbol{"F17A}}}
|
||||||
|
\expandafter\def\csname faicon@android\endcsname{{\FA\symbol{"F17B}}}
|
||||||
|
\expandafter\def\csname faicon@linux\endcsname{{\FA\symbol{"F17C}}}
|
||||||
|
\expandafter\def\csname faicon@dribbble\endcsname{{\FA\symbol{"F17D}}}
|
||||||
|
\expandafter\def\csname faicon@skype\endcsname{{\FA\symbol{"F17E}}}
|
||||||
|
\expandafter\def\csname faicon@foursquare\endcsname{{\FA\symbol{"F180}}}
|
||||||
|
\expandafter\def\csname faicon@trello\endcsname{{\FA\symbol{"F181}}}
|
||||||
|
\expandafter\def\csname faicon@female\endcsname{{\FA\symbol{"F182}}}
|
||||||
|
\expandafter\def\csname faicon@male\endcsname{{\FA\symbol{"F183}}}
|
||||||
|
\expandafter\def\csname faicon@gratipay\endcsname{{\FA\symbol{"F184}}}
|
||||||
|
\expandafter\def\csname faicon@sun-o\endcsname{{\FA\symbol{"F185}}}
|
||||||
|
\expandafter\def\csname faicon@moon-o\endcsname{{\FA\symbol{"F186}}}
|
||||||
|
\expandafter\def\csname faicon@archive\endcsname{{\FA\symbol{"F187}}}
|
||||||
|
\expandafter\def\csname faicon@bug\endcsname{{\FA\symbol{"F188}}}
|
||||||
|
\expandafter\def\csname faicon@vk\endcsname{{\FA\symbol{"F189}}}
|
||||||
|
\expandafter\def\csname faicon@weibo\endcsname{{\FA\symbol{"F18A}}}
|
||||||
|
\expandafter\def\csname faicon@renren\endcsname{{\FA\symbol{"F18B}}}
|
||||||
|
\expandafter\def\csname faicon@pagelines\endcsname{{\FA\symbol{"F18C}}}
|
||||||
|
\expandafter\def\csname faicon@stack-exchange\endcsname{{\FA\symbol{"F18D}}}
|
||||||
|
\expandafter\def\csname faicon@arrow-circle-o-right\endcsname{{\FA\symbol{"F18E}}}
|
||||||
|
\expandafter\def\csname faicon@arrow-circle-o-left\endcsname{{\FA\symbol{"F190}}}
|
||||||
|
\expandafter\def\csname faicon@caret-square-o-left\endcsname{{\FA\symbol{"F191}}}
|
||||||
|
\expandafter\def\csname faicon@dot-circle-o\endcsname{{\FA\symbol{"F192}}}
|
||||||
|
\expandafter\def\csname faicon@wheelchair\endcsname{{\FA\symbol{"F193}}}
|
||||||
|
\expandafter\def\csname faicon@vimeo-square\endcsname{{\FA\symbol{"F194}}}
|
||||||
|
\expandafter\def\csname faicon@try\endcsname{{\FA\symbol{"F195}}}
|
||||||
|
\expandafter\def\csname faicon@plus-square-o\endcsname{{\FA\symbol{"F196}}}
|
||||||
|
\expandafter\def\csname faicon@space-shuttle\endcsname{{\FA\symbol{"F197}}}
|
||||||
|
\expandafter\def\csname faicon@slack\endcsname{{\FA\symbol{"F198}}}
|
||||||
|
\expandafter\def\csname faicon@envelope-square\endcsname{{\FA\symbol{"F199}}}
|
||||||
|
\expandafter\def\csname faicon@wordpress\endcsname{{\FA\symbol{"F19A}}}
|
||||||
|
\expandafter\def\csname faicon@openid\endcsname{{\FA\symbol{"F19B}}}
|
||||||
|
\expandafter\def\csname faicon@university\endcsname{{\FA\symbol{"F19C}}}
|
||||||
|
\expandafter\def\csname faicon@graduation-cap\endcsname{{\FA\symbol{"F19D}}}
|
||||||
|
\expandafter\def\csname faicon@yahoo\endcsname{{\FA\symbol{"F19E}}}
|
||||||
|
\expandafter\def\csname faicon@google\endcsname{{\FA\symbol{"F1A0}}}
|
||||||
|
\expandafter\def\csname faicon@reddit\endcsname{{\FA\symbol{"F1A1}}}
|
||||||
|
\expandafter\def\csname faicon@reddit-square\endcsname{{\FA\symbol{"F1A2}}}
|
||||||
|
\expandafter\def\csname faicon@stumbleupon-circle\endcsname{{\FA\symbol{"F1A3}}}
|
||||||
|
\expandafter\def\csname faicon@stumbleupon\endcsname{{\FA\symbol{"F1A4}}}
|
||||||
|
\expandafter\def\csname faicon@delicious\endcsname{{\FA\symbol{"F1A5}}}
|
||||||
|
\expandafter\def\csname faicon@digg\endcsname{{\FA\symbol{"F1A6}}}
|
||||||
|
\expandafter\def\csname faicon@pied-piper-pp\endcsname{{\FA\symbol{"F1A7}}}
|
||||||
|
\expandafter\def\csname faicon@pied-piper-alt\endcsname{{\FA\symbol{"F1A8}}}
|
||||||
|
\expandafter\def\csname faicon@drupal\endcsname{{\FA\symbol{"F1A9}}}
|
||||||
|
\expandafter\def\csname faicon@joomla\endcsname{{\FA\symbol{"F1AA}}}
|
||||||
|
\expandafter\def\csname faicon@language\endcsname{{\FA\symbol{"F1AB}}}
|
||||||
|
\expandafter\def\csname faicon@fax\endcsname{{\FA\symbol{"F1AC}}}
|
||||||
|
\expandafter\def\csname faicon@building\endcsname{{\FA\symbol{"F1AD}}}
|
||||||
|
\expandafter\def\csname faicon@child\endcsname{{\FA\symbol{"F1AE}}}
|
||||||
|
\expandafter\def\csname faicon@paw\endcsname{{\FA\symbol{"F1B0}}}
|
||||||
|
\expandafter\def\csname faicon@spoon\endcsname{{\FA\symbol{"F1B1}}}
|
||||||
|
\expandafter\def\csname faicon@cube\endcsname{{\FA\symbol{"F1B2}}}
|
||||||
|
\expandafter\def\csname faicon@cubes\endcsname{{\FA\symbol{"F1B3}}}
|
||||||
|
\expandafter\def\csname faicon@behance\endcsname{{\FA\symbol{"F1B4}}}
|
||||||
|
\expandafter\def\csname faicon@behance-square\endcsname{{\FA\symbol{"F1B5}}}
|
||||||
|
\expandafter\def\csname faicon@steam\endcsname{{\FA\symbol{"F1B6}}}
|
||||||
|
\expandafter\def\csname faicon@steam-square\endcsname{{\FA\symbol{"F1B7}}}
|
||||||
|
\expandafter\def\csname faicon@recycle\endcsname{{\FA\symbol{"F1B8}}}
|
||||||
|
\expandafter\def\csname faicon@car\endcsname{{\FA\symbol{"F1B9}}}
|
||||||
|
\expandafter\def\csname faicon@taxi\endcsname{{\FA\symbol{"F1BA}}}
|
||||||
|
\expandafter\def\csname faicon@tree\endcsname{{\FA\symbol{"F1BB}}}
|
||||||
|
\expandafter\def\csname faicon@spotify\endcsname{{\FA\symbol{"F1BC}}}
|
||||||
|
\expandafter\def\csname faicon@deviantart\endcsname{{\FA\symbol{"F1BD}}}
|
||||||
|
\expandafter\def\csname faicon@soundcloud\endcsname{{\FA\symbol{"F1BE}}}
|
||||||
|
\expandafter\def\csname faicon@database\endcsname{{\FA\symbol{"F1C0}}}
|
||||||
|
\expandafter\def\csname faicon@file-pdf-o\endcsname{{\FA\symbol{"F1C1}}}
|
||||||
|
\expandafter\def\csname faicon@file-word-o\endcsname{{\FA\symbol{"F1C2}}}
|
||||||
|
\expandafter\def\csname faicon@file-excel-o\endcsname{{\FA\symbol{"F1C3}}}
|
||||||
|
\expandafter\def\csname faicon@file-powerpoint-o\endcsname{{\FA\symbol{"F1C4}}}
|
||||||
|
\expandafter\def\csname faicon@file-image-o\endcsname{{\FA\symbol{"F1C5}}}
|
||||||
|
\expandafter\def\csname faicon@file-archive-o\endcsname{{\FA\symbol{"F1C6}}}
|
||||||
|
\expandafter\def\csname faicon@file-audio-o\endcsname{{\FA\symbol{"F1C7}}}
|
||||||
|
\expandafter\def\csname faicon@file-video-o\endcsname{{\FA\symbol{"F1C8}}}
|
||||||
|
\expandafter\def\csname faicon@file-code-o\endcsname{{\FA\symbol{"F1C9}}}
|
||||||
|
\expandafter\def\csname faicon@vine\endcsname{{\FA\symbol{"F1CA}}}
|
||||||
|
\expandafter\def\csname faicon@codepen\endcsname{{\FA\symbol{"F1CB}}}
|
||||||
|
\expandafter\def\csname faicon@jsfiddle\endcsname{{\FA\symbol{"F1CC}}}
|
||||||
|
\expandafter\def\csname faicon@life-ring\endcsname{{\FA\symbol{"F1CD}}}
|
||||||
|
\expandafter\def\csname faicon@circle-o-notch\endcsname{{\FA\symbol{"F1CE}}}
|
||||||
|
\expandafter\def\csname faicon@rebel\endcsname{{\FA\symbol{"F1D0}}}
|
||||||
|
\expandafter\def\csname faicon@empire\endcsname{{\FA\symbol{"F1D1}}}
|
||||||
|
\expandafter\def\csname faicon@git-square\endcsname{{\FA\symbol{"F1D2}}}
|
||||||
|
\expandafter\def\csname faicon@git\endcsname{{\FA\symbol{"F1D3}}}
|
||||||
|
\expandafter\def\csname faicon@hacker-news\endcsname{{\FA\symbol{"F1D4}}}
|
||||||
|
\expandafter\def\csname faicon@tencent-weibo\endcsname{{\FA\symbol{"F1D5}}}
|
||||||
|
\expandafter\def\csname faicon@qq\endcsname{{\FA\symbol{"F1D6}}}
|
||||||
|
\expandafter\def\csname faicon@weixin\endcsname{{\FA\symbol{"F1D7}}}
|
||||||
|
\expandafter\def\csname faicon@paper-plane\endcsname{{\FA\symbol{"F1D8}}}
|
||||||
|
\expandafter\def\csname faicon@paper-plane-o\endcsname{{\FA\symbol{"F1D9}}}
|
||||||
|
\expandafter\def\csname faicon@history\endcsname{{\FA\symbol{"F1DA}}}
|
||||||
|
\expandafter\def\csname faicon@circle-thin\endcsname{{\FA\symbol{"F1DB}}}
|
||||||
|
\expandafter\def\csname faicon@header\endcsname{{\FA\symbol{"F1DC}}}
|
||||||
|
\expandafter\def\csname faicon@paragraph\endcsname{{\FA\symbol{"F1DD}}}
|
||||||
|
\expandafter\def\csname faicon@sliders\endcsname{{\FA\symbol{"F1DE}}}
|
||||||
|
\expandafter\def\csname faicon@share-alt\endcsname{{\FA\symbol{"F1E0}}}
|
||||||
|
\expandafter\def\csname faicon@share-alt-square\endcsname{{\FA\symbol{"F1E1}}}
|
||||||
|
\expandafter\def\csname faicon@bomb\endcsname{{\FA\symbol{"F1E2}}}
|
||||||
|
\expandafter\def\csname faicon@futbol-o\endcsname{{\FA\symbol{"F1E3}}}
|
||||||
|
\expandafter\def\csname faicon@tty\endcsname{{\FA\symbol{"F1E4}}}
|
||||||
|
\expandafter\def\csname faicon@binoculars\endcsname{{\FA\symbol{"F1E5}}}
|
||||||
|
\expandafter\def\csname faicon@plug\endcsname{{\FA\symbol{"F1E6}}}
|
||||||
|
\expandafter\def\csname faicon@slideshare\endcsname{{\FA\symbol{"F1E7}}}
|
||||||
|
\expandafter\def\csname faicon@twitch\endcsname{{\FA\symbol{"F1E8}}}
|
||||||
|
\expandafter\def\csname faicon@yelp\endcsname{{\FA\symbol{"F1E9}}}
|
||||||
|
\expandafter\def\csname faicon@newspaper-o\endcsname{{\FA\symbol{"F1EA}}}
|
||||||
|
\expandafter\def\csname faicon@wifi\endcsname{{\FA\symbol{"F1EB}}}
|
||||||
|
\expandafter\def\csname faicon@calculator\endcsname{{\FA\symbol{"F1EC}}}
|
||||||
|
\expandafter\def\csname faicon@paypal\endcsname{{\FA\symbol{"F1ED}}}
|
||||||
|
\expandafter\def\csname faicon@google-wallet\endcsname{{\FA\symbol{"F1EE}}}
|
||||||
|
\expandafter\def\csname faicon@cc-visa\endcsname{{\FA\symbol{"F1F0}}}
|
||||||
|
\expandafter\def\csname faicon@cc-mastercard\endcsname{{\FA\symbol{"F1F1}}}
|
||||||
|
\expandafter\def\csname faicon@cc-discover\endcsname{{\FA\symbol{"F1F2}}}
|
||||||
|
\expandafter\def\csname faicon@cc-amex\endcsname{{\FA\symbol{"F1F3}}}
|
||||||
|
\expandafter\def\csname faicon@cc-paypal\endcsname{{\FA\symbol{"F1F4}}}
|
||||||
|
\expandafter\def\csname faicon@cc-stripe\endcsname{{\FA\symbol{"F1F5}}}
|
||||||
|
\expandafter\def\csname faicon@bell-slash\endcsname{{\FA\symbol{"F1F6}}}
|
||||||
|
\expandafter\def\csname faicon@bell-slash-o\endcsname{{\FA\symbol{"F1F7}}}
|
||||||
|
\expandafter\def\csname faicon@trash\endcsname{{\FA\symbol{"F1F8}}}
|
||||||
|
\expandafter\def\csname faicon@copyright\endcsname{{\FA\symbol{"F1F9}}}
|
||||||
|
\expandafter\def\csname faicon@at\endcsname{{\FA\symbol{"F1FA}}}
|
||||||
|
\expandafter\def\csname faicon@eyedropper\endcsname{{\FA\symbol{"F1FB}}}
|
||||||
|
\expandafter\def\csname faicon@paint-brush\endcsname{{\FA\symbol{"F1FC}}}
|
||||||
|
\expandafter\def\csname faicon@birthday-cake\endcsname{{\FA\symbol{"F1FD}}}
|
||||||
|
\expandafter\def\csname faicon@area-chart\endcsname{{\FA\symbol{"F1FE}}}
|
||||||
|
\expandafter\def\csname faicon@pie-chart\endcsname{{\FA\symbol{"F200}}}
|
||||||
|
\expandafter\def\csname faicon@line-chart\endcsname{{\FA\symbol{"F201}}}
|
||||||
|
\expandafter\def\csname faicon@lastfm\endcsname{{\FA\symbol{"F202}}}
|
||||||
|
\expandafter\def\csname faicon@lastfm-square\endcsname{{\FA\symbol{"F203}}}
|
||||||
|
\expandafter\def\csname faicon@toggle-off\endcsname{{\FA\symbol{"F204}}}
|
||||||
|
\expandafter\def\csname faicon@toggle-on\endcsname{{\FA\symbol{"F205}}}
|
||||||
|
\expandafter\def\csname faicon@bicycle\endcsname{{\FA\symbol{"F206}}}
|
||||||
|
\expandafter\def\csname faicon@bus\endcsname{{\FA\symbol{"F207}}}
|
||||||
|
\expandafter\def\csname faicon@ioxhost\endcsname{{\FA\symbol{"F208}}}
|
||||||
|
\expandafter\def\csname faicon@angellist\endcsname{{\FA\symbol{"F209}}}
|
||||||
|
\expandafter\def\csname faicon@cc\endcsname{{\FA\symbol{"F20A}}}
|
||||||
|
\expandafter\def\csname faicon@ils\endcsname{{\FA\symbol{"F20B}}}
|
||||||
|
\expandafter\def\csname faicon@meanpath\endcsname{{\FA\symbol{"F20C}}}
|
||||||
|
\expandafter\def\csname faicon@buysellads\endcsname{{\FA\symbol{"F20D}}}
|
||||||
|
\expandafter\def\csname faicon@connectdevelop\endcsname{{\FA\symbol{"F20E}}}
|
||||||
|
\expandafter\def\csname faicon@dashcube\endcsname{{\FA\symbol{"F210}}}
|
||||||
|
\expandafter\def\csname faicon@forumbee\endcsname{{\FA\symbol{"F211}}}
|
||||||
|
\expandafter\def\csname faicon@leanpub\endcsname{{\FA\symbol{"F212}}}
|
||||||
|
\expandafter\def\csname faicon@sellsy\endcsname{{\FA\symbol{"F213}}}
|
||||||
|
\expandafter\def\csname faicon@shirtsinbulk\endcsname{{\FA\symbol{"F214}}}
|
||||||
|
\expandafter\def\csname faicon@simplybuilt\endcsname{{\FA\symbol{"F215}}}
|
||||||
|
\expandafter\def\csname faicon@skyatlas\endcsname{{\FA\symbol{"F216}}}
|
||||||
|
\expandafter\def\csname faicon@cart-plus\endcsname{{\FA\symbol{"F217}}}
|
||||||
|
\expandafter\def\csname faicon@cart-arrow-down\endcsname{{\FA\symbol{"F218}}}
|
||||||
|
\expandafter\def\csname faicon@diamond\endcsname{{\FA\symbol{"F219}}}
|
||||||
|
\expandafter\def\csname faicon@ship\endcsname{{\FA\symbol{"F21A}}}
|
||||||
|
\expandafter\def\csname faicon@user-secret\endcsname{{\FA\symbol{"F21B}}}
|
||||||
|
\expandafter\def\csname faicon@motorcycle\endcsname{{\FA\symbol{"F21C}}}
|
||||||
|
\expandafter\def\csname faicon@street-view\endcsname{{\FA\symbol{"F21D}}}
|
||||||
|
\expandafter\def\csname faicon@heartbeat\endcsname{{\FA\symbol{"F21E}}}
|
||||||
|
\expandafter\def\csname faicon@venus\endcsname{{\FA\symbol{"F221}}}
|
||||||
|
\expandafter\def\csname faicon@mars\endcsname{{\FA\symbol{"F222}}}
|
||||||
|
\expandafter\def\csname faicon@mercury\endcsname{{\FA\symbol{"F223}}}
|
||||||
|
\expandafter\def\csname faicon@transgender\endcsname{{\FA\symbol{"F224}}}
|
||||||
|
\expandafter\def\csname faicon@transgender-alt\endcsname{{\FA\symbol{"F225}}}
|
||||||
|
\expandafter\def\csname faicon@venus-double\endcsname{{\FA\symbol{"F226}}}
|
||||||
|
\expandafter\def\csname faicon@mars-double\endcsname{{\FA\symbol{"F227}}}
|
||||||
|
\expandafter\def\csname faicon@venus-mars\endcsname{{\FA\symbol{"F228}}}
|
||||||
|
\expandafter\def\csname faicon@mars-stroke\endcsname{{\FA\symbol{"F229}}}
|
||||||
|
\expandafter\def\csname faicon@mars-stroke-v\endcsname{{\FA\symbol{"F22A}}}
|
||||||
|
\expandafter\def\csname faicon@mars-stroke-h\endcsname{{\FA\symbol{"F22B}}}
|
||||||
|
\expandafter\def\csname faicon@neuter\endcsname{{\FA\symbol{"F22C}}}
|
||||||
|
\expandafter\def\csname faicon@genderless\endcsname{{\FA\symbol{"F22D}}}
|
||||||
|
\expandafter\def\csname faicon@facebook-official\endcsname{{\FA\symbol{"F230}}}
|
||||||
|
\expandafter\def\csname faicon@pinterest-p\endcsname{{\FA\symbol{"F231}}}
|
||||||
|
\expandafter\def\csname faicon@whatsapp\endcsname{{\FA\symbol{"F232}}}
|
||||||
|
\expandafter\def\csname faicon@server\endcsname{{\FA\symbol{"F233}}}
|
||||||
|
\expandafter\def\csname faicon@user-plus\endcsname{{\FA\symbol{"F234}}}
|
||||||
|
\expandafter\def\csname faicon@user-times\endcsname{{\FA\symbol{"F235}}}
|
||||||
|
\expandafter\def\csname faicon@bed\endcsname{{\FA\symbol{"F236}}}
|
||||||
|
\expandafter\def\csname faicon@viacoin\endcsname{{\FA\symbol{"F237}}}
|
||||||
|
\expandafter\def\csname faicon@train\endcsname{{\FA\symbol{"F238}}}
|
||||||
|
\expandafter\def\csname faicon@subway\endcsname{{\FA\symbol{"F239}}}
|
||||||
|
\expandafter\def\csname faicon@medium\endcsname{{\FA\symbol{"F23A}}}
|
||||||
|
\expandafter\def\csname faicon@y-combinator\endcsname{{\FA\symbol{"F23B}}}
|
||||||
|
\expandafter\def\csname faicon@optin-monster\endcsname{{\FA\symbol{"F23C}}}
|
||||||
|
\expandafter\def\csname faicon@opencart\endcsname{{\FA\symbol{"F23D}}}
|
||||||
|
\expandafter\def\csname faicon@expeditedssl\endcsname{{\FA\symbol{"F23E}}}
|
||||||
|
\expandafter\def\csname faicon@battery-full\endcsname{{\FA\symbol{"F240}}}
|
||||||
|
\expandafter\def\csname faicon@battery-three-quarters\endcsname{{\FA\symbol{"F241}}}
|
||||||
|
\expandafter\def\csname faicon@battery-half\endcsname{{\FA\symbol{"F242}}}
|
||||||
|
\expandafter\def\csname faicon@battery-quarter\endcsname{{\FA\symbol{"F243}}}
|
||||||
|
\expandafter\def\csname faicon@battery-empty\endcsname{{\FA\symbol{"F244}}}
|
||||||
|
\expandafter\def\csname faicon@mouse-pointer\endcsname{{\FA\symbol{"F245}}}
|
||||||
|
\expandafter\def\csname faicon@i-cursor\endcsname{{\FA\symbol{"F246}}}
|
||||||
|
\expandafter\def\csname faicon@object-group\endcsname{{\FA\symbol{"F247}}}
|
||||||
|
\expandafter\def\csname faicon@object-ungroup\endcsname{{\FA\symbol{"F248}}}
|
||||||
|
\expandafter\def\csname faicon@sticky-note\endcsname{{\FA\symbol{"F249}}}
|
||||||
|
\expandafter\def\csname faicon@sticky-note-o\endcsname{{\FA\symbol{"F24A}}}
|
||||||
|
\expandafter\def\csname faicon@cc-jcb\endcsname{{\FA\symbol{"F24B}}}
|
||||||
|
\expandafter\def\csname faicon@cc-diners-club\endcsname{{\FA\symbol{"F24C}}}
|
||||||
|
\expandafter\def\csname faicon@clone\endcsname{{\FA\symbol{"F24D}}}
|
||||||
|
\expandafter\def\csname faicon@balance-scale\endcsname{{\FA\symbol{"F24E}}}
|
||||||
|
\expandafter\def\csname faicon@hourglass-o\endcsname{{\FA\symbol{"F250}}}
|
||||||
|
\expandafter\def\csname faicon@hourglass-start\endcsname{{\FA\symbol{"F251}}}
|
||||||
|
\expandafter\def\csname faicon@hourglass-half\endcsname{{\FA\symbol{"F252}}}
|
||||||
|
\expandafter\def\csname faicon@hourglass-end\endcsname{{\FA\symbol{"F253}}}
|
||||||
|
\expandafter\def\csname faicon@hourglass\endcsname{{\FA\symbol{"F254}}}
|
||||||
|
\expandafter\def\csname faicon@hand-rock-o\endcsname{{\FA\symbol{"F255}}}
|
||||||
|
\expandafter\def\csname faicon@hand-paper-o\endcsname{{\FA\symbol{"F256}}}
|
||||||
|
\expandafter\def\csname faicon@hand-scissors-o\endcsname{{\FA\symbol{"F257}}}
|
||||||
|
\expandafter\def\csname faicon@hand-lizard-o\endcsname{{\FA\symbol{"F258}}}
|
||||||
|
\expandafter\def\csname faicon@hand-spock-o\endcsname{{\FA\symbol{"F259}}}
|
||||||
|
\expandafter\def\csname faicon@hand-pointer-o\endcsname{{\FA\symbol{"F25A}}}
|
||||||
|
\expandafter\def\csname faicon@hand-peace-o\endcsname{{\FA\symbol{"F25B}}}
|
||||||
|
\expandafter\def\csname faicon@trademark\endcsname{{\FA\symbol{"F25C}}}
|
||||||
|
\expandafter\def\csname faicon@registered\endcsname{{\FA\symbol{"F25D}}}
|
||||||
|
\expandafter\def\csname faicon@creative-commons\endcsname{{\FA\symbol{"F25E}}}
|
||||||
|
\expandafter\def\csname faicon@gg\endcsname{{\FA\symbol{"F260}}}
|
||||||
|
\expandafter\def\csname faicon@gg-circle\endcsname{{\FA\symbol{"F261}}}
|
||||||
|
\expandafter\def\csname faicon@tripadvisor\endcsname{{\FA\symbol{"F262}}}
|
||||||
|
\expandafter\def\csname faicon@odnoklassniki\endcsname{{\FA\symbol{"F263}}}
|
||||||
|
\expandafter\def\csname faicon@odnoklassniki-square\endcsname{{\FA\symbol{"F264}}}
|
||||||
|
\expandafter\def\csname faicon@get-pocket\endcsname{{\FA\symbol{"F265}}}
|
||||||
|
\expandafter\def\csname faicon@wikipedia-w\endcsname{{\FA\symbol{"F266}}}
|
||||||
|
\expandafter\def\csname faicon@safari\endcsname{{\FA\symbol{"F267}}}
|
||||||
|
\expandafter\def\csname faicon@chrome\endcsname{{\FA\symbol{"F268}}}
|
||||||
|
\expandafter\def\csname faicon@firefox\endcsname{{\FA\symbol{"F269}}}
|
||||||
|
\expandafter\def\csname faicon@opera\endcsname{{\FA\symbol{"F26A}}}
|
||||||
|
\expandafter\def\csname faicon@internet-explorer\endcsname{{\FA\symbol{"F26B}}}
|
||||||
|
\expandafter\def\csname faicon@television\endcsname{{\FA\symbol{"F26C}}}
|
||||||
|
\expandafter\def\csname faicon@contao\endcsname{{\FA\symbol{"F26D}}}
|
||||||
|
\expandafter\def\csname faicon@500px\endcsname{{\FA\symbol{"F26E}}}
|
||||||
|
\expandafter\def\csname faicon@amazon\endcsname{{\FA\symbol{"F270}}}
|
||||||
|
\expandafter\def\csname faicon@calendar-plus-o\endcsname{{\FA\symbol{"F271}}}
|
||||||
|
\expandafter\def\csname faicon@calendar-minus-o\endcsname{{\FA\symbol{"F272}}}
|
||||||
|
\expandafter\def\csname faicon@calendar-times-o\endcsname{{\FA\symbol{"F273}}}
|
||||||
|
\expandafter\def\csname faicon@calendar-check-o\endcsname{{\FA\symbol{"F274}}}
|
||||||
|
\expandafter\def\csname faicon@industry\endcsname{{\FA\symbol{"F275}}}
|
||||||
|
\expandafter\def\csname faicon@map-pin\endcsname{{\FA\symbol{"F276}}}
|
||||||
|
\expandafter\def\csname faicon@map-signs\endcsname{{\FA\symbol{"F277}}}
|
||||||
|
\expandafter\def\csname faicon@map-o\endcsname{{\FA\symbol{"F278}}}
|
||||||
|
\expandafter\def\csname faicon@map\endcsname{{\FA\symbol{"F279}}}
|
||||||
|
\expandafter\def\csname faicon@commenting\endcsname{{\FA\symbol{"F27A}}}
|
||||||
|
\expandafter\def\csname faicon@commenting-o\endcsname{{\FA\symbol{"F27B}}}
|
||||||
|
\expandafter\def\csname faicon@houzz\endcsname{{\FA\symbol{"F27C}}}
|
||||||
|
\expandafter\def\csname faicon@vimeo\endcsname{{\FA\symbol{"F27D}}}
|
||||||
|
\expandafter\def\csname faicon@black-tie\endcsname{{\FA\symbol{"F27E}}}
|
||||||
|
\expandafter\def\csname faicon@fonticons\endcsname{{\FA\symbol{"F280}}}
|
||||||
|
\expandafter\def\csname faicon@reddit-alien\endcsname{{\FA\symbol{"F281}}}
|
||||||
|
\expandafter\def\csname faicon@edge\endcsname{{\FA\symbol{"F282}}}
|
||||||
|
\expandafter\def\csname faicon@credit-card-alt\endcsname{{\FA\symbol{"F283}}}
|
||||||
|
\expandafter\def\csname faicon@codiepie\endcsname{{\FA\symbol{"F284}}}
|
||||||
|
\expandafter\def\csname faicon@modx\endcsname{{\FA\symbol{"F285}}}
|
||||||
|
\expandafter\def\csname faicon@fort-awesome\endcsname{{\FA\symbol{"F286}}}
|
||||||
|
\expandafter\def\csname faicon@usb\endcsname{{\FA\symbol{"F287}}}
|
||||||
|
\expandafter\def\csname faicon@product-hunt\endcsname{{\FA\symbol{"F288}}}
|
||||||
|
\expandafter\def\csname faicon@mixcloud\endcsname{{\FA\symbol{"F289}}}
|
||||||
|
\expandafter\def\csname faicon@scribd\endcsname{{\FA\symbol{"F28A}}}
|
||||||
|
\expandafter\def\csname faicon@pause-circle\endcsname{{\FA\symbol{"F28B}}}
|
||||||
|
\expandafter\def\csname faicon@pause-circle-o\endcsname{{\FA\symbol{"F28C}}}
|
||||||
|
\expandafter\def\csname faicon@stop-circle\endcsname{{\FA\symbol{"F28D}}}
|
||||||
|
\expandafter\def\csname faicon@stop-circle-o\endcsname{{\FA\symbol{"F28E}}}
|
||||||
|
\expandafter\def\csname faicon@shopping-bag\endcsname{{\FA\symbol{"F290}}}
|
||||||
|
\expandafter\def\csname faicon@shopping-basket\endcsname{{\FA\symbol{"F291}}}
|
||||||
|
\expandafter\def\csname faicon@hashtag\endcsname{{\FA\symbol{"F292}}}
|
||||||
|
\expandafter\def\csname faicon@bluetooth\endcsname{{\FA\symbol{"F293}}}
|
||||||
|
\expandafter\def\csname faicon@bluetooth-b\endcsname{{\FA\symbol{"F294}}}
|
||||||
|
\expandafter\def\csname faicon@percent\endcsname{{\FA\symbol{"F295}}}
|
||||||
|
\expandafter\def\csname faicon@gitlab\endcsname{{\FA\symbol{"F296}}}
|
||||||
|
\expandafter\def\csname faicon@wpbeginner\endcsname{{\FA\symbol{"F297}}}
|
||||||
|
\expandafter\def\csname faicon@wpforms\endcsname{{\FA\symbol{"F298}}}
|
||||||
|
\expandafter\def\csname faicon@envira\endcsname{{\FA\symbol{"F299}}}
|
||||||
|
\expandafter\def\csname faicon@universal-access\endcsname{{\FA\symbol{"F29A}}}
|
||||||
|
\expandafter\def\csname faicon@wheelchair-alt\endcsname{{\FA\symbol{"F29B}}}
|
||||||
|
\expandafter\def\csname faicon@question-circle-o\endcsname{{\FA\symbol{"F29C}}}
|
||||||
|
\expandafter\def\csname faicon@blind\endcsname{{\FA\symbol{"F29D}}}
|
||||||
|
\expandafter\def\csname faicon@audio-description\endcsname{{\FA\symbol{"F29E}}}
|
||||||
|
\expandafter\def\csname faicon@volume-control-phone\endcsname{{\FA\symbol{"F2A0}}}
|
||||||
|
\expandafter\def\csname faicon@braille\endcsname{{\FA\symbol{"F2A1}}}
|
||||||
|
\expandafter\def\csname faicon@assistive-listening-systems\endcsname{{\FA\symbol{"F2A2}}}
|
||||||
|
\expandafter\def\csname faicon@american-sign-language-interpreting\endcsname{{\FA\symbol{"F2A3}}}
|
||||||
|
\expandafter\def\csname faicon@deaf\endcsname{{\FA\symbol{"F2A4}}}
|
||||||
|
\expandafter\def\csname faicon@glide\endcsname{{\FA\symbol{"F2A5}}}
|
||||||
|
\expandafter\def\csname faicon@glide-g\endcsname{{\FA\symbol{"F2A6}}}
|
||||||
|
\expandafter\def\csname faicon@sign-language\endcsname{{\FA\symbol{"F2A7}}}
|
||||||
|
\expandafter\def\csname faicon@low-vision\endcsname{{\FA\symbol{"F2A8}}}
|
||||||
|
\expandafter\def\csname faicon@viadeo\endcsname{{\FA\symbol{"F2A9}}}
|
||||||
|
\expandafter\def\csname faicon@viadeo-square\endcsname{{\FA\symbol{"F2AA}}}
|
||||||
|
\expandafter\def\csname faicon@snapchat\endcsname{{\FA\symbol{"F2AB}}}
|
||||||
|
\expandafter\def\csname faicon@snapchat-ghost\endcsname{{\FA\symbol{"F2AC}}}
|
||||||
|
\expandafter\def\csname faicon@snapchat-square\endcsname{{\FA\symbol{"F2AD}}}
|
||||||
|
\expandafter\def\csname faicon@pied-piper\endcsname{{\FA\symbol{"F2AE}}}
|
||||||
|
\expandafter\def\csname faicon@first-order\endcsname{{\FA\symbol{"F2B0}}}
|
||||||
|
\expandafter\def\csname faicon@yoast\endcsname{{\FA\symbol{"F2B1}}}
|
||||||
|
\expandafter\def\csname faicon@themeisle\endcsname{{\FA\symbol{"F2B2}}}
|
||||||
|
\expandafter\def\csname faicon@google-plus-official\endcsname{{\FA\symbol{"F2B3}}}
|
||||||
|
\expandafter\def\csname faicon@font-awesome\endcsname{{\FA\symbol{"F2B4}}}
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 377 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 6.7 KiB |
@@ -0,0 +1,38 @@
|
|||||||
|
% 简历 / 个人简介
|
||||||
|
%
|
||||||
|
% 上游:huajh/awesome-latex-cv(awesome-source-cv.cls),LPPL 1.3c。
|
||||||
|
% 本文件为**虚构示例**(人物「张远航」及成果均系编造),仅演示版式。
|
||||||
|
%
|
||||||
|
% 写法要点:\par{...} 包住,段首的 \textbf{姓名,} 与正文连排。
|
||||||
|
% 这段是整份简历最长的连续文字,行距与断行在这里最能看出问题,
|
||||||
|
% 改动字号 / 行距后先看这一段。
|
||||||
|
%
|
||||||
|
% ⚠️⚠️ 成果数字全部用 \cvnum 取,**不要手写**。
|
||||||
|
% \cvnum{类别} = 该类在正文里被 \cvmark / \cvtagcount 标记了几次
|
||||||
|
% \cvnum*{A,B} = 多类求和
|
||||||
|
% 增删一条论文/专利/项目,这里的数字自动跟着变,不用回来改。
|
||||||
|
% 类别与标记位置的对应关系:
|
||||||
|
% SCI / EI / 核心 ← section_04 的 \cvtagcount{...}
|
||||||
|
% 专利 / 第一发明人 ← section_05 的 \cvmark{...}
|
||||||
|
% 软著 ← section_06
|
||||||
|
% 科研项目 / 主持 / 负责 ← section_07
|
||||||
|
% 转化 ← section_08
|
||||||
|
% 教研 ← section_09
|
||||||
|
% ⚠️ 编译要跑两遍,第一遍概述会显示 0(读到的是上一遍的统计)。
|
||||||
|
%
|
||||||
|
% ⚠️ 例外:项目总经费**仍是手写**。\experience 的参数里没有经费字段,
|
||||||
|
% 没法从条目里自动求和。若想自动,得给 \experience 加一个经费参数,
|
||||||
|
% 改动较大,故这里保留手填。
|
||||||
|
|
||||||
|
\par{
|
||||||
|
{\textbf{张远航,}}
|
||||||
|
男,1985 年 3 月生,山东青岛人。工学博士,中国海洋大学信息科学与工程学部
|
||||||
|
计算机科学与技术学院教授、博士生导师。主要研究方向为海洋遥感信息处理、
|
||||||
|
机器学习与海洋大数据、多源观测数据同化及海洋数值模式智能订正,发表相关论文
|
||||||
|
\cvnum*{SCI,EI,核心} 篇(SCI \cvnum{SCI} 篇、EI \cvnum{EI} 篇、
|
||||||
|
中文核心 \cvnum{核心} 篇),获授权发明专利 \cvnum{专利} 项
|
||||||
|
(第一发明人 \cvnum{第一发明人} 项),完成专利成果转化 \cvnum{转化} 项,
|
||||||
|
登记软件著作权 \cvnum{软著} 项,主持各级科研项目 \cvnum{主持} 项、
|
||||||
|
作为负责人承担 \cvnum{负责} 项,项目总经费 1200 余万元,
|
||||||
|
主持教研项目 \cvnum{教研} 项。
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
% 简历 / 工作经历
|
||||||
|
%
|
||||||
|
% 上游:huajh/awesome-latex-cv(awesome-source-cv.cls),LPPL 1.3c。
|
||||||
|
% 本文件为**虚构示例**(人物「张远航」及履历均系编造),仅演示版式。
|
||||||
|
%
|
||||||
|
% 版式:两列 tabular,左列时间用 \textsc(小型大写,数字不受影响),
|
||||||
|
% 右列职位 + 单位。表格是 rl 两列,宽度按内容自适应。
|
||||||
|
|
||||||
|
\sectionTitle{工作经历}{\faUniversity}
|
||||||
|
|
||||||
|
\begin{tabular}{rl}
|
||||||
|
\textsc{2021年12月 --至今} & \textbf{教授},信息科学与工程学部,计算机科学与技术学院,中国海洋大学,中国青岛\\
|
||||||
|
\textsc{2016年09月 --2021年11月} & \textbf{副教授},信息科学与工程学部,计算机科学与技术学院,中国海洋大学,中国青岛\\
|
||||||
|
\textsc{2013年07月 --2016年08月} & \textbf{博士后},海洋科学博士后流动站,中国海洋大学,中国青岛
|
||||||
|
\end{tabular}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
% 简历 / 教育经历
|
||||||
|
%
|
||||||
|
% 上游:huajh/awesome-latex-cv(awesome-source-cv.cls),LPPL 1.3c。
|
||||||
|
% 本文件为**虚构示例**(人物「张远航」及学历均系编造),仅演示版式。
|
||||||
|
%
|
||||||
|
% 版式:两列 tabular。注意「学校」那一段用 \\ & 另起一行续排,
|
||||||
|
% 这样一条经历占两行(学位/专业一行,学校一行),比挤成一行清楚。
|
||||||
|
% 不需要第二行时直接删掉 \\ & 那一句即可。
|
||||||
|
|
||||||
|
\sectionTitle{教育经历}{\faMortarBoard}
|
||||||
|
|
||||||
|
\begin{tabular}{rl}
|
||||||
|
\textsc{2009年09月 --2013年06月} & \textbf{博士,工学博士学位},计算机应用技术专业,信息科学与工程学院\\ & 中国海洋大学,中国青岛\\
|
||||||
|
\textsc{2011年09月 --2012年09月} & \textbf{联合培养博士},Computational Oceanography,College of Marine Science\\ & 南安普顿大学(UNIVERSITY OF SOUTHAMPTON),英国南安普顿\\
|
||||||
|
\textsc{2006年09月 --2009年06月} & \textbf{硕士,工学硕士学位},计算机软件与理论专业,信息科学与工程学院\\ & 中国海洋大学,中国青岛\\
|
||||||
|
\textsc{2002年09月 --2006年06月} & \textbf{本科,工学学士学位},计算机科学与技术专业,信息科学与工程学院\\ & 中国海洋大学,中国青岛
|
||||||
|
\end{tabular}
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
% 简历 / 学术论文
|
||||||
|
%
|
||||||
|
% 上游:huajh/awesome-latex-cv(awesome-source-cv.cls),LPPL 1.3c。
|
||||||
|
% 本文件为**虚构示例**:论文题名、作者、DOI、卷期页码均系编造,
|
||||||
|
% 仅期刊名与会议名使用真实出版物名称以演示排版效果。不指向任何真实文献。
|
||||||
|
%
|
||||||
|
% 版式:itemize,每条一个 \item。要点:
|
||||||
|
% · 自己的名字用 \textbf{...},通讯作者再加 *(原件就是 **姓名***)
|
||||||
|
% · 收录类型(SCI / EI / 核心)用 \cvtagcount{} 缀在末尾,字体与正文同号,
|
||||||
|
% 不会喧宾夺主。\cvtagcount 除了显示,还会给该类别 +1,
|
||||||
|
% 概述里的「论文 \cvnum*{SCI,EI,核心} 篇」就是数出来的。
|
||||||
|
% ⚠️ 不要写回 \textbf{SCI}——那样只显示不计数,概述会少算。
|
||||||
|
% · 条目里出现 & 必须写 \&(如 "Neural Comput \& Applic")
|
||||||
|
% · 网址长的可以在前面加 \\ 手动断行,避免溢出到页边
|
||||||
|
|
||||||
|
\sectionTitle{学术论文}{\faLeanpub}
|
||||||
|
|
||||||
|
\begin{itemize}
|
||||||
|
\item \textbf{张远航}, 李文博, 陈思远, and 王海涛. 2024. 融合注意力机制的
|
||||||
|
多尺度卷积网络用于近岸叶绿素浓度反演.
|
||||||
|
\textit{IEEE Transactions on Geoscience and Remote Sensing}, 62, 1, (2024), 1--15.
|
||||||
|
DOI: 10.9999/TGRS.2024.0000001.\cvtagcount{SCI}
|
||||||
|
\item \textbf{张远航}, 刘洋, 赵明轩. 2023. 基于图神经网络的多源海洋观测数据
|
||||||
|
时空插值方法.
|
||||||
|
2023 IEEE International Geoscience and Remote Sensing Symposium (IGARSS), 412--415.
|
||||||
|
中国青岛: IEEE, 2023. \\ https://doi.org/10.9999/IGARSS.2023.0000002.\cvtagcount{EI}
|
||||||
|
\item \textbf{张远航}, 孙悦, 周建华, 吴晓峰, 郑凯. 2023. 一种面向海洋浮标
|
||||||
|
观测序列的异常检测与修复框架.
|
||||||
|
2023 IEEE 18th Annual Conference on Industrial Electronics and Applications (ICIEA), 88--93.
|
||||||
|
中国青岛, 中国: IEEE, 2023. https://doi.org/10.9999/ICIEA.2023.0000003.\cvtagcount{EI}
|
||||||
|
\item 李文博, \textbf{张远航*}, 陈思远, 王海涛, 刘洋. 2022. 基于物理约束
|
||||||
|
深度学习的长江口溶解氧短期预测.
|
||||||
|
\textit{Environmental Modelling \& Software}, 155, 105--118 (2022).
|
||||||
|
https://doi.org/10.9999/envsoft.2022.0000004.\cvtagcount{SCI}
|
||||||
|
\item 赵明轩, 孙悦, 周建华, 吴晓峰, \textbf{张远航*}. 2022.
|
||||||
|
海表温度再分析产品的多尺度误差分解与订正.
|
||||||
|
\textit{海洋学报}, 44 (6): 1--12.
|
||||||
|
\\ https://doi.org/10.9999/actaoce.2022.0000005.\cvtagcount{核心}
|
||||||
|
\item 陈思远, 王海涛, \textbf{张远航*}, 李文博, 郑凯. 2021. "基于时序注意力
|
||||||
|
机制的赤潮发生概率预报模型." \textit{Journal of Marine Systems} 218 (5): 103--115.
|
||||||
|
https://doi.org/10.9999/jmarsys.2021.0000006.\cvtagcount{SCI}
|
||||||
|
\item 王海涛, 刘洋, and \textbf{张远航*}. 2021. "A Hybrid Data Assimilation
|
||||||
|
Scheme Coupling Ensemble Kalman Filter with Deep Learning."
|
||||||
|
In 2021 IEEE 17th International Conference on Computational Intelligence and Security (CIS), 201--206.
|
||||||
|
中国北京, 中国: IEEE. https://doi.org/10.9999/CIS.2021.0000007.\cvtagcount{EI}
|
||||||
|
\item 刘洋, 赵明轩, and \textbf{张远航*}. 2020. "Spatiotemporal Fusion of
|
||||||
|
Satellite and In-situ Observations for Coastal Water Quality Mapping."
|
||||||
|
\textit{IEEE Journal of Selected Topics in Applied Earth Observations and Remote Sensing} 13 (4): 1120--1133.
|
||||||
|
\\ https://doi.org/10.9999/jstars.2020.0000008.\cvtagcount{SCI}
|
||||||
|
\item 孙悦, 周建华, and \textbf{张远航*}. 2019. "Transfer Learning for
|
||||||
|
Cross-Region Chlorophyll Prediction with Limited Labels."
|
||||||
|
In \textit{Advances in Neural Information Processing Systems Workshops}. 中国青岛: 44--51.
|
||||||
|
Lecture Notes in Computer Science.
|
||||||
|
Cham: Springer International Publishing. \cvtagcount{EI}
|
||||||
|
\end{itemize}
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
% 简历 / 发明专利
|
||||||
|
%
|
||||||
|
% 上游:huajh/awesome-latex-cv(awesome-source-cv.cls),LPPL 1.3c。
|
||||||
|
% 本文件为**虚构示例**:发明人、专利名称、专利号、授权日均系编造,
|
||||||
|
% 不指向任何真实专利。
|
||||||
|
%
|
||||||
|
% 版式:itemize。原件按「本人第一发明人」与「本人非第一发明人」分两组、
|
||||||
|
% 中间空一行。本模板保留这个分组习惯 —— 评审看专利时第一发明人权重
|
||||||
|
% 明显不同,混在一起排是浪费。
|
||||||
|
% 专利号格式:ZL + 年份 + 序号 + . + 校验位(示例统一用 9999 段,
|
||||||
|
% 一眼可辨是假号)。
|
||||||
|
%
|
||||||
|
% ⚠️ 每条末尾的 \cvmark{专利} 是计数标记,不产生可见输出。
|
||||||
|
% 第一发明人的条目额外加 \cvmark{第一发明人},概述里的
|
||||||
|
% 「授权发明专利 \cvnum{专利} 项(第一发明人 \cvnum{第一发明人} 项)」
|
||||||
|
% 就是这么数出来的。增删条目时**标记要跟着走**,否则数字会不对。
|
||||||
|
|
||||||
|
\sectionTitle{发明专利}{\faWpforms}
|
||||||
|
|
||||||
|
\begin{itemize}
|
||||||
|
\item \textbf{张远航}, 李文博, 陈思远, 王海涛. 一种基于注意力机制的海表
|
||||||
|
叶绿素浓度反演方法. ZL209999000001.9. 2024-05-14.\cvmark{专利}
|
||||||
|
\cvmark{第一发明人}
|
||||||
|
\item \textbf{张远航}, 刘洋, 赵明轩, 孙悦. 多源海洋观测数据时空融合插值
|
||||||
|
装置及方法. ZL209999000002.6. 2023-11-07.\cvmark{专利}
|
||||||
|
\cvmark{第一发明人}
|
||||||
|
\item \textbf{张远航}, 陈思远, 王海涛, 周建华, 吴晓峰. 一种海洋浮标观测
|
||||||
|
序列异常检测与自动修复方法. ZL209999000003.3. 2023-06-20.\cvmark{专利}
|
||||||
|
\cvmark{第一发明人}
|
||||||
|
\item \textbf{张远航}, 孙悦, 周建华. 基于物理约束神经网络的水质参数短期
|
||||||
|
预测方法及系统. ZL209999000004.0. 2022-09-13.\cvmark{专利}
|
||||||
|
\cvmark{第一发明人}
|
||||||
|
\item \textbf{张远航}, 吴晓峰, 郑凯. 一种赤潮发生概率的时序预报方法.
|
||||||
|
ZL209999000005.8. 2022-03-29.
|
||||||
|
该方法以多源遥感与水文要素为输入。\cvmark{专利}
|
||||||
|
\cvmark{第一发明人}
|
||||||
|
\item \textbf{张远航}, 李文博, 刘洋. 面向近岸海域的遥感影像云检测与重建
|
||||||
|
方法. ZL209999000006.5. 2021-08-17.\cvmark{专利}
|
||||||
|
\cvmark{第一发明人}
|
||||||
|
|
||||||
|
\item 李文博, 陈思远, \textbf{张远航}. 一种海表温度再分析产品误差订正
|
||||||
|
方法. ZL209999000007.2. 2021-04-06.\cvmark{专利}
|
||||||
|
\item 赵明轩, 王海涛, \textbf{张远航}. 多尺度卷积特征融合的海洋要素
|
||||||
|
预报后处理装置. ZL209999000008.9. 2020-12-15.\cvmark{专利}
|
||||||
|
\item 周建华, 孙悦, \textbf{张远航}. 一种适用于稀疏站点的海洋数据
|
||||||
|
质量控制方法. ZL209999000009.7. 2020-07-21.\cvmark{专利}
|
||||||
|
\end{itemize}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
% 简历 / 软件著作权
|
||||||
|
%
|
||||||
|
% 上游:huajh/awesome-latex-cv(awesome-source-cv.cls),LPPL 1.3c。
|
||||||
|
% 本文件为**虚构示例**:软件名称、登记号、登记日均系编造,不指向任何
|
||||||
|
% 真实软著登记。
|
||||||
|
%
|
||||||
|
% 登记号格式:YYYY SR NNNNNNN(前 4 位是年份),后面跟「软著登字第 NNNNNNN 号」。
|
||||||
|
% 示例统一用 999999 段,一眼可辨是假号。
|
||||||
|
% 开发人员多于 6 人时可以考虑只列前几位加「等」,避免单条过长折行。
|
||||||
|
%
|
||||||
|
% ⚠️ 用 cvlist 环境自动计数:每多一个 \item,概述里的 \cvnum{软著} 就自动 +1。
|
||||||
|
% 增删条目**什么都不用改**,数字自己会跟上。
|
||||||
|
|
||||||
|
\sectionTitle{软件著作权}{\faTv}
|
||||||
|
|
||||||
|
\begin{cvlist}{软著}
|
||||||
|
\item \textbf{张远航}, 李文博, 陈思远, 王海涛, 刘洋, 赵明轩, 孙悦, 周建华.
|
||||||
|
近岸海域叶绿素浓度遥感反演系统. 2024. 2024SR9999901. 软著登字第 9999901 号.
|
||||||
|
\item \textbf{张远航}, 陈思远, 王海涛, 李文博, 吴晓峰, 郑凯.
|
||||||
|
多源海洋观测数据融合与质量控制检索系统. 2023. 2023SR9999902. 软著登字第 9999902 号.
|
||||||
|
\item \textbf{张远航}, 刘洋, 赵明轩. 海洋要素智能订正与预报后处理平台. 2023. 2023SR9999903. 软著登字第 9999903 号.
|
||||||
|
\item 李文博, \textbf{张远航}, 孙悦. 浮标观测序列异常检测与修复系统. 2022. 2022SR9999904. 软著登字第 9999904 号.
|
||||||
|
\item \textbf{张远航}, 周建华. 海洋卫星遥感影像云检测预处理系统. 2021. 2021SR9999905. 软著登字第 9999905 号.
|
||||||
|
\end{cvlist}
|
||||||
@@ -0,0 +1,87 @@
|
|||||||
|
% 简历 / 项目经验
|
||||||
|
%
|
||||||
|
% 上游:huajh/awesome-latex-cv(awesome-source-cv.cls),LPPL 1.3c。
|
||||||
|
% 本文件为**虚构示例**:项目名称、来源、经费、内容均系编造,不指向
|
||||||
|
% 任何真实项目。
|
||||||
|
%
|
||||||
|
% 版式:experiences 环境(longtable 两列),每条 \experience 有 7 个参数:
|
||||||
|
% ① 结束时间 ② 项目名称 ③ 项目来源 ④ 本人角色
|
||||||
|
% ⑤ 开始时间 ⑥ 项目内容(可含 itemize) ⑦ 技术关键词
|
||||||
|
%
|
||||||
|
% ⚠️ 参数顺序是「结束在前、开始在后」—— 上游模板就这么定义(\textsc{#1}
|
||||||
|
% 先印、\textsc{#5} 后印),第一次用极易写反。本文按正确顺序填写。
|
||||||
|
%
|
||||||
|
% ⚠️ 每条后面必须跟 \emptySeparator 才会分条;漏了会和下一条并成一格。
|
||||||
|
%
|
||||||
|
% ⚠️ 关键词用**英文逗号**分隔,\foreach 按 , 切分。用中文逗号会把整串
|
||||||
|
% 当成一个标签,撑成一个大框。
|
||||||
|
%
|
||||||
|
% ⚠️ 项目名称 / 内容越写越长会撞到右栏宽度。右栏宽由 cls 的
|
||||||
|
% \rightcolumnlength 按版心反算(\linewidth − 左栏 − 4\tabcolsep),
|
||||||
|
% 改完记住看日志有没有 Overfull。
|
||||||
|
%
|
||||||
|
% ⚠️ 每条描述块(\end{itemize} 之后、minipage 之内)的 \cvmark 是计数标记,
|
||||||
|
% 不产生可见输出。\cvmark{科研项目} 每条都有;\cvmark{主持} 仅当第 4 参数
|
||||||
|
% 是「主持」;\cvmark{负责} 对应子课题负责人/课题负责人/单位负责人。
|
||||||
|
% 概述里「主持 \cvnum{主持} 项、作为负责人承担 \cvnum{负责} 项」由此而来。
|
||||||
|
% ⚠️ 标记必须放在**描述参数**里(minipage 内),不能放关键词参数里——
|
||||||
|
% 关键词会被 \foreach 拆成单个标签,标记不但不生效还会报错。
|
||||||
|
|
||||||
|
\sectionTitle{项目经验}{\faCode}
|
||||||
|
|
||||||
|
\begin{experiences}
|
||||||
|
\experience
|
||||||
|
{2024年12月} {近岸海域生态健康多源数据融合与智能评估技术}{国家重点研发计划-青年科学家项目}{主持}
|
||||||
|
{2021年12月} {
|
||||||
|
\begin{itemize}
|
||||||
|
\item 建立卫星、浮标、岸基站三类观测的统一时空基准与质量控制流程
|
||||||
|
\item 提出物理约束的深度学习同化方案,近岸水质要素反演精度提升约 18\%
|
||||||
|
\end{itemize}
|
||||||
|
\cvmark{科研项目}\cvmark{主持}
|
||||||
|
}
|
||||||
|
{多源数据融合, 深度学习, 数据同化, 近岸水质}
|
||||||
|
\emptySeparator
|
||||||
|
\experience
|
||||||
|
{2023年11月} {海洋牧场环境在线监测与预警平台}{横向}{主持}
|
||||||
|
{2021年06月} {
|
||||||
|
\begin{itemize}
|
||||||
|
\item 面向企业需求搭建浮标数据接入、异常识别与分级预警的完整链路
|
||||||
|
\item 平台在 3 处海洋牧场部署运行,日均处理观测记录约 12 万条
|
||||||
|
\end{itemize}
|
||||||
|
\cvmark{科研项目}\cvmark{主持}
|
||||||
|
}
|
||||||
|
{在线监测, 异常检测, 预警平台, 边缘计算, 时序数据库}
|
||||||
|
\emptySeparator
|
||||||
|
\experience
|
||||||
|
{2022年09月} {渤海生态健康预测预警关键技术研发}{国家重点研发计划}{子课题负责人}
|
||||||
|
{2019年11月} {
|
||||||
|
\begin{itemize}
|
||||||
|
\item 负责生态健康风险滚动预警模型的构建与业务化对接
|
||||||
|
\item 耦合物理模式输出与机器学习订正模块,预警时效由 3 天延至 7 天
|
||||||
|
\end{itemize}
|
||||||
|
\cvmark{科研项目}\cvmark{负责}
|
||||||
|
}
|
||||||
|
{生态健康, 滚动预警, 模式订正, 机器学习}
|
||||||
|
\emptySeparator
|
||||||
|
\experience
|
||||||
|
{2021年10月} {青岛市近岸海域水质遥感监测能力建设}{青岛市海洋发展局}{单位负责人}
|
||||||
|
{2020年03月} {
|
||||||
|
\begin{itemize}
|
||||||
|
\item 制定近岸水质遥感监测的技术方案与业务规范
|
||||||
|
\item 完成两期业务人员培训并交付监测产品生成工具
|
||||||
|
\end{itemize}
|
||||||
|
\cvmark{科研项目}\cvmark{负责}
|
||||||
|
}
|
||||||
|
{遥感监测, 业务规范, 技术培训}
|
||||||
|
\emptySeparator
|
||||||
|
\experience
|
||||||
|
{2020年12月} {海洋大数据智能分析开放课题}{省重点实验室开放基金}{课题负责人}
|
||||||
|
{2019年01月} {
|
||||||
|
\begin{itemize}
|
||||||
|
\item 研究稀疏标签条件下的跨区域迁移学习方法
|
||||||
|
\item 构建面向近岸水质的公开基准数据集与评测协议
|
||||||
|
\end{itemize}
|
||||||
|
\cvmark{科研项目}\cvmark{负责}
|
||||||
|
}
|
||||||
|
{迁移学习, 小样本, 基准数据集, 海洋大数据}
|
||||||
|
\end{experiences}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
% 简历 / 成果转化
|
||||||
|
%
|
||||||
|
% 上游:huajh/awesome-latex-cv(awesome-source-cv.cls),LPPL 1.3c。
|
||||||
|
% 本文件为**虚构示例**:专利名称、受让单位、转化时间均系编造,
|
||||||
|
% 受让单位一律用带「(示例)」字样的虚构公司名,不指向任何真实企业。
|
||||||
|
%
|
||||||
|
% 每条格式:发明人. 专利名称. 转化方式. 受让单位. 时间.
|
||||||
|
% 转化方式写清「专利权实施普通许可 / 转让 / 作价入股」,评职称时这一栏
|
||||||
|
% 比金额更被看重。
|
||||||
|
%
|
||||||
|
% ⚠️ 用 cvlist 环境自动计数:每多一个 \item,概述里的 \cvnum{转化} 就自动 +1。
|
||||||
|
% 增删条目**什么都不用改**,数字自己会跟上。
|
||||||
|
|
||||||
|
\sectionTitle{成果转化}{\faAmericanSignLanguageInterpreting}
|
||||||
|
|
||||||
|
\begin{cvlist}{转化}
|
||||||
|
\item \textbf{张远航}. 一种赤潮发生概率的时序预报方法. 专利权实施普通许可.
|
||||||
|
青岛蓝湾海洋科技有限公司(示例). 2023年06月.
|
||||||
|
\item \textbf{张远航}. 基于物理约束神经网络的水质参数短期预测方法及系统. 专利权实施普通许可.
|
||||||
|
山东海慧信息技术有限公司(示例). 2022年11月.
|
||||||
|
\item \textbf{张远航}. 面向近岸海域的遥感影像云检测与重建方法. 专利权实施普通许可.
|
||||||
|
青岛海图数据科技股份有限公司(示例). 2022年04月.
|
||||||
|
\end{cvlist}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
% 简历 / 教研项目
|
||||||
|
%
|
||||||
|
% 上游:huajh/awesome-latex-cv(awesome-source-cv.cls),LPPL 1.3c。
|
||||||
|
% 本文件为**虚构示例**:项目名称、立项单位、起止时间均系编造。
|
||||||
|
%
|
||||||
|
% 每条格式:项目名称. 立项单位 + 项目类别. 起止时间. 本人角色.
|
||||||
|
% 「主持 / 参与」不要省 —— 教学类项目主持人身份是评教学奖的硬指标。
|
||||||
|
%
|
||||||
|
% ⚠️ 用 cvlist 环境自动计数:每多一个 \item,概述里的 \cvnum{教研} 就自动 +1。
|
||||||
|
% 增删条目**什么都不用改**,数字自己会跟上。
|
||||||
|
|
||||||
|
\sectionTitle{教研项目}{\faGroup}
|
||||||
|
|
||||||
|
\begin{cvlist}{教研}
|
||||||
|
\item 海洋大数据分析案例库建设. 中国海洋大学研究生科研创新能力提升计划
|
||||||
|
专业学位研究生教学案例库建设项目. 2023.06 至今. 主持.
|
||||||
|
\item 机器学习与海洋应用. 中国海洋大学 2022 年度教材建设基金重点项目. 2022.03 至今. 主持.
|
||||||
|
\item 面向新工科的海洋信息类课程混合式教学模式改革. 中国海洋大学本科
|
||||||
|
教育教学研究一般项目. 2021.09 至 2023.08. 主持.
|
||||||
|
\item 数据科学与海洋情怀. 信息科学与工程学部课程思政建设项目. 2021.03 至 2022.12. 主持.
|
||||||
|
\end{cvlist}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
% 简历 / 奖励与荣誉
|
||||||
|
%
|
||||||
|
% 上游:huajh/awesome-latex-cv(awesome-source-cv.cls),LPPL 1.3c。
|
||||||
|
% 本文件为**虚构示例**:获奖名称、名次、时间均系编造,不指向任何
|
||||||
|
% 真实评奖结果。
|
||||||
|
%
|
||||||
|
% 版式:两列 tabular,左时间右内容。**按时间倒序**排(最近的在最上)——
|
||||||
|
% 上游原件就是这个顺序,评审也习惯从最近的看起。
|
||||||
|
%
|
||||||
|
% 获奖层级的写法建议:国家级 / 省部级 / 校级 / 院级,并在括号里注名次
|
||||||
|
% (如「(第×位)」)或角色(如「(指导老师)」)。名次不写,评职称时
|
||||||
|
% 有时会被按最低权重算。
|
||||||
|
|
||||||
|
\sectionTitle{奖励与荣誉}{\faGavel}
|
||||||
|
|
||||||
|
\begin{tabular}{rl}
|
||||||
|
2024年11月 & 中国国际大学生创新大赛总决赛高教主赛道二等奖(指导老师) \\
|
||||||
|
2024年06月 & 中国海洋大学信息科学与工程学部优秀共产党员\\
|
||||||
|
2023年12月 & 山东省科技进步奖二等奖(第 2 位) \\
|
||||||
|
2023年09月 & 信息科学与工程学部首届教案展评优秀奖 \\
|
||||||
|
2023年05月 & 山东省第九届高校青年教师教学比赛优秀奖 \\
|
||||||
|
2022年12月 & 中国海洋大学青年教师教学大赛二等奖 \\
|
||||||
|
2022年10月 & 中国海洋大学第九届研究生体育文化节羽毛球比赛第一名 \\
|
||||||
|
2021年12月 & 2021 年度中国海洋大学优秀工会积极分子 \\
|
||||||
|
2021年11月 & 山东省科学技术进步一等奖(第 4 位) \\
|
||||||
|
2020年12月 & 中国海洋大学 2020 年度"优秀班主任"称号 \\
|
||||||
|
2019年12月 & 中国海洋大学青年教师教学比赛三等奖 \\
|
||||||
|
2012年12月 & 博士研究生国家奖学金 \\
|
||||||
|
2012年06月 & 中国海洋大学优秀研究生 \\
|
||||||
|
2011年12月 & 研究生优秀奖学金学习优秀奖 \\
|
||||||
|
2006年06月 & 山东省优秀毕业生 \\
|
||||||
|
2006年06月 & 中国海洋大学优秀毕业生 \\
|
||||||
|
\end{tabular}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
% Awesome CV LaTeX Template
|
||||||
|
%
|
||||||
|
% This template has been downloaded from:
|
||||||
|
% https://github.com/huajh/huajh-awesome-latex-cv
|
||||||
|
%
|
||||||
|
% Author:
|
||||||
|
% Junhao Hua
|
||||||
|
|
||||||
|
|
||||||
|
%Section: Interests
|
||||||
|
%\section{\texorpdfstring{\color{Blue}Interests}{Interests}}
|
||||||
|
\sectionTitle{兴趣爱好}{\faLightbulbO}
|
||||||
|
|
||||||
|
\begin{tabular}{rl}
|
||||||
|
\textsc{体育:} & 篮球,足球,攀岩,极限运动,野外生存 \\
|
||||||
|
\textsc{艺术:} & 摄影,绘画,电影 \\
|
||||||
|
\textsc{其他:} & 旅行,量化投资\\
|
||||||
|
\end{tabular}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
% Awesome CV LaTeX Template
|
||||||
|
%
|
||||||
|
% This template has been downloaded from:
|
||||||
|
% https://github.com/huajh/huajh-awesome-latex-cv
|
||||||
|
%
|
||||||
|
% Author:
|
||||||
|
% Junhao Hua
|
||||||
|
|
||||||
|
%Section: Languages
|
||||||
|
\sectionTitle{语言}{\faLanguage}
|
||||||
|
|
||||||
|
\begin{tabular}{lrll}
|
||||||
|
\textsc{英语:} & \skill{ 阅读}{5} & \textsc{4级: 502} \\
|
||||||
|
& \skill{听力}{4} & \textsc{6级: 478} \\
|
||||||
|
& \skill{口语}{3} & \\
|
||||||
|
\end{tabular}
|
||||||
|
%Chinese Mandarin (native)\\
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
% Awesome CV LaTeX Template
|
||||||
|
%
|
||||||
|
% This template has been downloaded from:
|
||||||
|
% https://github.com/huajh/huajh-awesome-latex-cv
|
||||||
|
%
|
||||||
|
% Author:
|
||||||
|
% Junhao Hua
|
||||||
|
|
||||||
|
%Section: Reference
|
||||||
|
\sectionTitle{Reference}{\faGroup}
|
||||||
|
|
||||||
|
\begin{tabular}{>{\small}r >{\small}p{8cm} >{\small}r >{\small}l}
|
||||||
|
|
||||||
|
\multicolumn{2}{l}{\textsc{hello world}, \emph{Lord of Winterfell}} & \multicolumn{2}{l}{\textsc{John Snow}, \emph{Lord Commander of the Night Watch}} \\
|
||||||
|
\quad \faMobilePhone & +33 6 23 45 67 89 & \quad \faMobilePhone & +86 6 23 45 67 90\\
|
||||||
|
\quad \faPhone & +33 157 2569 1478 & \quad \faPhone& +86 123 4567 5678\\
|
||||||
|
\quad \mailSymbol & \href{mailto:hello@world.org}{hello@world.org} & \quad \mailSymbol & \href{mailto:J.Snow@night.com}{J.Snow@night.com}\\
|
||||||
|
|
||||||
|
\end{tabular}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
% Awesome CV LaTeX Template
|
||||||
|
%
|
||||||
|
% This template has been downloaded from:
|
||||||
|
% https://github.com/huajh/huajh-awesome-latex-cv
|
||||||
|
%
|
||||||
|
% Author:
|
||||||
|
% Junhao Hua
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
\sectionTitle{相关技能}{\faListUl}
|
||||||
|
\renewcommand{\arraystretch}{1.1}
|
||||||
|
|
||||||
|
\begin{tabular}{>{}r>{}p{13cm}}
|
||||||
|
\textsc{编程技能:} & \textbf{C/C++}, Matlab, \LaTeX, Python, Java.\\
|
||||||
|
\textsc{机器学习:} & \emph{掌握} \textbf{变分贝叶斯,分布式机器学习,概率图模型} \\
|
||||||
|
& \emph{熟悉} 大多数统计机器学习、统计信号处理算法 \\
|
||||||
|
& \emph{熟悉} 最优化理论(凸优化),矩阵论 \\
|
||||||
|
\textsc{计算机视觉:} & \emph{了解} 图像处理(分割,分类等),视频分析(目标识别,跟踪等) \\
|
||||||
|
\textsc{软考证书:} & 中级网络工程师,中级软件设计师,数据库技术三级\\
|
||||||
|
% \textsc{开发平台:} & Sublime Text, VSCode, MATLAB, Git, Visual Studio.
|
||||||
|
\end{tabular}
|
||||||
|
|
||||||
@@ -0,0 +1,109 @@
|
|||||||
|
% !TEX TS-program = xelatex
|
||||||
|
% !TEX encoding = UTF-8 Unicode
|
||||||
|
%======================================================================
|
||||||
|
% 简历.tex —— 个人简历模板(中国海洋大学 LaTeX 模板库第 11 个模板)
|
||||||
|
%
|
||||||
|
% 上游:huajh/awesome-latex-cv 中文版(awesome-source-cv.cls)
|
||||||
|
% 授权:LPPL 1.3c(见本目录 LICENSE)
|
||||||
|
%
|
||||||
|
% ------------------------------------------------------------------
|
||||||
|
% 与上游的三处关键改动
|
||||||
|
% ------------------------------------------------------------------
|
||||||
|
% ① 字体全部换成本仓库自带的(../fonts/ + ../fonts.tex)
|
||||||
|
% 原件用 Adobe 宋/黑/楷/仿 4 款共 56 MB —— 商业授权不能分发;
|
||||||
|
% 还拿 HarmonyOS Sans 冒充 Bold/Italic(等于加粗不变、斜体不变)。
|
||||||
|
% 现在:中文 OUC Serif(真粗体 + 楷体代斜体)、西文 TeX Gyre Termes。
|
||||||
|
% 详见 awesome-source-cv.cls 的「Configuration for fonts」段。
|
||||||
|
%
|
||||||
|
% ② 不再需要 zh_cn-adobefonts_external.sty
|
||||||
|
% 那个文件只干一件事:设 Adobe 中文字体。现在由 ../fonts.tex
|
||||||
|
% 统一设,所以它不在本目录里。
|
||||||
|
%
|
||||||
|
% ③ 内容改为**虚构示例**
|
||||||
|
% 原 .tex 是填好的真实简历(真名、手机、邮箱、住址、出生年月、
|
||||||
|
% 专利号、论文题目)。本仓库的规矩是示例不含真人信息,故重写为
|
||||||
|
% 一份完整的虚构简历:人物「张远航」,单位、学历、论文、专利、
|
||||||
|
% 软著、项目、获奖全部编造。选「虚构值」而不是全打 ×,是因为
|
||||||
|
% 满篇 × 的示例既看不出排版效果,也没法直接对着改。
|
||||||
|
% 结构、章节顺序、排版与原版一致,按下面的「怎么填」一节替换即可。
|
||||||
|
%
|
||||||
|
% ------------------------------------------------------------------
|
||||||
|
% 编译
|
||||||
|
% ------------------------------------------------------------------
|
||||||
|
% cd 简历
|
||||||
|
% xelatex 简历.tex
|
||||||
|
% xelatex 简历.tex ← 跑两遍(hyperref 书签 + longtable 列宽)
|
||||||
|
%
|
||||||
|
% ⚠️ 必须在本模板目录下编译,不能从仓库根调用 —— fonts.tex 用的是
|
||||||
|
% 相对路径 ../fonts/,工作目录变了就找不到字体。
|
||||||
|
%
|
||||||
|
% ⚠️ 必须是 XeLaTeX。pdflatex 会在 fontspec 处直接失败。
|
||||||
|
%
|
||||||
|
% ------------------------------------------------------------------
|
||||||
|
% 怎么填
|
||||||
|
% ------------------------------------------------------------------
|
||||||
|
% \name{}{张远航} 姓名(第一个参数是西文名,中文简历留空)
|
||||||
|
% \tagline{中国海洋大学 教授} 头衔一行
|
||||||
|
% \photo{2.5cm}{photo} 照片,photo.jpg(不想要就整行删掉,
|
||||||
|
% 删后 \makecvheader 会自动占满整行)
|
||||||
|
% \socialinfo{...} 联系方式,里面的 \smartphone / \email /
|
||||||
|
% \address / \infos 都是可选的,不用的删掉
|
||||||
|
%
|
||||||
|
% section_XX_*.tex 各章节,按需要增删;主文件末尾 \input 的顺序
|
||||||
|
% 就是排版顺序
|
||||||
|
%======================================================================
|
||||||
|
\documentclass[localFont]{awesome-source-cv}
|
||||||
|
|
||||||
|
% 字体入口:仓库唯一允许声明字体的地方。
|
||||||
|
% ⚠️ 必须在 \documentclass 之后、\begin{document} 之前。
|
||||||
|
\input{../fonts.tex}
|
||||||
|
|
||||||
|
\usepackage{xeCJK}
|
||||||
|
|
||||||
|
% ⚠️⚠️ 以下全部内容为**虚构示例**,人物「张远航」及其单位、论文、专利、
|
||||||
|
% 软著、项目、获奖均系编造,不对应任何真实人物与成果。仅用于演示版式,
|
||||||
|
% 使用时请整体替换为自己的信息。
|
||||||
|
|
||||||
|
\name{}{张远航}
|
||||||
|
|
||||||
|
\tagline{中国海洋大学 教授}
|
||||||
|
\photo{2.5cm}{photo}
|
||||||
|
|
||||||
|
% 左上角校徽(可选)。不写这一行就完全不出现。
|
||||||
|
% 28mm 是这块空间里视觉最平衡的尺寸:页边距只有 15mm、姓名墨迹顶在 17.2mm,
|
||||||
|
% 再大就压到姓名上。想换样式:\cvlogo{28mm}[ouc_logo_彩色](圆形校徽)
|
||||||
|
% 想微调位置(默认距纸左 10mm、距纸顶 6mm):
|
||||||
|
% \setlength{\cvlogox}{12mm}
|
||||||
|
% \setlength{\cvlogoy}{8mm}
|
||||||
|
\cvlogo{28mm}
|
||||||
|
\socialinfo{
|
||||||
|
\infos{出生年月:1985.03 \quad 籍贯:山东青岛 \quad 政治面貌:中共党员}\\
|
||||||
|
\smartphone{(+86) 138 0000 0000}
|
||||||
|
\email{yhzhang@ouc.edu.cn} \emailO{yhzhang@example.net}\\
|
||||||
|
\address{山东省青岛市崂山区松岭路 238 号 中国海洋大学 信息科学与工程学部}
|
||||||
|
% ⚠️ 上面这行**不要**加结尾的 \\ 。\socialinfo 的内容会被塞进
|
||||||
|
% minipage 里的普通段落,末尾多一个 \\ 就等于多一个空行,
|
||||||
|
% 日志刷 Underfull \hbox (badness 10000) in paragraph(not fatal,
|
||||||
|
% 但属于无谓的脏警告)。中间的 \\ 是分行,必须留。
|
||||||
|
}
|
||||||
|
|
||||||
|
\begin{document}
|
||||||
|
|
||||||
|
\makecvheader
|
||||||
|
|
||||||
|
\input{section_01_headline}
|
||||||
|
\input{section_02_work_experience}
|
||||||
|
\input{section_03_education} % 教育经历
|
||||||
|
\input{section_04_publications} % 学术论文
|
||||||
|
\input{section_05_patents} % 发明专利
|
||||||
|
\input{section_06_software} % 软件著作权
|
||||||
|
\input{section_07_project} % 项目经验
|
||||||
|
\input{section_08_zhuanhua} % 成果转化
|
||||||
|
\input{section_09_jiaoyan} % 教研项目
|
||||||
|
\input{section_10_awards} % 奖励与荣誉
|
||||||
|
% \input{section_interests} % 兴趣爱好(默认不印)
|
||||||
|
% \input{section_references} % Reference(默认不印)
|
||||||
|
% \input{section_skills} % 相关技能(默认不印)
|
||||||
|
% \input{section_languages} % 语言(默认不印)
|
||||||
|
|
||||||
|
\end{document}
|
||||||
+135
-59
@@ -1,85 +1,161 @@
|
|||||||
# 试卷 —— 试卷与参考答案 LaTeX 模板
|
# 试卷
|
||||||
|
|
||||||
中国海洋大学期末考试**试卷**与**参考答案及评分标准**的 XeLaTeX 模板。
|
期末考试试卷 + 参考答案与评分标准,两套模板,A4 两栏。
|
||||||
两份模板均不含真题,题目与分值都是示意,按教学大纲替换即可。
|
|
||||||
|
## 编译
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd 试卷
|
||||||
|
xelatex 试卷题型示例.tex
|
||||||
|
xelatex 试卷题型示例.tex # 题号交叉引用需要两遍
|
||||||
|
|
||||||
|
xelatex 参考答案与评分标准示例.tex
|
||||||
|
xelatex 参考答案与评分标准示例.tex
|
||||||
|
```
|
||||||
|
|
||||||
|
或仓库根:`bash build.sh 试卷 试卷题型示例`(自动跑两遍)
|
||||||
|
|
||||||
## 文件
|
## 文件
|
||||||
|
|
||||||
| 文件 | 说明 |
|
| 文件 | 说明 |
|
||||||
|---|---|
|
|---|---|
|
||||||
| `oucexam.sty` | 试卷版式包。纸张 195×270mm(学校专用试卷纸),含装订栏、成绩表、页脚 |
|
| `试卷题型示例.tex` | 试卷,16 种题型展示 |
|
||||||
| `ouckey.sty` | 答案与评分标准版式包。默认 A4;加 `exampaper` 选项则与试卷同纸同边距 |
|
| `参考答案与评分标准示例.tex` | 答案与评分标准 |
|
||||||
| `试卷题型示例.tex` | 试卷范例,16 类题型,6 页 |
|
| `oucexam.sty` | 试卷版式包 |
|
||||||
| `参考答案与评分标准示例.tex` | 答案范例,8 大题 / 满分 100,3 页 |
|
| `ouckey.sty` | 答案版式包 |
|
||||||
|
|
||||||
## 编译
|
## 试卷:卷头参数
|
||||||
|
|
||||||
```bash
|
|
||||||
xelatex 试卷题型示例.tex
|
|
||||||
xelatex 试卷题型示例.tex # 跑两遍,第二遍才能取到正确总页数(lastpage)
|
|
||||||
```
|
|
||||||
|
|
||||||
必须用 **XeLaTeX**(fontspec + xeCJK),pdflatex 编译不过。
|
|
||||||
两份 .tex 都在本目录内自包含,不依赖任何图片文件(示例配图是 TikZ 内联画的)。
|
|
||||||
|
|
||||||
## 试卷模板要点
|
|
||||||
|
|
||||||
纸张、页边距、行距、装订栏位置、页脚样式都已在 `oucexam.sty` 里按原卷实测值定好,
|
|
||||||
一般**只改 `\examsetup` 那一块**:
|
|
||||||
|
|
||||||
```latex
|
```latex
|
||||||
|
\documentclass[UTF8,fontset=none]{ctexart}
|
||||||
|
\usepackage{oucexam}
|
||||||
|
|
||||||
\examsetup{
|
\examsetup{
|
||||||
year = {2025}, % 学年(会自动印成 2025—2026)
|
year = {2025}, % 学年
|
||||||
term = {秋}, % 秋 / 春
|
term = {秋}, % 季学期
|
||||||
course = {课程名称},
|
course = {数字逻辑}, % 课程名称
|
||||||
college = {××学院},
|
college = {信息科学与工程学院},
|
||||||
type = {A}, % 卷头「试卷类型:A 卷」
|
type = {A}, % 试卷类型 A / B
|
||||||
foottype = {}, % 页脚课程名后是否再印类型字母,空=不印
|
foottype = {}, % 页脚是否再印类型字母,留空则不印
|
||||||
proposer = {}, % 命题人
|
proposer = {}, % 命题人
|
||||||
reviewer = {}, % 审核人
|
reviewer = {}, % 审题人
|
||||||
mode = {闭卷},
|
mode = {闭卷}, % 考试方式
|
||||||
allowed = {无}, % 允许携带的物品
|
allowed = {无}, % 允许携带的物品
|
||||||
nsec = {16}, % 大题数,成绩表自动按 nsec+1 栏等分
|
nsec = {16}, % 大题数量(成绩表按此栏数等分)
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
- `type` 与 `foottype` 互不影响:前者只管卷头,后者只管页脚。
|
| 参数 | 说明 |
|
||||||
原卷 A 卷页脚没印字母、B 卷印了 B,这是出卷人手工差异,不是规则。
|
|---|---|
|
||||||
- 大题数变了必须同步改 `nsec`,否则成绩表格子会错位。
|
| `year` | 学年 |
|
||||||
|
| `term` | 季学期 |
|
||||||
|
| `course` | 课程名称 |
|
||||||
|
| `college` | 学院 |
|
||||||
|
| `type` | 试卷类型,A / B |
|
||||||
|
| `foottype` | 页脚类型字母,留空不印 |
|
||||||
|
| `proposer` | 命题人,留空不印 |
|
||||||
|
| `reviewer` | 审题人,留空不印 |
|
||||||
|
| `mode` | 闭卷 / 开卷 |
|
||||||
|
| `allowed` | 允许携带物品 |
|
||||||
|
| `nsec` | 大题数量,决定卷头成绩表的栏数 |
|
||||||
|
|
||||||
## 答案模板要点
|
留空的项自动不印,不会留空白横线。
|
||||||
|
|
||||||
|
## 试卷:题型命令
|
||||||
|
|
||||||
|
16 种题型,按需用:
|
||||||
|
|
||||||
|
| 题型 | 命令 |
|
||||||
|
|---|---|
|
||||||
|
| 一、填空题 | `\blank[n]` 按字宽画横线,`\lblank` 通栏横线 |
|
||||||
|
| 二、判断题 | `\judge` 括号在题首 |
|
||||||
|
| 三、单项选择题 | `\choices` 一行四栏 |
|
||||||
|
| 四、多项选择题 | `\choicesII` 两行两栏 |
|
||||||
|
| 五、名词解释 | `\answerlines[n]` 答题横线 |
|
||||||
|
| 六、简答题 | 题号用 `\qiT`(Times 数字) |
|
||||||
|
| 七、判断改错题 | `\judge` + 改错横线 |
|
||||||
|
| 八、计算题 | 表格 + `\answerbox` 作答框 |
|
||||||
|
| 九、作图题 | 大方框作答 |
|
||||||
|
| 十、配伍题 | `\mtpair` 左右两栏,中间连线 |
|
||||||
|
| 十一、表格填写题 | `\datatable` + 空格 |
|
||||||
|
| 十二、术语翻译题 | 英译中 / 中译英 |
|
||||||
|
| 十三、证明题 | 逻辑推演,大作答区 |
|
||||||
|
| 十四、分析题 | 配图,用 `\examfig{宽度}{文件}` |
|
||||||
|
| 十五、实验设计题 | 方案要素 + 大作答区 |
|
||||||
|
| 十六、论述题 | 大段作答区 |
|
||||||
|
|
||||||
|
大题标题写法:
|
||||||
|
|
||||||
```latex
|
```latex
|
||||||
|
\examsection{一、填空题(每空 1 分,共 10 分)}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 答案:卷头参数
|
||||||
|
|
||||||
|
```latex
|
||||||
|
\usepackage{ouckey}
|
||||||
|
|
||||||
\keysetup{
|
\keysetup{
|
||||||
year = {2025}, term = {秋}, course = {课程名称}, type = {A},
|
year = {2025}, % 学年
|
||||||
dept = {××学院}, college = {××学院},
|
term = {秋}, % 季学期
|
||||||
major = {××专业 \TNR{2024} 级},
|
course = {数字逻辑}, % 课程名称
|
||||||
teacher = {×××}, examiner = {×××},
|
type = {A}, % 试卷类型
|
||||||
mode = {闭卷、笔试}, total = {100},
|
dept = {计算机科学与技术学院},
|
||||||
|
college = {信息科学与工程学院},
|
||||||
|
major = {计算机科学与技术专业 \TNR{2023} 级},
|
||||||
|
teacher = {张远航}, % 任课教师
|
||||||
|
examiner = {张远航}, % 命题教师
|
||||||
|
mode = {闭卷、笔试},
|
||||||
|
total = {100}, % 满分
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
如实现在试卷同一张纸上印,把 `\usepackage{ouckey}` 改成 `\usepackage[exampaper]{ouckey}`。
|
| 参数 | 说明 |
|
||||||
|
|---|---|
|
||||||
|
| `year` `term` `course` `type` | 与试卷一致 |
|
||||||
|
| `dept` | 系 |
|
||||||
|
| `college` | 学院 |
|
||||||
|
| `major` | 面向专业与年级 |
|
||||||
|
| `teacher` | 任课教师 |
|
||||||
|
| `examiner` | 命题教师 |
|
||||||
|
| `mode` | 考试方式 |
|
||||||
|
| `total` | 满分 |
|
||||||
|
|
||||||
体例四条(学校没有统一模板,按国内高校通行做法拟定):
|
## 答案:命令
|
||||||
|
|
||||||
1. 抬头信息齐全,留空的项自动不印、不留空横线
|
| 命令 | 用途 |
|
||||||
2. 客观题答案集中列(`\objkeys{C,B,A,...}`,每行 6 个自动换行),附统一给分规则
|
|---|---|
|
||||||
3. 主观题**内嵌**分步分值(`\pt{2}`),阅卷时批到哪里看到哪里
|
| `\makekeyhead` | 印抬头 |
|
||||||
4. 每个大题末尾给【评分标准】`\scoring{...}`
|
| `\keysection{标题}` | 大题的标题与答案区 |
|
||||||
|
| `\keysectionfree{标题}` | 不带答案框的标题 |
|
||||||
|
| `\keyitem{...}` | 一条答案与评分点 |
|
||||||
|
| `\keyitemstar{...}` | 带星号的答案条目 |
|
||||||
|
| `\keynote{...}` | 说明性注释 |
|
||||||
|
| `\scoring{分值}` | 标出评分点分值 |
|
||||||
|
| `\keytotal` | 末尾的分数汇总表 |
|
||||||
|
| `\keysign` | 签字栏 |
|
||||||
|
| `\objkeys{...}` | 客观题答案(判断、选择) |
|
||||||
|
| `\pt{n}` / `\ptline` | 分值标注 |
|
||||||
|
|
||||||
主观题内嵌分值是有意为之:阅卷是流水作业,分值必须和答案文字贴在一起,
|
答案与试卷的题号、分值要一一对应,改试卷时答案模板也要同步改。
|
||||||
集中写在末尾会让批卷人来回翻页。
|
|
||||||
|
|
||||||
文末 `\keytotal{20,10,12,12,12,16,8,10}` 是分值汇总表,用于阅卷前核对
|
## 版式
|
||||||
「各大题相加 = 满分」。签名栏 `\keysign` 只留命题人一处。
|
|
||||||
|
|
||||||
## 书写注意
|
```
|
||||||
|
A4 两栏,栏宽 82mm
|
||||||
|
试卷:题号与作答区按题型自动排
|
||||||
|
答案:每题带评分点标注,末尾总分汇总表
|
||||||
|
正文宋体,题号用 Times
|
||||||
|
```
|
||||||
|
|
||||||
- 题干内部换行用 `\\*`,**不要用裸 `\\`**。裸 `\\` 语义是"允许在此断页",
|
## 配图
|
||||||
题干会被切到上下两页,学生看到半句话。
|
|
||||||
- 数字、英文用 `\TNR{...}` 包起来(内部显式 `\normalfont` 收尾)。
|
分析题等需要配图时,用 TikZ 直接画,或:
|
||||||
裸用字体切换命令会让字体状态泄漏到后续段落。
|
|
||||||
- `\keyitem{题号}{分值}{答案正文}` 的参数里**不要嵌 `tabular` / `tikzpicture`**——
|
```latex
|
||||||
这些环境的 `&` 与 `\\` 会被当成参数分隔符,报 `File ended while scanning`。
|
\examfig{0.6\textwidth}{图片文件.png}
|
||||||
表格和图写在 `\keyitem` 之后。
|
```
|
||||||
|
|
||||||
|
## 注意
|
||||||
|
|
||||||
|
示例内容为虚构题目,使用时全部替换。
|
||||||
+188
-40
@@ -45,41 +45,146 @@
|
|||||||
\AtBeginDocument{\linespread{1}\Fivhao\selectfont}
|
\AtBeginDocument{\linespread{1}\Fivhao\selectfont}
|
||||||
|
|
||||||
%======================================================================
|
%======================================================================
|
||||||
% 2. 字体
|
% 2. 字体(全部统一为思源宋体)
|
||||||
% 全部取自仓库公共字体包 ../fonts.tex(字体文件在 ../fonts/ 下)。
|
% 全部取自仓库公共字体包 ../fonts.tex(字体文件在 ../fonts/ 下)。
|
||||||
% 旧版这里是 SimSun / SimHei / KaiTi / Times New Roman 四个系统字体,
|
|
||||||
% 换台机器(尤其 Linux/macOS)就编不出来,且都不能随仓库分发。
|
|
||||||
%
|
%
|
||||||
% 对应关系:
|
% ★ 本版把试卷的所有文字统一为**思源宋体(OUC Serif)**,中西文同一字族:
|
||||||
% 宋体正文 OUC Serif ← 思源宋体 SC 子集(真粗体,不再 AutoFakeBold)
|
% 中文正文 / 标题 OUC Serif(真粗体,不再 AutoFakeBold)
|
||||||
% 黑体 OUC Sans ← 思源黑体 SC 子集
|
% 西文 / 阿拉伯数字 OUC Serif ✅ 与中文同族(本版改动)
|
||||||
% 楷体(卷头) OUC Kai ← 霞鹜文楷子集
|
% 卷头三行填空 OUC Serif ✅ 原为霞鹜文楷
|
||||||
% 西文/数字 TeX Gyre Termes(Times 度量兼容,见下)
|
% 成绩表"题号/得分/一~八/总分" OUC Serif ✅ 原为霞鹜文楷
|
||||||
%
|
%
|
||||||
% ⚠️ 关于原卷的"宋体西文":
|
% ⚠️ 为什么西文也能用思源宋体
|
||||||
% 原卷正文 Mealy / RS / 2026 等实测每个 ASCII 字符步距恒为 5.28bp
|
% 已实际OUCSerif-Regular.otf / -Bold.otf:13714 字形、cmap 7555 条,
|
||||||
% (= 0.500 em @10.5bp)且 font 名为 SimSun —— 即 Word 把西文设为
|
% ASCII 字母数字与常用标点 35/35 全部命中。它不是纯中文字体,
|
||||||
% 宋体时给出的"半角等宽"字形。SimSun 是全 ASCII 0.500 em 等宽的。
|
% 西文字形是配套设计的,与汉字同灰度 —— 这正是要的效果。
|
||||||
%
|
%
|
||||||
% 这里改用 Termes,理由:
|
% ⚠️⚠️ 与 Termes 的度量差异(换字体必然推动版面,别当回归)
|
||||||
% · Termes 的**数字**步距恰好也是 0.500 em,数字宽度零漂移;
|
% 旧版西文用 TeX Gyre Termes(Times 度量)。原卷 SimSun 的西文是
|
||||||
% · 本卷所有数字本来就走 \TNR{} / \TNRB{}(已实测 PDF 里 SimSun
|
% 全 ASCII 0.500 em 等宽,Termes 的数字也是 0.500 em,所以选它能让
|
||||||
% 只承担空格与极少数裸字母),换字体的实际影响面只有那几处;
|
% 数字零漂移。思源宋体的西文**不是等宽**,比 Termes 宽:
|
||||||
% · 若要强行复刻 0.500 em 等宽只能上 Inconsolata 这类代码字体,
|
% 数字 0-9 0.549~0.562 em (+0.049~+0.062)
|
||||||
% 放进试卷正文观感明显更差 —— 按需求"字体不合适再更换"的取舍,
|
% 小写 m 0.974 vs 0.778 (+0.196,最明显)
|
||||||
% 宁可让裸西文用 Termes 的比例字形。
|
% 小写 b 0.638 vs 0.500 (+0.138)
|
||||||
% 实测结论见 README「字体」一节的 A/B 对比。
|
% 句点 . 0.327 vs 0.250 (+0.077)
|
||||||
|
% 连字符 - 0.346 vs 0.333 (+0.013)
|
||||||
|
% 影响:题号、分值、页码右移约 6%,题干里的英文单词变长。
|
||||||
|
%
|
||||||
|
% ⚠️ 装订线的 4 组连字符虚线已改为**用线画**(见第 6 节),
|
||||||
|
% 不再受字体宽度影响。旧版是靠 18bp 连字符排出来的,
|
||||||
|
% 换字体后每串会长 4~7bp,故锁定为几何坐标。
|
||||||
|
%
|
||||||
|
% ⚠️ 数学公式**不在统一范围内**(答案卷的 $x$、$\dfrac{}{}$ 等仍走
|
||||||
|
% Computer Modern)。理由:思源宋体没有 MATH 表(实际只有
|
||||||
|
% GSUB/GPOS),不能作数学字体;强行塞进正文字体会破坏斜体变量、
|
||||||
|
% 正体数字、运算符间距这些数学排版规则。用户已确认保持不动。
|
||||||
%======================================================================
|
%======================================================================
|
||||||
\input{../fonts.tex}
|
\input{../fonts.tex}
|
||||||
|
|
||||||
% 试卷正文的宋体西文占位:原模板用 \sunfont 指 SimSun,现统一指 Termes。
|
%----------------------------------------------------------------------
|
||||||
|
% 西文字族:把思源宋体登记成一个**独立字族** \OUCLatinSerif
|
||||||
|
%
|
||||||
|
% 为什么不直接把 \tnr 改成 \setmainfont 指过去:
|
||||||
|
% ① ../fonts.tex 是**全库共用**的,改它的 \tnr 会连带改掉科技报告和
|
||||||
|
% 简历 —— 那两个模板有自己的西文设定(Cochineal / Termes),不该外溢。
|
||||||
|
% ② 试卷需要的是"西文也用宋体",这在排版上是**回到中文字体的西文字形**,
|
||||||
|
% 本质是让西文跟 CJK 主字体一致,而不是"换一套西文字体"。
|
||||||
|
% 所以在试卷包内单独登记一族,只改本包的命令指向。
|
||||||
|
%
|
||||||
|
% ⚠️ 用 \newfontfamily 而不是 \setCJKfamilyfont:这里要的是西文字族,
|
||||||
|
% 走 fontspec 的 Latin 通道;中文由 \setCJKmainfont 那边管,互不干扰。
|
||||||
|
% ⚠️ 四个档位必须全给。少给会在 \bfseries 里静默回落到默认字体,
|
||||||
|
% 表现为"加粗失效"而不是报错(试卷的 \TNRB / \qnum / 大题标题都会踩到)。
|
||||||
|
% ⚠️ 斜体档:思源宋体没有真正的意大利斜体(只有 Regular / Bold 两档)。
|
||||||
|
% 这里让 Italic 指回 Regular、BoldItalic 指回 Bold —— 即"中文式斜体"
|
||||||
|
% (不倾斜)。本模板正文没有 \textit / \emph 用法,此设定只是防止将来
|
||||||
|
% 有人用了就报 Font shape undefined。真要斜体请用 \kaiti 代斜的惯例。
|
||||||
|
%----------------------------------------------------------------------
|
||||||
|
\newfontfamily\OUCLatinSerif{OUCSerif}[
|
||||||
|
Extension = .otf,
|
||||||
|
Path = ../fonts/ouc-serif/,
|
||||||
|
UprightFont = *-Regular,
|
||||||
|
BoldFont = *-Bold,
|
||||||
|
ItalicFont = *-Regular,
|
||||||
|
BoldItalicFont = *-Bold,
|
||||||
|
]
|
||||||
|
% 粗体专职档:与 \tnrb 的语义一致("取粗体那一字形当常规用")。
|
||||||
|
% \TNRB{} 用它,保证括号、分值数字是真的粗,而不是靠 AutoFakeBold 描边。
|
||||||
|
\newfontfamily\OUCLatinSerifBold{OUCSerif}[
|
||||||
|
Extension = .otf,
|
||||||
|
Path = ../fonts/ouc-serif/,
|
||||||
|
UprightFont = *-Bold,
|
||||||
|
BoldFont = *-Bold,
|
||||||
|
ItalicFont = *-Bold,
|
||||||
|
BoldItalicFont = *-Bold,
|
||||||
|
]
|
||||||
|
|
||||||
|
%----------------------------------------------------------------------
|
||||||
|
% 把**默认西文字体**也换成思源宋体(这是关键一步)
|
||||||
|
%
|
||||||
|
% 模板里有大量文字**根本没走 \tnr**,而是走 \setmainfont(默认西文族):
|
||||||
|
% · \textbf{learning outcome} —— 裸加粗,西文走 \setmainfont
|
||||||
|
% · 页脚的页码 / 总页数 —— \node{...\thepage} 裸排
|
||||||
|
% · 任何 \fontsize..\selectfont 之后的裸 ASCII
|
||||||
|
% 第一轮只做了 \let\tnr\OUCLatinSerif,结果 PDF 里仍残留 22 个
|
||||||
|
% TeXGyreTermes span:页脚 6 个页码 + 6 个总页数 + 第 4 页的
|
||||||
|
% A./B./C./D. 与 learning outcome 等。
|
||||||
|
% ⇒ 必须连 \setmainfont 一起改,才算"全部用思源宋体"。
|
||||||
|
%
|
||||||
|
% ⚠️ 为什么可以安全地在这里 \setmainfont:
|
||||||
|
% 本包由试卷/答案卷各自的 .tex \usepackage 载入,\setmainfont 只影响
|
||||||
|
% 当前文档。其他模板(科技报告/简历/幻灯片)各自 \input ../fonts.tex
|
||||||
|
% 并各自设主字体,互不干扰。
|
||||||
|
%
|
||||||
|
% ⚠️ 四个档位必须全给。缺斜体档时 \textit 会报
|
||||||
|
% Font shape `TU/OUCSerif(0)/m/it' undefined 并静默回落。
|
||||||
|
% 思源宋体没有真斜体,这里让 it 指回 Regular(中文式斜体,不倾斜)。
|
||||||
|
%----------------------------------------------------------------------
|
||||||
|
\setmainfont{OUCSerif}[
|
||||||
|
Extension = .otf,
|
||||||
|
Path = ../fonts/ouc-serif/,
|
||||||
|
UprightFont = *-Regular,
|
||||||
|
BoldFont = *-Bold,
|
||||||
|
ItalicFont = *-Regular,
|
||||||
|
BoldItalicFont = *-Bold,
|
||||||
|
]
|
||||||
|
% sans 位也指到思源宋体:本试卷没有真正的 sans 用法,但 \textsf 之类的
|
||||||
|
% 兜底也应该是宋体,不能漏回 Termes。sans 位不加粗体档,用 Regular 顶上。
|
||||||
|
\setsansfont{OUCSerif}[
|
||||||
|
Extension = .otf,
|
||||||
|
Path = ../fonts/ouc-serif/,
|
||||||
|
UprightFont = *-Regular,
|
||||||
|
BoldFont = *-Bold,
|
||||||
|
ItalicFont = *-Regular,
|
||||||
|
BoldItalicFont = *-Bold,
|
||||||
|
]
|
||||||
|
|
||||||
|
%----------------------------------------------------------------------
|
||||||
|
% 把本包内的字体命令全部重定向到思源宋体
|
||||||
|
%
|
||||||
|
% ⚠️ \let 是一次性绑定:绑完再改 \tnr 的定义,\tnr 仍指旧目标。
|
||||||
|
% 这里 \let 到 \OUCLatinSerif 是**有意为之** —— 让 \tnr / \tnrb 与
|
||||||
|
% \setmainfont 走同一族,但保持两个独立命令名,因为 \tnrb 是
|
||||||
|
% "取粗体当常规用"(\TNRB 需要),与 \bfseries 语义不同。
|
||||||
|
%----------------------------------------------------------------------
|
||||||
|
\let\tnr\OUCLatinSerif
|
||||||
|
\let\tnrb\OUCLatinSerifBold
|
||||||
|
|
||||||
|
% \sunfont 原指 SimSun("宋体西文"占位),现一并指思源宋体。
|
||||||
% 保留命令名是为了不动 \qnum / \logicexpr / \sumsig 等所有调用点。
|
% 保留命令名是为了不动 \qnum / \logicexpr / \sumsig 等所有调用点。
|
||||||
\let\sunfont\tnr
|
\let\sunfont\OUCLatinSerif
|
||||||
|
|
||||||
|
% \kaiti 在试卷里只用于卷头填空与成绩表题号(见 \kh / \scoretable)。
|
||||||
|
%为思源宋体,故整个包内把 \kaiti 也指到思源宋体。
|
||||||
|
% ⚠️ 用 \let 而不是改 \def\kaiti —— 后者会破坏 ../fonts.tex 的定义,
|
||||||
|
% 而 \kaiti 在别的模板里还要用楷体。
|
||||||
|
% ⚠️ 若将来要恢复楷体卷头,把下面这行注释掉即可,其余代码不用动。
|
||||||
|
\let\kaiti\songti
|
||||||
|
|
||||||
%----------------------------------------------------------------------
|
%----------------------------------------------------------------------
|
||||||
% ⚠️ xeCJK 陷阱:字体切换命令若紧邻 \par(或位于段落末尾),
|
% ⚠️ xeCJK 陷阱:字体切换命令若紧邻 \par(或位于段落末尾),
|
||||||
% 该段结束时的字体状态会"溢出"到后续段落,导致后面的 ASCII
|
% 该段结束时的字体状态会"溢出"到后续段落,导致后面的 ASCII
|
||||||
% 字符全部被排成 Times(实测:\tnr{ABC}\par 会让下一段的 "3" 变 Times)。
|
% 字符全部被排成 Times(\tnr{ABC}\par 会让下一段的 "3" 变 Times)。
|
||||||
% 故所有局部字体切换一律走下面两个包装:内部显式 \normalfont 收尾。
|
% 故所有局部字体切换一律走下面两个包装:内部显式 \normalfont 收尾。
|
||||||
% ⇒ 正文中请用 \TNR{...} / \TNRB{...} / \SUN{...},不要裸用 \tnr。
|
% ⇒ 正文中请用 \TNR{...} / \TNRB{...} / \SUN{...},不要裸用 \tnr。
|
||||||
%----------------------------------------------------------------------
|
%----------------------------------------------------------------------
|
||||||
@@ -98,7 +203,7 @@
|
|||||||
\def\@spreadeach#1{%
|
\def\@spreadeach#1{%
|
||||||
\ifx#1\@nil\else\hspace*{\spread@amt}#1\expandafter\@spreadeach\fi}
|
\ifx#1\@nil\else\hspace*{\spread@amt}#1\expandafter\@spreadeach\fi}
|
||||||
|
|
||||||
% 中文与西文间自动间距:原卷实测固定 2.70bp(不随字号缩放,
|
% 中文与西文间自动间距:原卷实际固定 2.70bp(不随字号缩放,
|
||||||
% 故用绝对 bp 而非 em;原卷 10.5bp 与 12bp 处均为 2.7bp)
|
% 故用绝对 bp 而非 em;原卷 10.5bp 与 12bp 处均为 2.7bp)
|
||||||
\xeCJKsetup{CJKecglue={\hskip 2.70bp\relax},PunctStyle=plain}
|
\xeCJKsetup{CJKecglue={\hskip 2.70bp\relax},PunctStyle=plain}
|
||||||
|
|
||||||
@@ -131,7 +236,7 @@
|
|||||||
%----------------------------------------------------------------------
|
%----------------------------------------------------------------------
|
||||||
% 页脚是否印"试卷类型字母"(课程名之后那个 A / B)
|
% 页脚是否印"试卷类型字母"(课程名之后那个 A / B)
|
||||||
%
|
%
|
||||||
% ★ 原卷实测:A 卷页脚【没有】字母(数字逻辑 + 一串短横线),
|
% ★ 原卷A 卷页脚【没有】字母(数字逻辑 + 一串短横线),
|
||||||
% B 卷页脚【有】B(392.48 处)。
|
% B 卷页脚【有】B(392.48 处)。
|
||||||
% 即:这是出卷人手工敲的,不是规则。故默认不印,需要时显式打开:
|
% 即:这是出卷人手工敲的,不是规则。故默认不印,需要时显式打开:
|
||||||
% \examsetup{foottype = {B}} → 页脚印 B
|
% \examsetup{foottype = {B}} → 页脚印 B
|
||||||
@@ -143,7 +248,7 @@
|
|||||||
%======================================================================
|
%======================================================================
|
||||||
% 5. 页脚:+…………………………课程名称 X……… 第 N 页 共 M 页 + 基线 713.33bp
|
% 5. 页脚:+…………………………课程名称 X……… 第 N 页 共 M 页 + 基线 713.33bp
|
||||||
%
|
%
|
||||||
% 本地实测(原卷字符级):
|
% 本地(原卷字符级):
|
||||||
% 82.20 '+' | 91.20~343.20 连续 29 个 '…'(每个步距 9.00)
|
% 82.20 '+' | 91.20~343.20 连续 29 个 '…'(每个步距 9.00)
|
||||||
% 352.20 起课程名(长度不定)| 类型字母在 390.48
|
% 352.20 起课程名(长度不定)| 类型字母在 390.48
|
||||||
% 396.48 起 3 个 '…' | 432.48 '第' | 443.64 页码 | 448.20 '页'
|
% 396.48 起 3 个 '…' | 432.48 '第' | 443.64 页码 | 448.20 '页'
|
||||||
@@ -254,7 +359,7 @@
|
|||||||
% \bindstrip[1.3,on] → 强制画 + 下移
|
% \bindstrip[1.3,on] → 强制画 + 下移
|
||||||
% 局部覆盖单页:\ouc@bindforce 置 1/0
|
% 局部覆盖单页:\ouc@bindforce 置 1/0
|
||||||
%
|
%
|
||||||
% 本地实测(原卷 p1,x 坐标全部 bp):
|
% 本地(原卷 p1,x 坐标全部 bp):
|
||||||
% 竖虚线 x=33.8,5 段:101.1~148.5 / 222.4~290.8 / 359.4~427.9
|
% 竖虚线 x=33.8,5 段:101.1~148.5 / 222.4~290.8 / 359.4~427.9
|
||||||
% 489.3~557.8 / 600.0~668.6
|
% 489.3~557.8 / 600.0~668.6
|
||||||
% 18bp Times 连字符串 x=55.69("装/订/线"三字压在上面,白底遮断)
|
% 18bp Times 连字符串 x=55.69("装/订/线"三字压在上面,白底遮断)
|
||||||
@@ -284,12 +389,47 @@
|
|||||||
\ifx\@empty#1\@empty\else \setlength{\ouc@bindshift}{#1bp}\fi
|
\ifx\@empty#1\@empty\else \setlength{\ouc@bindshift}{#1bp}\fi
|
||||||
\fi}
|
\fi}
|
||||||
|
|
||||||
|
%----------------------------------------------------------------------
|
||||||
|
% 装订线虚线段:一个连字符笔画 = 一条**竖直**短线段
|
||||||
|
%
|
||||||
|
% 参数:#1 = 这一串最上一笔的顶端 y 坐标(bp,从页面顶端往下量)
|
||||||
|
% #2 = 笔画个数
|
||||||
|
% 相邻笔画顶端间隔 6.00bp,与原卷 18bp 连字符的步距一致。
|
||||||
|
%
|
||||||
|
% 原卷的连字符是 rotate=90 排的,所以连字符的**横向长度转到了纵轴**、
|
||||||
|
% **线粗转到了横轴**。也就是说每一笔是「竖着的短杠」,不是「横着的短杠」:
|
||||||
|
% 竖:y 跨 4.30bp(这是连字符的字面长度)
|
||||||
|
% 横:x 跨 1.10bp(这是连字符的笔画粗细)
|
||||||
|
% 中心 x = 51.60bp
|
||||||
|
% 第一版按"水平线"画((49.40,y)--(53.70,y)),结果整条装订线变成
|
||||||
|
% 一把**梯子**(一排横杠叠在竖线位置),与基线观感完全不同。
|
||||||
|
%
|
||||||
|
% ⚠️ x 中心 51.60bp 是原卷连字符字符盒 x 41.60~59.60(18bp 宽),
|
||||||
|
% 但可见笔画只在 51.10~52.10,即字形在字符盒内偏右、
|
||||||
|
% 中心 51.60 —— 这是 Times 连字符的字形位置,不是笔误。
|
||||||
|
%
|
||||||
|
% ⚠️ 必须定义在 \ouc@dobindstrip **外面**。放进去的话每次 shipout 都会
|
||||||
|
% 重新 \newcommand 一次,第二页起报 "command already defined"。
|
||||||
|
% ⚠️ y 坐标**不能**写成 \dimexpr#1bp+\i*6bp:TikZ 的坐标解析器不认
|
||||||
|
% 带小数点的小数 + \dimexpr 组合,会报
|
||||||
|
% Illegal unit of measure (pt inserted)
|
||||||
|
% Package PGF Math Error: Unknown operator `.' or `.0'
|
||||||
|
% 必须先 \pgfmathsetmacro 算成纯数字,再拼 "bp"。
|
||||||
|
%----------------------------------------------------------------------
|
||||||
|
\newcommand{\ouc@dashseg}[2]{%
|
||||||
|
\foreach \i in {0,...,\the\numexpr#2-1\relax}{%
|
||||||
|
\pgfmathsetmacro{\ouc@dyy}{#1+\i*6.00}%
|
||||||
|
\pgfmathsetmacro{\ouc@dzz}{\ouc@dyy+4.30}%
|
||||||
|
\draw[line width=1.10bp,line cap=butt]
|
||||||
|
([xshift=51.60bp,yshift=-\ouc@dyy bp]B) --
|
||||||
|
([xshift=51.60bp,yshift=-\ouc@dzz bp]B);}}
|
||||||
|
|
||||||
\newcommand{\ouc@dobindstrip}{%
|
\newcommand{\ouc@dobindstrip}{%
|
||||||
\begin{tikzpicture}[remember picture,overlay]
|
\begin{tikzpicture}[remember picture,overlay]
|
||||||
\coordinate (B) at ([yshift=-\ouc@bindshift]current page.north west);
|
\coordinate (B) at ([yshift=-\ouc@bindshift]current page.north west);
|
||||||
% ---- ★ 原卷此处【没有】外框 ----
|
% ---- ★ 原卷此处【没有】外框 ----
|
||||||
% 曾误把 PDF 里 x=17.4/18.12/60.15/60.87 那组线当成黑色外框,
|
% 曾误把 PDF 里 x=17.4/18.12/60.15/60.87 那组线当成黑色外框,
|
||||||
% 实测它们是 fill=(1,1,1) 的**白色遮挡块**(Word 里盖住页眉页脚
|
% 实际它们是 fill=(1,1,1) 的**白色遮挡块**(Word 里盖住页眉页脚
|
||||||
% 的底色块),可见黑线只有 x=33.80 那 6 段竖虚线。
|
% 的底色块),可见黑线只有 x=33.80 那 6 段竖虚线。
|
||||||
% 故此处不画任何竖线/封口线。
|
% 故此处不画任何竖线/封口线。
|
||||||
% ---- 竖虚线:每段 = 对应栏目的"填写区"(紧接栏目名冒号之后,向上延伸)----
|
% ---- 竖虚线:每段 = 对应栏目的"填写区"(紧接栏目名冒号之后,向上延伸)----
|
||||||
@@ -305,15 +445,23 @@
|
|||||||
359.35/427.85, 489.30/557.80, 600.05/668.60}{%
|
359.35/427.85, 489.30/557.80, 600.05/668.60}{%
|
||||||
\draw[line width=0.48bp,line cap=butt]
|
\draw[line width=0.48bp,line cap=butt]
|
||||||
([xshift=33.8bp,yshift=-\a bp]B) -- ([xshift=33.8bp,yshift=-\b bp]B);}
|
([xshift=33.8bp,yshift=-\a bp]B) -- ([xshift=33.8bp,yshift=-\b bp]B);}
|
||||||
% ---- 虚线段(原卷用 18bp Times 连字符排成,不是画线)----
|
% ---- 虚线段(由「18bp 连字符排成」改为「用线画」)----
|
||||||
% 四段的连字符个数原卷各不相同(16 / 30 / 28 / 24),逐段复刻
|
% 原卷这四段确实是 18bp Times 连字符排出来的,但本包把试卷字体
|
||||||
\foreach \s/\pos in {----------------/677.32,
|
% 统一到思源宋体之后,连字符每个宽 0.346 em(Termes 是 0.333),
|
||||||
---------------- -------------/571.00,
|
% 18bp 下每串会长出 4~7bp,正好破坏"复刻原卷长度"这个前提。
|
||||||
--- ------------------------/382.12,
|
% ⇒ 改为几何画的短横线段,长度锁死在 \ouc@dashseg 的坐标里,
|
||||||
------------------------/205.36}{%
|
% 不受任何字体宽度影响。
|
||||||
\node[anchor=base west,rotate=90,inner sep=0pt,
|
% 实际原卷(720dpi 渲染后逐笔画测量):
|
||||||
font=\fontsize{18bp}{18bp}\selectfont\tnr]
|
% 单个连字符笔画 长 4.40bp、粗 1.10bp、x 中心 51.60bp
|
||||||
at ([xshift=55.69bp,yshift=-\pos bp]B) {\s};}
|
% → 左 49.40bp、右 53.80bp
|
||||||
|
% 相邻笔画步距 6.00bp(= 18bp × 0.333 em)
|
||||||
|
% 六段坐标与笔画数取自原卷逐笔画实际,见下方调用处。
|
||||||
|
\ouc@dashseg{62.20}{24}% 最下一串(座号区)
|
||||||
|
\ouc@dashseg{216.50}{24}% 考场教室号区
|
||||||
|
\ouc@dashseg{364.80}{3}% 截断的短线(原卷被白底遮断,照抄)
|
||||||
|
\ouc@dashseg{393.40}{13}% 授课教师区(上半截)
|
||||||
|
\ouc@dashseg{475.80}{16}% 专业年级区
|
||||||
|
\ouc@dashseg{582.10}{16}% 学号 + 姓名区(最上一串)
|
||||||
% ---- 竖排栏目名(自下而上读)----
|
% ---- 竖排栏目名(自下而上读)----
|
||||||
% 原卷只有"姓名:""授课教师:"把冒号连排,其余冒号单独一行
|
% 原卷只有"姓名:""授课教师:"把冒号连排,其余冒号单独一行
|
||||||
\foreach \lab/\pos in {学号/694.06, 姓名:/585.10, 专业年级/474.46,
|
\foreach \lab/\pos in {学号/694.06, 姓名:/585.10, 专业年级/474.46,
|
||||||
@@ -510,7 +658,7 @@
|
|||||||
\newcommand{\examfigcaption}[1]{%
|
\newcommand{\examfigcaption}[1]{%
|
||||||
\par\nointerlineskip\centerline{\Xiaowu #1}\par\nointerlineskip}
|
\par\nointerlineskip\centerline{\Xiaowu #1}\par\nointerlineskip}
|
||||||
|
|
||||||
% 图题(五号):原卷第 3 页 "图3" 实测 10.45bp
|
% 图题(五号):原卷第 3 页 "图3" 实际10.45bp
|
||||||
\newcommand{\examfigcaptioniii}[1]{%
|
\newcommand{\examfigcaptioniii}[1]{%
|
||||||
\par\nointerlineskip\centerline{\Fivhao #1}\par\nointerlineskip\vspace*{5.40bp}}
|
\par\nointerlineskip\centerline{\Fivhao #1}\par\nointerlineskip\vspace*{5.40bp}}
|
||||||
|
|
||||||
@@ -533,7 +681,7 @@
|
|||||||
\newcommand{\sumphisig}{\hbox{\sunfont ∑Φ}}
|
\newcommand{\sumphisig}{\hbox{\sunfont ∑Φ}}
|
||||||
|
|
||||||
% 下标(原卷 M_L / M_S)
|
% 下标(原卷 M_L / M_S)
|
||||||
% 实测:L/S 字号 5.30bp(SimSun),基线相对正文下移 1.56bp;
|
% L/S 字号 5.30bp(SimSun),基线相对正文下移 1.56bp;
|
||||||
% M(210.00) → L(215.16) 步距 5.16bp(M 的半角宽),
|
% M(210.00) → L(215.16) 步距 5.16bp(M 的半角宽),
|
||||||
% L → 和 3.96bp,故 M 起点到"和"共 9.12bp。
|
% L → 和 3.96bp,故 M 起点到"和"共 9.12bp。
|
||||||
% 用宽度 3.87bp 的盒接管下标宽度,使 5.25 + 3.87 = 9.12 对齐原卷。
|
% 用宽度 3.87bp 的盒接管下标宽度,使 5.25 + 3.87 = 9.12 对齐原卷。
|
||||||
@@ -543,7 +691,7 @@
|
|||||||
%======================================================================
|
%======================================================================
|
||||||
% 10. 题型构件(通用)
|
% 10. 题型构件(通用)
|
||||||
% 设计原则:不依赖任何具体课程,只提供"骨架",
|
% 设计原则:不依赖任何具体课程,只提供"骨架",
|
||||||
% 题目内容由正文填写。所有题型都沿用本卷实测的版面参数:
|
% 题目内容由正文填写。所有题型都沿用本卷实际的版面参数:
|
||||||
% · 正文 10.5bp / 行距 15.6bp
|
% · 正文 10.5bp / 行距 15.6bp
|
||||||
% · 中英之间 2.70bp(ecglue)
|
% · 中英之间 2.70bp(ecglue)
|
||||||
% · 题号栏 15.72bp(宋体题号,题号后空 5.28bp)
|
% · 题号栏 15.72bp(宋体题号,题号后空 5.28bp)
|
||||||
|
|||||||
+241
-39
@@ -59,20 +59,142 @@
|
|||||||
\pagestyle{empty}
|
\pagestyle{empty}
|
||||||
|
|
||||||
%----------------------------------------------------------------------
|
%----------------------------------------------------------------------
|
||||||
% 字体(与 oucexam.sty 保持一致,全部取自公共字体包 ../fonts.tex)
|
% 字体(与 oucexam.sty 同步,全部统一为思源宋体)
|
||||||
|
% 全部取自公共字体包 ../fonts.tex,再在包内重定向。
|
||||||
|
%
|
||||||
|
% ⚠️ 必须和 oucexam.sty 做**完全相同的处理**,否则两份文件观感不一致:
|
||||||
|
% oucexam 是试卷、ouckey 是答案卷,学校通常一起印发。
|
||||||
|
%
|
||||||
|
% ⚠️⚠️ 只重定向 \tnr / \tnrb 不够 —— 模板里大量文字没走它们:
|
||||||
|
% · \textbf{...} 的裸西文 → 走 \setmainfont
|
||||||
|
% · 「(4 分)」里的数字 → 走 \setmainfont
|
||||||
|
% · \thepage / \pageref 页码 → 走 \setmainfont
|
||||||
|
% ⇒ 必须连 \setmainfont 一起改,否则 PDF 里会残留 Termes span。
|
||||||
|
% 实际第一轮只做 \let 时,答案卷残留 197 个 Termes span。
|
||||||
|
%
|
||||||
|
% ⚠️ 数学公式($x$ / $\dfrac{}{}$ / $\sum$)**不在统一范围内**,
|
||||||
|
% 仍走 Computer Modern。原因见 oucexam.sty 的说明:思源宋体没有
|
||||||
|
% MATH 表,不能作数学字体。用户已确认保持不动。
|
||||||
%----------------------------------------------------------------------
|
%----------------------------------------------------------------------
|
||||||
\input{../fonts.tex}
|
\input{../fonts.tex}
|
||||||
|
|
||||||
% \sunfont 原指 SimSun,现统一指 Termes(见 oucexam.sty 的说明)
|
%----------------------------------------------------------------------
|
||||||
\let\sunfont\tnr
|
% 西文字族:思源宋体(与 oucexam.sty 同一套定义,复制而非 \input,
|
||||||
|
% 因为两个 .sty 是并列关系,谁先加载不确定,不能互相依赖)
|
||||||
|
%----------------------------------------------------------------------
|
||||||
|
\newfontfamily\OUCLatinSerif{OUCSerif}[
|
||||||
|
Extension = .otf,
|
||||||
|
Path = ../fonts/ouc-serif/,
|
||||||
|
UprightFont = *-Regular,
|
||||||
|
BoldFont = *-Bold,
|
||||||
|
ItalicFont = *-Regular,
|
||||||
|
BoldItalicFont = *-Bold,
|
||||||
|
]
|
||||||
|
\newfontfamily\OUCLatinSerifBold{OUCSerif}[
|
||||||
|
Extension = .otf,
|
||||||
|
Path = ../fonts/ouc-serif/,
|
||||||
|
UprightFont = *-Bold,
|
||||||
|
BoldFont = *-Bold,
|
||||||
|
ItalicFont = *-Bold,
|
||||||
|
BoldItalicFont = *-Bold,
|
||||||
|
]
|
||||||
|
|
||||||
|
% 默认西文字体 → 思源宋体(这一步不能省,见上面的说明)
|
||||||
|
\setmainfont{OUCSerif}[
|
||||||
|
Extension = .otf,
|
||||||
|
Path = ../fonts/ouc-serif/,
|
||||||
|
UprightFont = *-Regular,
|
||||||
|
BoldFont = *-Bold,
|
||||||
|
ItalicFont = *-Regular,
|
||||||
|
BoldItalicFont = *-Bold,
|
||||||
|
]
|
||||||
|
\setsansfont{OUCSerif}[
|
||||||
|
Extension = .otf,
|
||||||
|
Path = ../fonts/ouc-serif/,
|
||||||
|
UprightFont = *-Regular,
|
||||||
|
BoldFont = *-Bold,
|
||||||
|
ItalicFont = *-Regular,
|
||||||
|
BoldItalicFont = *-Bold,
|
||||||
|
]
|
||||||
|
|
||||||
|
% \sunfont 原指 SimSun,现统一指思源宋体
|
||||||
|
\let\sunfont\OUCLatinSerif
|
||||||
|
\let\tnr\OUCLatinSerif
|
||||||
|
\let\tnrb\OUCLatinSerifBold
|
||||||
|
|
||||||
|
% 答案卷里的黑体小标题(\heiti,共 37 处)一并换成思源宋体。
|
||||||
|
% ⚠️ 用 \let 而非改 \def\heiti —— 后者会破坏 ../fonts.tex,影响别的模板。
|
||||||
|
% ⚠️ 若将来要恢复黑体标题,注释掉下面这行即可。
|
||||||
|
\let\heiti\songti
|
||||||
|
|
||||||
% 局部字体切换必须显式收尾,否则 xeCJK 字体会"溢出"到后一段
|
% 局部字体切换必须显式收尾,否则 xeCJK 字体会"溢出"到后一段
|
||||||
\newcommand{\TNR}[1]{{\tnr #1\normalfont}}
|
\newcommand{\TNR}[1]{{\tnr #1\normalfont}}
|
||||||
\newcommand{\TNRB}[1]{{\tnrb #1\normalfont}}
|
\newcommand{\TNRB}[1]{{\tnrb #1\normalfont}}
|
||||||
\newcommand{\SUN}[1]{{\sunfont #1\normalfont}}
|
\newcommand{\SUN}[1]{{\sunfont #1\normalfont}}
|
||||||
|
|
||||||
|
% 中西文间距 2.70bp(原卷取值,不随字号缩放)。
|
||||||
\xeCJKsetup{CJKecglue={\hskip 2.70bp\relax},PunctStyle=plain}
|
\xeCJKsetup{CJKecglue={\hskip 2.70bp\relax},PunctStyle=plain}
|
||||||
|
|
||||||
|
%----------------------------------------------------------------------
|
||||||
|
% 直引号 " (U+0022) 归入 CJK 字符类(补充修正)
|
||||||
|
%
|
||||||
|
% ⚠️ 问题:本文件正文用 ASCII 直引号 "" 表示中文引号(共 32 处),
|
||||||
|
% 而 xeCJK 按 Unicode 区段分类 —— U+0022 在 Basic Latin,被判成**西文**,
|
||||||
|
% 于是引号走 \setmainfont(原为 Termes),与两侧汉字不同字体、不同宽度。
|
||||||
|
% 换字体后表现为一行里出现 TeXGyreTermes-Regular 的 ",且因为西文引号
|
||||||
|
% 比中文引号窄、字距算法不同,挤压出 Overfull(实际第 88 行 +8.07pt)。
|
||||||
|
%
|
||||||
|
% ⚠️ 为什么不在 fonts.tex 里改:那里是**全库共用**的,把 U+0022 全局归 CJK
|
||||||
|
% 会让正文里真正的英文引号(如 code 片段 "hello world")也变成全角,
|
||||||
|
% 破坏那些地方。这是试卷的局部需求 —— 试卷正文基本是中文,直引号就是
|
||||||
|
% 中文引号的意思。
|
||||||
|
% ⚠️ 必须在 \input{../fonts.tex} **之后**声明,否则被随后加载的默认分类覆盖。
|
||||||
|
%----------------------------------------------------------------------
|
||||||
|
\xeCJKDeclareCharClass{CJK}{"0022} % " 直引号(当中文引号用)
|
||||||
|
|
||||||
|
%----------------------------------------------------------------------
|
||||||
|
% 【技术说明】换字体引起的 Overfull 怎么修(结论:改源码断行,别调参数)
|
||||||
|
%
|
||||||
|
% 现象:字体统一为思源宋体后,参考答案与评分标准示例.tex 第 123-125 行
|
||||||
|
% (\keyitem{3}{4})出现 Overfull 2.61pt,渲染后压出版心右边界
|
||||||
|
% (最右墨迹 527.01bp,版心止于 524.41bp)。
|
||||||
|
% 基线同一行本来就有 0.21pt 轻微 Overfull,换字体后西文变宽
|
||||||
|
% (数字 +6%、小写字母 +13~20%),把 0.21 放大到 2.61。
|
||||||
|
%
|
||||||
|
% 根因:该行末尾是「…正迁移与负迁移(1 分),」。
|
||||||
|
% · 「,」按中文标点禁则不能出现在行首 ⇒ 不许在「)」与「,」之间断
|
||||||
|
% · \pt 定义里有 `~`(\nobreakspace)⇒ 「(1 分)」内部也不可断
|
||||||
|
% ⇒ 「(1 分),」约 16bp,是不可断尾部,必须整体塞进本行。
|
||||||
|
% 而本行没有弹性胶可拉(汉字定宽、唯一的西文空格已满),
|
||||||
|
% 往前找更早的合法断点(句号「。」之后)的话,第一行只填 65%,
|
||||||
|
% 欠宽 150bp 无处拉伸 ⇒ badness 爆掉 ⇒ TeX 宁可撑破 2.61bp。
|
||||||
|
%
|
||||||
|
% ① \emergencystretch 1.5em —— 无效。只追加"可拉伸量",
|
||||||
|
% 本行没有胶可拉,给多少额度都无从施展。
|
||||||
|
% ② \tolerance 3000 —— 无效。不是不满意断点,是没有更早的**合法**断点。
|
||||||
|
% ③ PunctStyle=kaiming —— 能消 Overfull,但句末标点悬挂探出版心
|
||||||
|
% 6.5bp(第 3 页右缘 530.93 > 524.41),比不修更难看。
|
||||||
|
% ④ PunctStyle=quanjiao —— 同样探出 8bp(532.5),一样不可接受。
|
||||||
|
% 根子在于 xeCJK 的这几个 PunctStyle 做的是"行末标点**悬挂**",
|
||||||
|
% 不是"标点**压缩**"—— 中文排版里这是两回事,指望它消 Overfull 必翻车。
|
||||||
|
% ⑤ \rightskip 0pt plus 6bp(含 \AtBeginDocument 版)—— 无效。
|
||||||
|
% 6bp 远小于需要的 150bp,TeX 仍选"撑破"这个解。
|
||||||
|
% 注意:preamble 里直接 \setlength 还会被 ctex/xeCJK 初始化重置,
|
||||||
|
% 必须 \AtBeginDocument 才可能生效 —— 这类"设了没反应"的常见原因。
|
||||||
|
%
|
||||||
|
% ✅ 正解:**在源码的自然断点处手动断行**。
|
||||||
|
% 第 124 行末尾句号「。」之后本来就是语义上的句子边界,加 \\ 即可:
|
||||||
|
% \keyitem{3}{4}{%
|
||||||
|
% \textbf{学习迁移}:指一种学习对另一种学习的影响\pt{2}。\\
|
||||||
|
% 按方向分正迁移与负迁移\pt{1},其发生依赖于共同要素与概括水平\pt{1}。}
|
||||||
|
% 已Overfull 归零,三页最右墨迹均为 524.41bp,与版心严丝合缝。
|
||||||
|
%
|
||||||
|
% 为什么这是对的做法而不是"绕过问题":
|
||||||
|
% 分项给分的答案本来就该一句一行,读者(阅卷人)靠句号扫分点。
|
||||||
|
% 手动断行既解决排版,又让内容结构更清楚 —— 不是妥协,是双赢。
|
||||||
|
% ⚠️ 若将来修改了这段文字导致又不齐,先看这里:多半还是在句号处补 \\。
|
||||||
|
%----------------------------------------------------------------------
|
||||||
|
|
||||||
\newcommand{\Fivhao}{\fontsize{10.5bp}{16bp}\selectfont}
|
\newcommand{\Fivhao}{\fontsize{10.5bp}{16bp}\selectfont}
|
||||||
\newcommand{\Sihao}{\fontsize{12bp}{18bp}\selectfont}
|
\newcommand{\Sihao}{\fontsize{12bp}{18bp}\selectfont}
|
||||||
\newcommand{\Xiaowu}{\fontsize{9bp}{13bp}\selectfont}
|
\newcommand{\Xiaowu}{\fontsize{9bp}{13bp}\selectfont}
|
||||||
@@ -87,22 +209,65 @@
|
|||||||
\def\ouckey@major{}\def\ouckey@dept{}\def\ouckey@teacher{}
|
\def\ouckey@major{}\def\ouckey@dept{}\def\ouckey@teacher{}
|
||||||
\def\ouckey@examiner{}\def\ouckey@mode{}\def\ouckey@date{}
|
\def\ouckey@examiner{}\def\ouckey@mode{}\def\ouckey@date{}
|
||||||
\def\ouckey@total{}
|
\def\ouckey@total{}
|
||||||
\define@key{ouckey}{year}{\def\ouckey@year{#1}}
|
|
||||||
\define@key{ouckey}{term}{\def\ouckey@term{#1}}
|
%----------------------------------------------------------------------
|
||||||
\define@key{ouckey}{course}{\def\ouckey@course{#1}}
|
% key 赋值:空值规范成空串
|
||||||
\define@key{ouckey}{type}{\def\ouckey@type{#1}}
|
%
|
||||||
\define@key{ouckey}{college}{\def\ouckey@college{#1}}
|
% ⚠️ 所有 key 一律走这里,不要退回 `\def\ouckey@xxx{#1}`。
|
||||||
\define@key{ouckey}{grade}{\def\ouckey@grade{#1}}
|
% 原因见文件下方「判空」一节的完整说明:那样 dept={} 会存成
|
||||||
\define@key{ouckey}{major}{\def\ouckey@major{#1}}
|
% 「一个空组」,后续 \detokenize 展开后仍非空,判空失败,
|
||||||
\define@key{ouckey}{dept}{\def\ouckey@dept{#1}}
|
% 抬头会印出孤立的「开课学院:」而没有值。
|
||||||
\define@key{ouckey}{teacher}{\def\ouckey@teacher{#1}}
|
%
|
||||||
\define@key{ouckey}{examiner}{\def\ouckey@examiner{#1}}
|
% ⚠️ 必须定义在 \define@key 之**前**,否则展开时 undefined。
|
||||||
\define@key{ouckey}{mode}{\def\ouckey@mode{#1}}
|
%----------------------------------------------------------------------
|
||||||
\define@key{ouckey}{date}{\def\ouckey@date{#1}}
|
\newcommand{\ouckey@setkey}[2]{%
|
||||||
\define@key{ouckey}{total}{\def\ouckey@total{#1}}
|
\if\relax\detokenize{#2}\relax
|
||||||
|
\def#1{}%
|
||||||
|
\else
|
||||||
|
\def#1{#2}%
|
||||||
|
\fi}
|
||||||
|
|
||||||
|
% 所有 key 一律走 \ouckey@setkey
|
||||||
|
\define@key{ouckey}{year}{\ouckey@setkey{\ouckey@year}{#1}}
|
||||||
|
\define@key{ouckey}{term}{\ouckey@setkey{\ouckey@term}{#1}}
|
||||||
|
\define@key{ouckey}{course}{\ouckey@setkey{\ouckey@course}{#1}}
|
||||||
|
\define@key{ouckey}{type}{\ouckey@setkey{\ouckey@type}{#1}}
|
||||||
|
\define@key{ouckey}{college}{\ouckey@setkey{\ouckey@college}{#1}}
|
||||||
|
\define@key{ouckey}{grade}{\ouckey@setkey{\ouckey@grade}{#1}}
|
||||||
|
\define@key{ouckey}{major}{\ouckey@setkey{\ouckey@major}{#1}}
|
||||||
|
\define@key{ouckey}{dept}{\ouckey@setkey{\ouckey@dept}{#1}}
|
||||||
|
\define@key{ouckey}{teacher}{\ouckey@setkey{\ouckey@teacher}{#1}}
|
||||||
|
\define@key{ouckey}{examiner}{\ouckey@setkey{\ouckey@examiner}{#1}}
|
||||||
|
\define@key{ouckey}{mode}{\ouckey@setkey{\ouckey@mode}{#1}}
|
||||||
|
\define@key{ouckey}{date}{\ouckey@setkey{\ouckey@date}{#1}}
|
||||||
|
\define@key{ouckey}{total}{\ouckey@setkey{\ouckey@total}{#1}}
|
||||||
\newcommand{\keysetup}[1]{\setkeys{ouckey}{#1}}
|
\newcommand{\keysetup}[1]{\setkeys{ouckey}{#1}}
|
||||||
|
|
||||||
% 判空:\ifx 比不了多 token 参数,用 \detokenize 展成字符串再比
|
%----------------------------------------------------------------------
|
||||||
|
% 判空(修正:原实现有真 bug)
|
||||||
|
%
|
||||||
|
% ⚠️⚠️ 旧实现的坑
|
||||||
|
% 旧代码是
|
||||||
|
% \newcommand{\ouckey@ifempty}[1]{%
|
||||||
|
% \if\relax\detokenize{#1}\relax ... }
|
||||||
|
% 调用处写 `\ouckey@ifempty{\ouckey@dept}{空}{非空}`。
|
||||||
|
% **\detokenize 不展开参数** —— 它看到的是字符串 `\ouckey@dept`
|
||||||
|
% (宏名本身),永远非空 ⇒ 判空永远失败。
|
||||||
|
% 后果:`dept = {}` 时抬头仍印出孤立的「开课学院:」,后面没有值。
|
||||||
|
% 这是旧版就有的 bug(三格布局下不明显)。
|
||||||
|
%
|
||||||
|
% 为什么不在宏里修
|
||||||
|
% 试过「先 \edef 展开再 \detokenize」的版本,会报
|
||||||
|
% ! Incomplete \iffalse; all text was ignored after line 49.
|
||||||
|
% 因为 \if...\else...\fi 被 \expandafter 链打散,TeX 匹配 \fi 时错位。
|
||||||
|
% 这类宏层展开的修补很脆,不值得。
|
||||||
|
%
|
||||||
|
% ✅ 正确做法:**在 \define@key 里就把空值规范化**(见文件上方
|
||||||
|
% \ouckey@setkey)。空值存成真正的空串,判空就能工作。
|
||||||
|
%
|
||||||
|
% ⚠️ 这里只留判空宏本身。它拿到的是**已经规范化过的值**
|
||||||
|
% (`\ouckey@dept` 展开后就是纯文本),所以 \detokenize 有效。
|
||||||
|
%----------------------------------------------------------------------
|
||||||
\newcommand{\ouckey@ifempty}[1]{%
|
\newcommand{\ouckey@ifempty}[1]{%
|
||||||
\if\relax\detokenize{#1}\relax
|
\if\relax\detokenize{#1}\relax
|
||||||
\expandafter\@firstoftwo
|
\expandafter\@firstoftwo
|
||||||
@@ -110,15 +275,45 @@
|
|||||||
\expandafter\@secondoftwo
|
\expandafter\@secondoftwo
|
||||||
\fi}
|
\fi}
|
||||||
|
|
||||||
% 一格信息:标签加粗,值用宋体;值为空则整格不出
|
%----------------------------------------------------------------------
|
||||||
\newcommand{\ouckey@cell}[2]{%
|
% 一项信息:标签加粗 + 值,**独占一行**
|
||||||
\ouckey@ifempty{#2}{}{\textbf{#1:}#2}}
|
%
|
||||||
% 一行三格,等宽
|
% ⚠️⚠️ 为什么从"一行三格"改成"一行一项"
|
||||||
\newcommand{\ouckey@inforow}[6]{%
|
%
|
||||||
\par\noindent
|
% 旧实现是三个 \makebox[0.3333\linewidth][l] 并排:
|
||||||
\makebox[0.3333\linewidth][l]{\ouckey@cell{#1}{#2}}%
|
% \makebox[固定宽][l]{内容}
|
||||||
\makebox[0.3333\linewidth][l]{\ouckey@cell{#3}{#4}}%
|
% \makebox 是**不可断的盒子**,行为是:
|
||||||
\makebox[0.3333\linewidth][l]{\ouckey@cell{#5}{#6}}\par}
|
% · 内容比盒宽短 → 左对齐,右侧留白(正常)
|
||||||
|
% · 内容比盒宽长 → **直接溢出盒外,压到右边一格上**(就是 bug)
|
||||||
|
% · 盒内中文**不能换行**(LR 模式,不做段落断行)
|
||||||
|
% 所以三格布局对短字段友好,对长字段必然重叠。
|
||||||
|
%
|
||||||
|
% 把 dept 填成
|
||||||
|
% 计算机科学与技术学院(人工智能与大数据技术方向实验班)
|
||||||
|
% 后,读取
|
||||||
|
% 开课学院:(70.87~123.37) 值:(123.37~406.87)
|
||||||
|
% 而第二格「课程名称」本该从 216.0 开始 ⇒ **重叠 190.87bp**,
|
||||||
|
% 把「课程名称 / 试卷类型」整个压住。
|
||||||
|
%
|
||||||
|
% ⚠️ **编译完全不报错,也没有 Overfull 警告**(rc=0 over=0)。
|
||||||
|
% \makebox 内容溢出盒外时 TeX 不认为是"坏行"。
|
||||||
|
% ⇒ 这类 bug 只能靠看渲染结果或量 span 坐标发现,看日志发现不了。
|
||||||
|
%
|
||||||
|
% 现在的做法:每项 `\par\noindent\textbf{标签:}值\par`,普通段落。
|
||||||
|
% · 超长自动换行(中文可在任意汉字间断行)
|
||||||
|
% · 不存在并排,也就不存在互相压住
|
||||||
|
% · 抬头是"查阅"性质,一项一行比三格更容易扫读
|
||||||
|
% 代价:抬头从 3 行变 9 行,多占约 6 行。答案卷 A4、内容不满页,
|
||||||
|
% 多 6 行不影响版面。
|
||||||
|
%
|
||||||
|
% ⚠️ 留空的项仍**整项不印**(也不留空行),逻辑不变。
|
||||||
|
%----------------------------------------------------------------------
|
||||||
|
\newcommand{\ouckey@inforow}[2]{%
|
||||||
|
\ouckey@ifempty{#2}{}{%
|
||||||
|
% 行距收紧到 15bp(\Fivhao 的基线距是 16bp)。抬头是"查阅"信息,
|
||||||
|
% 不需要正文那种行距;9 行 × 省 5.8bp ≈ 省 52bp,将近 3 行正文。
|
||||||
|
{\fontsize{10.5bp}{15bp}\selectfont
|
||||||
|
\par\noindent\textbf{#1:}#2\par}}}
|
||||||
|
|
||||||
%----------------------------------------------------------------------
|
%----------------------------------------------------------------------
|
||||||
% 抬头:标题 + 信息栏 + 一条分隔线
|
% 抬头:标题 + 信息栏 + 一条分隔线
|
||||||
@@ -140,15 +335,18 @@
|
|||||||
\vspace*{10bp}
|
\vspace*{10bp}
|
||||||
\hrule height 1.2bp
|
\hrule height 1.2bp
|
||||||
\vspace*{8bp}
|
\vspace*{8bp}
|
||||||
\ouckey@inforow{开课学院}{\ouckey@dept}%
|
% 每项一行。顺序按"读者关心程度"排:
|
||||||
{课程名称}{\ouckey@course}%
|
% 先课程、后学院、再人与考试形式,最后分值。
|
||||||
{试卷类型}{\ouckey@ifempty{\ouckey@type}{}{\ouckey@type~卷}}
|
% 留空的自动跳过,所以实际行数随填写项变化。
|
||||||
\ouckey@inforow{学生学院}{\ouckey@college}%
|
\ouckey@inforow{课程名称}{\ouckey@course}
|
||||||
{年级专业}{\ouckey@major}%
|
\ouckey@inforow{开课学院}{\ouckey@dept}
|
||||||
{考试方式}{\ouckey@mode}
|
\ouckey@inforow{学生学院}{\ouckey@college}
|
||||||
\ouckey@inforow{任课教师}{\ouckey@teacher}%
|
\ouckey@inforow{年级专业}{\ouckey@major}
|
||||||
{命题人}{\ouckey@examiner}%
|
\ouckey@inforow{试卷类型}{\ouckey@ifempty{\ouckey@type}{}{\ouckey@type~卷}}
|
||||||
{满分}{\ouckey@ifempty{\ouckey@total}{}{\TNR{\ouckey@total}~分}}
|
\ouckey@inforow{考试方式}{\ouckey@mode}
|
||||||
|
\ouckey@inforow{任课教师}{\ouckey@teacher}
|
||||||
|
\ouckey@inforow{命题人}{\ouckey@examiner}
|
||||||
|
\ouckey@inforow{满分}{\ouckey@ifempty{\ouckey@total}{}{\TNR{\ouckey@total}~分}}
|
||||||
% ★ 抬头【不印考试日期】。
|
% ★ 抬头【不印考试日期】。
|
||||||
% date 这个键仍保留(老文件写了 date= 不会报 unknown key),
|
% date 这个键仍保留(老文件写了 date= 不会报 unknown key),
|
||||||
% 但不再渲染,对话框里也不显示,避免抬头行数随日期有无而浮动。
|
% 但不再渲染,对话框里也不显示,避免抬头行数随日期有无而浮动。
|
||||||
@@ -161,6 +359,11 @@
|
|||||||
% \pt{2} → 「(2 分)」——嵌在答案文字中间,标"这一点值 2 分"
|
% \pt{2} → 「(2 分)」——嵌在答案文字中间,标"这一点值 2 分"
|
||||||
% \ptline{2}{要点} → 要点靠左、分值靠右对齐(长要点更清爽)
|
% \ptline{2}{要点} → 要点靠左、分值靠右对齐(长要点更清爽)
|
||||||
%======================================================================
|
%======================================================================
|
||||||
|
% 分值标注「(X 分)」。
|
||||||
|
% ⚠️ 里面用 `~`(\nobreakspace)是**有意为之** —— 不让「X」和「分」
|
||||||
|
% 分处两行,否则会看到「(1」在行末、「分)」在下一行,很难看。
|
||||||
|
% 代价是「(X 分)」成了不可断的整体,极端行宽下会撑破版心。
|
||||||
|
% ⇒ 这个代价接受,解决办法是在**源码的句子边界手动断行**,
|
||||||
\newcommand{\pt}[1]{{\small(\TNR{#1}~分)}}
|
\newcommand{\pt}[1]{{\small(\TNR{#1}~分)}}
|
||||||
\newcommand{\ptline}[2]{%
|
\newcommand{\ptline}[2]{%
|
||||||
\par\noindent #2\unskip\par\nobreak
|
\par\noindent #2\unskip\par\nobreak
|
||||||
@@ -188,7 +391,7 @@
|
|||||||
\addvspace{5bp}}
|
\addvspace{5bp}}
|
||||||
\newcommand{\keysectionfree}[3]{%
|
\newcommand{\keysectionfree}[3]{%
|
||||||
\par\addvspace{10bp}%
|
\par\addvspace{10bp}%
|
||||||
{\Sihao\heiti #1、#2(#3)\par}%
|
{\Sihao\heiti #1、#2\par}%
|
||||||
\addvspace{5bp}}
|
\addvspace{5bp}}
|
||||||
|
|
||||||
%======================================================================
|
%======================================================================
|
||||||
@@ -197,7 +400,7 @@
|
|||||||
% \objkeys[5]{...} → 每行 5 个
|
% \objkeys[5]{...} → 每行 5 个
|
||||||
% 答案串逗号分隔;题号自动递增。
|
% 答案串逗号分隔;题号自动递增。
|
||||||
%
|
%
|
||||||
% ★ 这个宏反复改过很多次,下面几条是实测结论,动之前先看清:
|
% ★ 这个宏反复改过很多次,下面几条是实际结论,动之前先看清:
|
||||||
%
|
%
|
||||||
% 【不能用 \par 分行】
|
% 【不能用 \par 分行】
|
||||||
% 在 \@for 循环体里写 "\hbox to \textwidth{...}\par\noindent",
|
% 在 \@for 循环体里写 "\hbox to \textwidth{...}\par\noindent",
|
||||||
@@ -208,7 +411,7 @@
|
|||||||
% 【不能用 \unvbox + \prevdepth 思路】
|
% 【不能用 \unvbox + \prevdepth 思路】
|
||||||
% \unvbox 执行完寄存器即被清空,紧跟的 \ifdim\ht...>0pt 恒为假;
|
% \unvbox 执行完寄存器即被清空,紧跟的 \ifdim\ht...>0pt 恒为假;
|
||||||
% 而且 \unvbox 后 TeX 把 \prevdepth 设成 -1000pt 抑制行间胶水,
|
% 而且 \unvbox 后 TeX 把 \prevdepth 设成 -1000pt 抑制行间胶水,
|
||||||
% 各行会叠在一起(实测间距只有一个行高)。
|
% 各行会叠在一起(实际间距只有一个行高)。
|
||||||
%
|
%
|
||||||
% 【不能用 \makebox[<变宽>]】
|
% 【不能用 \makebox[<变宽>]】
|
||||||
% 在 \@for 循环里 \makebox[\dimexpr\textwidth/\perrow\relax] 或
|
% 在 \@for 循环里 \makebox[\dimexpr\textwidth/\perrow\relax] 或
|
||||||
@@ -327,7 +530,6 @@
|
|||||||
\newcount\ouckey@sum
|
\newcount\ouckey@sum
|
||||||
\newcount\ouckey@cnt
|
\newcount\ouckey@cnt
|
||||||
%----------------------------------------------------------------------
|
%----------------------------------------------------------------------
|
||||||
% ★ 这里踩过三个坑,都记下:
|
|
||||||
%
|
%
|
||||||
% 坑1 \edef\head{\head&...} 自引用 → 无限展开,parameter stack 爆掉。
|
% 坑1 \edef\head{\head&...} 自引用 → 无限展开,parameter stack 爆掉。
|
||||||
% 坑2 \g@addto@macro / \toks 存 token 序列 → 存进去的是 \ouckey@cur
|
% 坑2 \g@addto@macro / \toks 存 token 序列 → 存进去的是 \ouckey@cur
|
||||||
|
|||||||
Binary file not shown.
+7
-7
@@ -33,13 +33,13 @@
|
|||||||
\keysetup{
|
\keysetup{
|
||||||
year = {2025},
|
year = {2025},
|
||||||
term = {秋},
|
term = {秋},
|
||||||
course = {课程名称},
|
course = {数字逻辑},
|
||||||
type = {A},
|
type = {A},
|
||||||
dept = {××学院},
|
dept = {计算机科学与技术学院},
|
||||||
college = {××学院},
|
college = {信息科学与工程学院},
|
||||||
major = {××专业 \TNR{2024} 级},
|
major = {计算机科学与技术专业 \TNR{2023} 级},
|
||||||
teacher = {×××},
|
teacher = {张远航},
|
||||||
examiner = {×××},
|
examiner = {张远航},
|
||||||
mode = {闭卷、笔试},
|
mode = {闭卷、笔试},
|
||||||
total = {100},
|
total = {100},
|
||||||
}
|
}
|
||||||
@@ -121,7 +121,7 @@
|
|||||||
作业批改等方式实施\pt{1}。}
|
作业批改等方式实施\pt{1}。}
|
||||||
|
|
||||||
\keyitem{3}{4}{%
|
\keyitem{3}{4}{%
|
||||||
\textbf{学习迁移}:指一种学习对另一种学习的影响\pt{2}。
|
\textbf{学习迁移}:指一种学习对另一种学习的影响\pt{2}。\\
|
||||||
按方向分正迁移与负迁移\pt{1},其发生依赖于共同要素与概括水平\pt{1}。}
|
按方向分正迁移与负迁移\pt{1},其发生依赖于共同要素与概括水平\pt{1}。}
|
||||||
|
|
||||||
\scoring{每小题 \TNR{4} 分,共 \TNR{12} 分。按上述得分点累加给分,
|
\scoring{每小题 \TNR{4} 分,共 \TNR{12} 分。按上述得分点累加给分,
|
||||||
|
|||||||
Binary file not shown.
+2
-2
@@ -33,8 +33,8 @@
|
|||||||
\examsetup{
|
\examsetup{
|
||||||
year = {2025},
|
year = {2025},
|
||||||
term = {秋},
|
term = {秋},
|
||||||
course = {课程名称},
|
course = {数字逻辑},
|
||||||
college = {××学院},
|
college = {信息科学与工程学院},
|
||||||
type = {A}, % 卷头"试卷类型:A 卷"用这个
|
type = {A}, % 卷头"试卷类型:A 卷"用这个
|
||||||
foottype = {}, % 页脚课程名后是否再印类型字母。默认空(原卷 A 卷就不印)
|
foottype = {}, % 页脚课程名后是否再印类型字母。默认空(原卷 A 卷就不印)
|
||||||
% 若要与 B 卷一致,写 foottype = {B}
|
% 若要与 B 卷一致,写 foottype = {B}
|
||||||
|
|||||||
+112
-90
@@ -1,120 +1,142 @@
|
|||||||
# 试卷归档封面 —— 信息科学与工程学部试卷归档封面(理论课)
|
# 试卷归档封面
|
||||||
|
|
||||||
信息科学与工程学部**试卷归档封面**的 XeLaTeX 模板。原文件是学院/学部下发的
|
信息科学与工程学部试卷归档封面(理论课),A4 单页。
|
||||||
`.doc` 表格,本目录把它做成可直接编译的 LaTeX 版。
|
|
||||||
|
|
||||||
> **改名说明**:原文件名为「附件1:信息科学与工程学院试卷封面(理论课)」,
|
## 编译
|
||||||
> 内文标题写的是「信息科学与工程学院试卷」。按现行建制与文档实际用途,
|
|
||||||
> 已统一改为 **学部 + 归档封面**:目录名、文件名、内文标题三处同步。
|
|
||||||
|
|
||||||
> 与 [`试卷/`](../试卷/) 的区别:`试卷/` 是**试卷正文 + 参考答案**(学校专用
|
```bash
|
||||||
> 195×270mm 试卷纸、装订栏、成绩表);本目录是**随卷归档的封面单页**
|
cd 试卷归档封面
|
||||||
> (A4、11 行两列表单)。两者用途不同,不是同一份文件的两个版本。
|
xelatex 试卷归档封面.tex
|
||||||
|
```
|
||||||
|
|
||||||
|
或仓库根:`bash build.sh 试卷归档封面`
|
||||||
|
|
||||||
## 文件
|
## 文件
|
||||||
|
|
||||||
| 文件 | 说明 |
|
| 文件 | 说明 |
|
||||||
|---|---|
|
|---|---|
|
||||||
| `oucksfm.sty` | 版式包。A4、表宽 170mm、11 行固定行高,所有尺寸已注明换算过程 |
|
| `试卷归档封面.tex` | 主文件,填内容改这里 |
|
||||||
| `试卷归档封面.tex` | 填写入口,【第 1 节】改课程信息即可 |
|
| `oucksfm.sty` | 版式包,一般不改 |
|
||||||
| `试卷归档封面.pdf` | 成品样张 |
|
|
||||||
|
|
||||||
## 编译
|
## 填写参数
|
||||||
|
|
||||||
```bash
|
全部在 `\begin{document}` 之前定义:
|
||||||
xelatex 试卷归档封面.tex
|
|
||||||
```
|
|
||||||
|
|
||||||
必须用 **XeLaTeX**(fontspec + xeCJK),pdflatex 编译不过。
|
|
||||||
本模板自包含,不依赖任何图片。
|
|
||||||
|
|
||||||
## 填表
|
|
||||||
|
|
||||||
只改 `试卷归档封面.tex` 的【第 1 节】:
|
|
||||||
|
|
||||||
```latex
|
```latex
|
||||||
\newcommand{\sfmyear} {\ph{××××}年} % 学年
|
\newcommand{\sfmyear} {\ph{2025}年} % 学年
|
||||||
\newcommand{\sfmterm} {\ph{×}季学期} % 学期
|
\newcommand{\sfmterm} {\ph{秋}季学期} % 学期
|
||||||
\newcommand{\sfmcno} {080502101231} % 课程号(纯数字,14pt)
|
\newcommand{\sfmcno} {080502101231} % 课程号
|
||||||
\newcommand{\sfmsno} {25252029} % 选课号(纯数字,14pt)
|
\newcommand{\sfmsno} {25252029} % 选课号
|
||||||
\newcommand{\sfmcourse}{\ph{××××}} % 考试课程名称
|
\newcommand{\sfmcourse}{\ph{数字逻辑}} % 考试课程名称
|
||||||
\newcommand{\sfmtype} {\ph{×××}} % 课程类型
|
\newcommand{\sfmtype} {\ph{专业课}} % 课程类型
|
||||||
\newcommand{\sfmmajor}{...} % 面向专业(多个用、隔开)
|
\newcommand{\sfmmajor}{% % 面向专业
|
||||||
\newcommand{\sfmgrade}{\ph{××××}} % 面向年级
|
\ph{计算机科学与技术}、\ph{软件工程}、\ph{智能科学与技术}}
|
||||||
\newcommand{\sfmcount}{\ph{××}} % 试卷份数
|
\newcommand{\sfmgrade} {\ph{2023}级} % 面向年级
|
||||||
\newcommand{\sfmteacher}{\ph{×××}} % 授课教师
|
\newcommand{\sfmcount} {\ph{86}} % 试卷份数
|
||||||
\newcommand{\sfmdate}{...} % 日期
|
\newcommand{\sfmteacher}{\ph{张远航}} % 授课教师
|
||||||
|
\newcommand{\sfmdate} {\ph{2025}年\ph{01}月\ph{08}日星期\ph{三}} % 日期
|
||||||
```
|
```
|
||||||
|
|
||||||
填真实内容后把 `\ph{...}` 整个换掉,不要留下 `×`。
|
| 参数 | 说明 |
|
||||||
|
|---|---|
|
||||||
|
| `\sfmyear` | 学年,写成「2025年」这种形式 |
|
||||||
|
| `\sfmterm` | 学期,秋 / 春,或「秋季学期」 |
|
||||||
|
| `\sfmcno` | 课程号,纯数字,14pt |
|
||||||
|
| `\sfmsno` | 选课号,纯数字,14pt |
|
||||||
|
| `\sfmcourse` | 考试课程名称 |
|
||||||
|
| `\sfmtype` | 课程类型:专业课 / 公共基础课 / 通识课 |
|
||||||
|
| `\sfmmajor` | 面向专业,多个用「、」隔开 |
|
||||||
|
| `\sfmgrade` | 面向年级 |
|
||||||
|
| `\sfmcount` | 试卷份数 |
|
||||||
|
| `\sfmteacher` | 授课教师 |
|
||||||
|
| `\sfmdate` | 日期 |
|
||||||
|
|
||||||
## 版式参数
|
### `\ph` 命令
|
||||||
|
|
||||||
全部照原 `.doc` 实测值,未做主观调整:
|
`\ph{文字}` 把内容排成黑体(表示可填写的占位值)。定义在 tex 里:
|
||||||
|
|
||||||
| 项目 | 值 | 来源 |
|
|
||||||
|---|---|---|
|
|
||||||
| 纸张 | A4 210×297mm | `pgSz` |
|
|
||||||
| 页边距 | 左右 20mm、上下 25.01mm | `pgMar` 56.7 / 70.9 pt |
|
|
||||||
| 表宽 | 170mm(= 版心宽) | `tblW` 100% |
|
|
||||||
| 边框 | 0.5pt 实线 | `w:sz=4`(1/8pt 单位)|
|
|
||||||
| 单元格内边距 | 左右 1.4993mm、上下 0 | `tblCellMar` 85 twips |
|
|
||||||
| 列宽 | 51mm + 119mm(30% : 70%) | `col_widths_pct` |
|
|
||||||
| 标题 | 黑体 18pt 加粗居中 | `w:sz=36` + `w:b` |
|
|
||||||
| 左列标签 | 黑体 18pt | `w:sz=36` |
|
|
||||||
| 右列值 | 18pt(学年/学期)/16pt(多数)/14pt(课程号、选课号) | `w:sz=36/32/28` |
|
|
||||||
| 行高 | 11 行固定高,合计 185.95mm | 各行 `trHeight` + `hRule=exact` |
|
|
||||||
|
|
||||||
实测校验(pymupdf 读 PDF):
|
|
||||||
|
|
||||||
```
|
|
||||||
表格 左=20.0mm 右=189.91mm 宽=169.9mm ← 应为 170mm ✓
|
|
||||||
行高 15.19/15.18/15.54/14.66/14.75/15.18/33.02/15.19/18.80/15.19/15.19 mm
|
|
||||||
表格总高 187.89mm ← 含线宽与取整,与 185.95+线宽 吻合
|
|
||||||
标题 宽 94.89mm,单行不折(版心 170mm,余量充足)
|
|
||||||
```
|
|
||||||
|
|
||||||
## 三个坑(改之前先看)
|
|
||||||
|
|
||||||
### 1. `×` 占位符曾跑到 Times New Roman(已在公共字体包根治)
|
|
||||||
|
|
||||||
xeCJK 按 Unicode 区段分类,`×`(U+00D7)落在 Latin-1,会被判成**西文**,
|
|
||||||
交给 fontspec 的西文字体(Termes / Times)。`\heiti` / `\fangsong` 只切
|
|
||||||
CJK 字体族,**管不到它** —— 包一层是没用的。TNR 的 × 宽度与汉字不一致,
|
|
||||||
混排时基线也偏。
|
|
||||||
|
|
||||||
现在这行已上移到仓库公共字体包 [`../fonts.tex`](../fonts.tex),**全局生效**:
|
|
||||||
|
|
||||||
```latex
|
```latex
|
||||||
\xeCJKDeclareCharClass{CJK}{"00D7} % × 乘号
|
\newcommand{\ph}[1]{{\heiti #1\normalfont}}
|
||||||
\xeCJKDeclareCharClass{CJK}{"2014} % — 破折号
|
|
||||||
\xeCJKDeclareCharClass{CJK}{"25A1} % □ 方框(勾选框)
|
|
||||||
```
|
```
|
||||||
|
|
||||||
本模板不再需要自己声明。
|
要改占位值的字体,改这一行。纯数字(课程号、选课号)本来该用西文字体,
|
||||||
|
不用 `\ph` 包。
|
||||||
|
|
||||||
> ✅ [`年度考核登记表/`](../年度考核登记表/) 也有同样问题,**已随本次改造一并修好**
|
### 面向专业这一格
|
||||||
> (原先那条注释说能修,但实测 PDF 里 × 仍落在 TNR —— 因为注释在、声明也写了,
|
|
||||||
> 却没有真正作用到字符类)。现在已经实测确认:10 处 `×` 全部落在 OUC Sans 上。
|
|
||||||
|
|
||||||
### 2. 字体全部来自公共字体包
|
`\sfmmajor` 是全表唯一的高行(32.844mm),能容 3 行 16pt 文字。
|
||||||
|
专业名超过 3 行会自动把行撑高,整表会超出版心。届时:
|
||||||
|
|
||||||
本模板原先用 SimHei / SimSun / FangSong + `AutoFakeBold` 描边,换台机器
|
1. 精简专业名,或
|
||||||
(尤其 Linux/macOS)就编不出来,而且这些字体都不允许随仓库分发。现改为
|
2. 把 `oucksfm.sty` 里 `row{7}` 的 `ht` 改大
|
||||||
`\input{../fonts.tex}`,字体文件在 `../fonts/` 下,来源与授权见
|
|
||||||
[`../fonts/README.md`](../fonts/README.md)。
|
|
||||||
|
|
||||||
### 3. `\linespread` 会悄悄放大行高
|
## 表格结构
|
||||||
|
|
||||||
ctex 默认 `\linespread` 约为 **1.3**,它会把 `\fontsize{18}{21.6}` 里的
|
| 行 | 内容 |
|
||||||
21.6 pt 行距放大到 **28 pt 以上**,逐行累积后整张表会顶出页面。
|
|---|---|
|
||||||
|
| 1 | 学年 + 学期 |
|
||||||
|
| 2 | 课程号 + 选课号 |
|
||||||
|
| 3 | 考试课程名称 |
|
||||||
|
| 4 | 课程类型 |
|
||||||
|
| 5 | 面向专业(高行) |
|
||||||
|
| 6 | 面向年级 |
|
||||||
|
| 7 | 试卷份数 |
|
||||||
|
| 8 | 授课教师 |
|
||||||
|
| 9 | 日期 |
|
||||||
|
|
||||||
`oucksfm.sty` 的解法是在**每个** `\fontsize` 之后紧跟 `\linespread{1}\relax`,
|
## 标签文字
|
||||||
并且在 `\AtBeginDocument` 之后再设一次(ctex 会在 `\begin{document}` 时
|
|
||||||
把 `\linespread` 重新设回 1.3,只在导言区设是无效的):
|
表左侧的标签默认是:
|
||||||
|
|
||||||
```latex
|
```latex
|
||||||
\AtBeginDocument{\linespread{1}\selectfont}
|
\newcommand{\sfmyearlabel} {学\quad 年}
|
||||||
|
\newcommand{\sfmtermlabel} {学\quad 期}
|
||||||
|
\newcommand{\sfmcnolabel} {课程号}
|
||||||
|
\newcommand{\sfmsnolabel} {选课号}
|
||||||
|
\newcommand{\sfmcourselabel} {考试课程名称}
|
||||||
|
\newcommand{\sfmtypelabel} {课程类型}
|
||||||
|
\newcommand{\sfmmajorlabel} {面向专业}
|
||||||
|
\newcommand{\sfmgradelabel} {面向年级}
|
||||||
|
\newcommand{\sfmcountlabel} {试卷份数}
|
||||||
|
\newcommand{\sfmteacherlabel}{授课教师}
|
||||||
|
\newcommand{\sfmdatelabel} {日\quad 期}
|
||||||
```
|
```
|
||||||
|
|
||||||
没有这一步,表高会比原卷高出一大截。
|
字号不一致的标签用 `\quad` 补空格对齐。
|
||||||
|
|
||||||
|
## 正文
|
||||||
|
|
||||||
|
```latex
|
||||||
|
\begin{document}
|
||||||
|
\sfmtitle{信息科学与工程学部试卷归档封面}
|
||||||
|
\begin{sfmtable}
|
||||||
|
\sfmlabel{\sfmyearlabel} & \sfmvalbig{\sfmyear} \\
|
||||||
|
...
|
||||||
|
\end{sfmtable}
|
||||||
|
```
|
||||||
|
|
||||||
|
`\sfmlabel` 排标签,`\sfmval` / `\sfmvalbig` / `\sfmvalsmall` 排值(三档字号)。
|
||||||
|
|
||||||
|
### 其他命令
|
||||||
|
|
||||||
|
| 命令 | 用途 |
|
||||||
|
|---|---|
|
||||||
|
| `\sfmtitle{标题}` | 表外标题 |
|
||||||
|
| `\sfmlabel{文字}` | 左列标签 |
|
||||||
|
| `\sfmval{值}` | 中号值 |
|
||||||
|
| `\sfmvalbig{值}` | 大号值 |
|
||||||
|
| `\sfmvalsmall{值}` | 小号值 |
|
||||||
|
| `\sfmtail{文字}` | 表尾文字 |
|
||||||
|
| `\sfmrule` | 横线 |
|
||||||
|
|
||||||
|
## 版式
|
||||||
|
|
||||||
|
```
|
||||||
|
A4,单页
|
||||||
|
标签黑体,值黑体(\ph),纯数字用西文
|
||||||
|
表格行高按原表设定,第 5 行(面向专业)为高行
|
||||||
|
```
|
||||||
|
|
||||||
|
## 注意
|
||||||
|
|
||||||
|
示例内容为虚构数据,使用时全部替换成自己的课程。
|
||||||
+12
-14
@@ -5,7 +5,7 @@
|
|||||||
% (SynologyDrive/授课/数字逻辑/2025/归档/)
|
% (SynologyDrive/授课/数字逻辑/2025/归档/)
|
||||||
% 原名与内文标题写的是「学院」,按现行建制改为「学部」,
|
% 原名与内文标题写的是「学院」,按现行建制改为「学部」,
|
||||||
% 模板标题相应为「信息科学与工程学部试卷归档封面」。
|
% 模板标题相应为「信息科学与工程学部试卷归档封面」。
|
||||||
% 目标:版式与原 .doc 逐项对齐。所有尺寸都由 Word 内部数值换算:
|
% 目标:版式与逐项对齐。所有尺寸都由 Word 内部数值换算:
|
||||||
% pt → mm : mm = pt / 72 * 25.4
|
% pt → mm : mm = pt / 72 * 25.4
|
||||||
% twips → mm : mm = twips / 1440 * 25.4
|
% twips → mm : mm = twips / 1440 * 25.4
|
||||||
% w:sz : 半磅值,÷ 2 即 pt
|
% w:sz : 半磅值,÷ 2 即 pt
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
%======================================================================
|
%======================================================================
|
||||||
% 1. 页面与版心
|
% 1. 页面与版心
|
||||||
%
|
%
|
||||||
% 原 .doc sectPr:
|
% sectPr:
|
||||||
% pgSz A4(595.3 × 841.9 pt = 210.0 × 297.0 mm)
|
% pgSz A4(595.3 × 841.9 pt = 210.0 × 297.0 mm)
|
||||||
% pgMar top/bottom 70.9 pt = 25.01 mm
|
% pgMar top/bottom 70.9 pt = 25.01 mm
|
||||||
% left/right 56.7 pt = 20.00 mm
|
% left/right 56.7 pt = 20.00 mm
|
||||||
@@ -49,7 +49,7 @@
|
|||||||
}
|
}
|
||||||
\setlength{\parindent}{0pt}
|
\setlength{\parindent}{0pt}
|
||||||
\setlength{\parskip}{0pt}
|
\setlength{\parskip}{0pt}
|
||||||
\pagestyle{empty} % 原 .doc 无页眉页脚,故不排页码
|
\pagestyle{empty} % 无页眉页脚,故不排页码
|
||||||
|
|
||||||
%======================================================================
|
%======================================================================
|
||||||
% 2. 字体与字号
|
% 2. 字体与字号
|
||||||
@@ -65,7 +65,6 @@
|
|||||||
% ⚠️ 全文只有黑体一种字体,没有宋体/仿宋混排,比另两份表单简单。
|
% ⚠️ 全文只有黑体一种字体,没有宋体/仿宋混排,比另两份表单简单。
|
||||||
%
|
%
|
||||||
% 字体全部来自仓库公共字体包 ../oucfonts.sty(文件在 ../fonts/ 下)。
|
% 字体全部来自仓库公共字体包 ../oucfonts.sty(文件在 ../fonts/ 下)。
|
||||||
% 旧版这里写的是系统字体的 SimHei / SimSun / FangSong + AutoFakeBold,
|
|
||||||
% 换台机器(尤其 Linux/macOS)就编不出来。现已全部换成随仓库分发的
|
% 换台机器(尤其 Linux/macOS)就编不出来。现已全部换成随仓库分发的
|
||||||
% 开源字体,并且粗体用字体自带的真粗体、不再算法描边。
|
% 开源字体,并且粗体用字体自带的真粗体、不再算法描边。
|
||||||
%======================================================================
|
%======================================================================
|
||||||
@@ -85,7 +84,7 @@
|
|||||||
\linespread{1}\relax
|
\linespread{1}\relax
|
||||||
\fontsize{18}{21.6}\selectfont}
|
\fontsize{18}{21.6}\selectfont}
|
||||||
|
|
||||||
% 三档字号(行距取字号的 1.2 倍,与原 .doc 单倍行距一致)
|
% 三档字号(行距取字号的 1.2 倍,与单倍行距一致)
|
||||||
\newcommand{\sfmbigfont}{\linespread{1}\relax\fontsize{18}{21.6}\selectfont}
|
\newcommand{\sfmbigfont}{\linespread{1}\relax\fontsize{18}{21.6}\selectfont}
|
||||||
\newcommand{\sfmmidfont}{\linespread{1}\relax\fontsize{16}{19.2}\selectfont}
|
\newcommand{\sfmmidfont}{\linespread{1}\relax\fontsize{16}{19.2}\selectfont}
|
||||||
\newcommand{\sfmsmlfont}{\linespread{1}\relax\fontsize{14}{16.8}\selectfont}
|
\newcommand{\sfmsmlfont}{\linespread{1}\relax\fontsize{14}{16.8}\selectfont}
|
||||||
@@ -97,11 +96,10 @@
|
|||||||
\newcommand{\SFMHT}[1]{{\heiti #1\normalfont}}
|
\newcommand{\SFMHT}[1]{{\heiti #1\normalfont}}
|
||||||
|
|
||||||
%----------------------------------------------------------------------
|
%----------------------------------------------------------------------
|
||||||
% ⚠️⚠️⚠️【「×」占位符的坑 —— 在 年度考核登记表/ 里踩过,那里只是绕过去了,
|
|
||||||
% 这里做了根治】
|
% 这里做了根治】
|
||||||
%
|
%
|
||||||
% 现象:写 {\heiti ×××} 后编译,PDF 里这些 × 实际用的是
|
% 现象:写 {\heiti ×××} 后编译,PDF 里这些 × 实际用的是
|
||||||
% Times New Roman(pymupdf 读 span 的 font=TimesNewRomanPSMT),
|
% Times New Roman,
|
||||||
% 不是黑体。§ 29 个 × 撑不满预期宽度,跟汉字混排时基线也偏。
|
% 不是黑体。§ 29 个 × 撑不满预期宽度,跟汉字混排时基线也偏。
|
||||||
%
|
%
|
||||||
% 原因:xeCJK 按 Unicode 区段分类。「×」是 U+00D7,落在 Latin-1 补充区,
|
% 原因:xeCJK 按 Unicode 区段分类。「×」是 U+00D7,落在 Latin-1 补充区,
|
||||||
@@ -122,7 +120,7 @@
|
|||||||
%======================================================================
|
%======================================================================
|
||||||
% 3. 列的宽度模型
|
% 3. 列的宽度模型
|
||||||
%
|
%
|
||||||
% 原 .doc tblGrid(2 个网格列,col_widths_pct = [30, 70]):
|
% tblGrid(2 个网格列,col_widths_pct = [30, 70]):
|
||||||
% c1 = 170 × 30% = 51.000 mm
|
% c1 = 170 × 30% = 51.000 mm
|
||||||
% c2 = 170 × 70% = 119.000 mm
|
% c2 = 170 × 70% = 119.000 mm
|
||||||
%
|
%
|
||||||
@@ -141,7 +139,7 @@
|
|||||||
% 故每列再减 0.5292/2 = 0.2646 mm。
|
% 故每列再减 0.5292/2 = 0.2646 mm。
|
||||||
%
|
%
|
||||||
% ⚠️ 上式只是理论值。tabularray 的计宽与画宽之间有约 0.45 pt 的取整差,
|
% ⚠️ 上式只是理论值。tabularray 的计宽与画宽之间有约 0.45 pt 的取整差,
|
||||||
% 实测需再微调(见 3.2 的实测标定值),否则一直报
|
% 实际需再微调(见 3.2 的标定值),否则一直报
|
||||||
% "Table width is too small, need 0.45pt more!" 外加一条 Overfull \hbox。
|
% "Table width is too small, need 0.45pt more!" 外加一条 Overfull \hbox。
|
||||||
%======================================================================
|
%======================================================================
|
||||||
\newcommand{\sfmrule}{0.5pt} % 边框粗细(w:sz=4)
|
\newcommand{\sfmrule}{0.5pt} % 边框粗细(w:sz=4)
|
||||||
@@ -167,7 +165,7 @@
|
|||||||
%======================================================================
|
%======================================================================
|
||||||
% 4. 行高
|
% 4. 行高
|
||||||
%
|
%
|
||||||
% 原 .doc 每行都是 w:trHeight + w:hRule="exact"(固定行高,不是 atLeast):
|
% 每行都是 w:trHeight + w:hRule="exact"(固定行高,不是 atLeast):
|
||||||
% R1 学年 42.55 pt = 15.011 mm
|
% R1 学年 42.55 pt = 15.011 mm
|
||||||
% R2 学期 42.55 pt = 15.011 mm
|
% R2 学期 42.55 pt = 15.011 mm
|
||||||
% R3 课程号 43.55 pt = 15.363 mm
|
% R3 课程号 43.55 pt = 15.363 mm
|
||||||
@@ -242,14 +240,14 @@
|
|||||||
%======================================================================
|
%======================================================================
|
||||||
% 7. 表外标题
|
% 7. 表外标题
|
||||||
%
|
%
|
||||||
% 原 .doc 第 1 段:黑体、加粗、w:sz=36(18pt)、jc=center
|
% 第 1 段:黑体、加粗、w:sz=36(18pt)、jc=center
|
||||||
%
|
%
|
||||||
% 原文标题是「信息科学与工程学院试卷」,按现行建制与文档实际用途已改为
|
% 原文标题是「信息科学与工程学院试卷」,按现行建制与文档实际用途已改为
|
||||||
% 「信息科学与工程学部试卷归档封面」
|
% 「信息科学与工程学部试卷归档封面」
|
||||||
% 实测 18pt 下宽 94.89mm,版心宽 170mm,左右各余约 37mm,单行不折。
|
% 实际18pt 下宽 94.89mm,版心宽 170mm,左右各余约 37mm,单行不折。
|
||||||
% 再加长(比如后面挂"(理论课)")仍有余量,超过 170mm 才会折行。
|
% 再加长(比如后面挂"(理论课)")仍有余量,超过 170mm 才会折行。
|
||||||
%
|
%
|
||||||
% 标题与表格之间原 .doc 有 3 个空段落(idx 13/14/15),
|
% 标题与表格之间有 3 个空段落(idx 13/14/15),
|
||||||
% 合计 3 × 21.6pt = 64.8pt = 22.86 mm。这里用 \sfmtitleskip 还原。
|
% 合计 3 × 21.6pt = 64.8pt = 22.86 mm。这里用 \sfmtitleskip 还原。
|
||||||
%======================================================================
|
%======================================================================
|
||||||
\newlength{\sfmtitleskip}
|
\newlength{\sfmtitleskip}
|
||||||
@@ -266,7 +264,7 @@
|
|||||||
%======================================================================
|
%======================================================================
|
||||||
% 8. 表后空行
|
% 8. 表后空行
|
||||||
%
|
%
|
||||||
% 原 .doc 表格之后还有一个空段落(idx 212)。
|
% 表格之后还有一个空段落(idx 212)。
|
||||||
%======================================================================
|
%======================================================================
|
||||||
\newcommand{\sfmtail}{\par\null\par}
|
\newcommand{\sfmtail}{\par\null\par}
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
+16
-13
@@ -11,7 +11,7 @@
|
|||||||
% (原文件名与内文标题写的是「学院」,现按现行建制改为「学部」)
|
% (原文件名与内文标题写的是「学院」,现按现行建制改为「学部」)
|
||||||
% 所有尺寸已在 oucksfm.sty 内注明换算过程;要改版式请改 sty。
|
% 所有尺寸已在 oucksfm.sty 内注明换算过程;要改版式请改 sty。
|
||||||
%
|
%
|
||||||
% 与原 .doc 的差异(有意为之):
|
% 与的差异(有意为之):
|
||||||
% · 原文件里的真实课程信息已全部换成 × 占位
|
% · 原文件里的真实课程信息已全部换成 × 占位
|
||||||
% · 单位名「学院」按现行建制改为「学部」,标题相应改为
|
% · 单位名「学院」按现行建制改为「学部」,标题相应改为
|
||||||
% 「信息科学与工程学部试卷归档封面」
|
% 「信息科学与工程学部试卷归档封面」
|
||||||
@@ -43,7 +43,6 @@
|
|||||||
%
|
%
|
||||||
% ⚠️⚠️【必须看】占位符「×」一律用 \ph{} 包起来,不要裸写 ×。
|
% ⚠️⚠️【必须看】占位符「×」一律用 \ph{} 包起来,不要裸写 ×。
|
||||||
%
|
%
|
||||||
% 原因(在 年度考核登记表/ 里踩过):字体的 ASCII 区段由 fontspec 交给
|
|
||||||
% 西文字体(这里是 Times New Roman),而「×」U+00D7 属于 Latin-1,
|
% 西文字体(这里是 Times New Roman),而「×」U+00D7 属于 Latin-1,
|
||||||
% 会被判成 ASCII ⇒ 用 TNR 的 ×,那是 1em 宽的数学乘号,
|
% 会被判成 ASCII ⇒ 用 TNR 的 ×,那是 1em 宽的数学乘号,
|
||||||
% 与汉字的 1em 字宽【不一样】(TNR 的 × 略窄、位置也偏)。
|
% 与汉字的 1em 字宽【不一样】(TNR 的 × 略窄、位置也偏)。
|
||||||
@@ -52,18 +51,22 @@
|
|||||||
% \ph{} 把它强制交回黑体(全角),宽度才与汉字一致。
|
% \ph{} 把它强制交回黑体(全角),宽度才与汉字一致。
|
||||||
% 本表全文黑体,所以用 \heiti 收尾即可。
|
% 本表全文黑体,所以用 \heiti 收尾即可。
|
||||||
%
|
%
|
||||||
% ⚠️ 填表时把 \ph{×××} 整体替换成真实内容(不要保留 × ):
|
% ⚠️ 填表时把自己的内容套进 \ph{}(每个值都要包,不要裸写):
|
||||||
% 例如 \newcommand{\sfmcourse}{数字逻辑},一行的 \ph 都不要留。
|
% 例如 \newcommand{\sfmcourse}{\ph{数字逻辑}}。
|
||||||
|
%
|
||||||
|
% ⚠️ 本文件已填入**虚构示例**(学期 2025 秋、课程「数字逻辑」、任课教师
|
||||||
|
% 「张远航」等),用于演示一份填好的表长什么样。实际使用时整体替换:
|
||||||
|
% 下面每个 \ph{...} 的内容都改成自己的,不要保留示例值。
|
||||||
%----------------------------------------------------------------------
|
%----------------------------------------------------------------------
|
||||||
\newcommand{\ph}[1]{{\heiti #1\normalfont}}
|
\newcommand{\ph}[1]{{\heiti #1\normalfont}}
|
||||||
|
|
||||||
% 学年。原文件写「2025年」,学期行写「秋季学期」。
|
% 学年。原文件写「2025年」,学期行写「秋季学期」。
|
||||||
% ⚠️ 注意:学部原表是「学年」+「2025年」这种写法,不是「2025—2026」。
|
% ⚠️ 注意:学部原表是「学年」+「2025年」这种写法,不是「2025—2026」。
|
||||||
% 若学校要求写成区间,改这里即可,行高涨一点不会溢出。
|
% 若学校要求写成区间,改这里即可,行高涨一点不会溢出。
|
||||||
\newcommand{\sfmyear} {\ph{××××}年}
|
\newcommand{\sfmyear} {\ph{2025}年}
|
||||||
|
|
||||||
% 学期:秋 / 春,或「秋季学期」「春季学期」
|
% 学期:秋 / 春,或「秋季学期」「春季学期」
|
||||||
\newcommand{\sfmterm} {\ph{×}季学期}
|
\newcommand{\sfmterm} {\ph{秋}季学期}
|
||||||
|
|
||||||
% 课程号 / 选课号:纯数字,14pt(比其余值小一档,原表如此)
|
% 课程号 / 选课号:纯数字,14pt(比其余值小一档,原表如此)
|
||||||
% ⚠️ 纯数字是真正的 ASCII,本来就该用 TNR,所以不用 \ph 包。
|
% ⚠️ 纯数字是真正的 ASCII,本来就该用 TNR,所以不用 \ph 包。
|
||||||
@@ -71,29 +74,29 @@
|
|||||||
\newcommand{\sfmsno} {25252029}
|
\newcommand{\sfmsno} {25252029}
|
||||||
|
|
||||||
% 考试课程名称
|
% 考试课程名称
|
||||||
\newcommand{\sfmcourse}{\ph{××××}}
|
\newcommand{\sfmcourse}{\ph{数字逻辑}}
|
||||||
|
|
||||||
% 课程类型:专业课 / 公共基础课 / 通识课 …
|
% 课程类型:专业课 / 公共基础课 / 通识课 …
|
||||||
\newcommand{\sfmtype} {\ph{×××}}
|
\newcommand{\sfmtype} {\ph{专业课}}
|
||||||
|
|
||||||
% 面向专业。多个专业之间用「、」隔开。
|
% 面向专业。多个专业之间用「、」隔开。
|
||||||
% ⚠️⚠️ 这一格是全表唯一的高行(32.844mm),能容 3 行 16pt 文字。
|
% ⚠️⚠️ 这一格是全表唯一的高行(32.844mm),能容 3 行 16pt 文字。
|
||||||
% 专业名超过 3 行会自动把行撑高,整表就顶出版心了——届时请把
|
% 专业名超过 3 行会自动把行撑高,整表就顶出版心了——届时请把
|
||||||
% oucksfm.sty 里 row{7} 的 ht 改大,或者把专业名精简。
|
% oucksfm.sty 里 row{7} 的 ht 改大,或者把专业名精简。
|
||||||
\newcommand{\sfmmajor}{%
|
\newcommand{\sfmmajor}{%
|
||||||
\ph{××××××××}、\ph{××××}、\ph{××××××}、\ph{××××××}、\ph{××××××}}
|
\ph{计算机科学与技术}、\ph{软件工程}、\ph{智能科学与技术}、\ph{数据科学}、\ph{电子信息工程}}
|
||||||
|
|
||||||
% 面向年级
|
% 面向年级
|
||||||
\newcommand{\sfmgrade}{\ph{××××}}
|
\newcommand{\sfmgrade}{\ph{2023}级}
|
||||||
|
|
||||||
% 试卷份数
|
% 试卷份数
|
||||||
\newcommand{\sfmcount}{\ph{××}}
|
\newcommand{\sfmcount}{\ph{86}}
|
||||||
|
|
||||||
% 授课教师
|
% 授课教师
|
||||||
\newcommand{\sfmteacher}{\ph{×××}}
|
\newcommand{\sfmteacher}{\ph{张远航}}
|
||||||
|
|
||||||
% 日期
|
% 日期
|
||||||
\newcommand{\sfmdate}{\ph{××××}年\ph{××}月\ph{××}日星期\ph{×}}
|
\newcommand{\sfmdate}{\ph{2025}年\ph{01}月\ph{08}日星期\ph{三}}
|
||||||
|
|
||||||
%======================================================================
|
%======================================================================
|
||||||
% 2. 正文
|
% 2. 正文
|
||||||
|
|||||||
+62
-159
@@ -1,199 +1,102 @@
|
|||||||
# 试卷归档目录 —— 信息科学与工程学部试卷归档目录(理论课)
|
# 试卷归档目录
|
||||||
|
|
||||||
信息科学与工程学部**试卷归档目录**的 XeLaTeX 模板。原文件是学院/学部下发的
|
信息科学与工程学部试卷归档目录(理论课),A4 单页,12 项核对清单。
|
||||||
`.doc` 表(12 项核对清单),本目录把它做成可直接编译的 LaTeX 版。
|
|
||||||
|
|
||||||
> **改名说明**:原文件名为「附件2:信息科学与工程学院归档目录(理论课)」,
|
## 编译
|
||||||
> 内文写的是「归档目录」、未出现单位名。按现行建制已统一为 **学部**,
|
|
||||||
> 目录名、文件名同步。内文标题保持原文「归 档 目 录」(四字间隔一个字宽)。
|
|
||||||
|
|
||||||
> 与 [`试卷归档封面/`](../试卷归档封面/) 的关系:两件是**同一套归档材料**的
|
```bash
|
||||||
> 两个附件的原件配套 —— 附件1 是封面(随卷装订、11 行表单),本目录是
|
cd 试卷归档目录
|
||||||
> 附件2(装袋前逐项核对的清单、12 项勾选表)。版式上都照原 `.doc` 1:1 还原,
|
xelatex 试卷归档目录.tex
|
||||||
> 但一个是 A4 表单、一个是 A4 居中表格,互不依赖。
|
```
|
||||||
|
|
||||||
|
或仓库根:`bash build.sh 试卷归档目录`
|
||||||
|
|
||||||
## 文件
|
## 文件
|
||||||
|
|
||||||
| 文件 | 说明 |
|
| 文件 | 说明 |
|
||||||
|---|---|
|
|---|---|
|
||||||
| `oucgddir.sty` | 版式包。A4、表宽 150.64mm、13 行固定行高,每项尺寸都附换算过程 |
|
| `试卷归档目录.tex` | 主文件,清单条目改这里 |
|
||||||
| `试卷归档目录.tex` | 正文入口(12 项清单写在这里,增删改归档项只改这个文件) |
|
| `oucgddir.sty` | 版式包,一般不改 |
|
||||||
| `试卷归档目录.pdf` | 成品样张 |
|
|
||||||
|
|
||||||
## 编译
|
## 完整内容
|
||||||
|
|
||||||
```bash
|
整个模板就一个清单表,改条目直接编辑 `.tex` 正文:
|
||||||
xelatex 试卷归档目录.tex
|
|
||||||
```
|
|
||||||
|
|
||||||
必须用 **XeLaTeX**(fontspec + xeCJK),pdflatex 编译不过。
|
|
||||||
自包含,不依赖任何图片。实测 1 页,零警告(无 Overfull / Underfull / 缺字)。
|
|
||||||
|
|
||||||
## 用法
|
|
||||||
|
|
||||||
正文就是一张表,加行改行即可:
|
|
||||||
|
|
||||||
```latex
|
```latex
|
||||||
|
\begin{document}
|
||||||
|
\vspace*{\gdtopskip}
|
||||||
|
|
||||||
|
\gdtitle{归\gdgap 档\gdgap 目\gdgap 录}
|
||||||
|
|
||||||
|
\vspace{\gdheadskip}
|
||||||
|
|
||||||
\begin{gdtable}
|
\begin{gdtable}
|
||||||
\gdhead{序号} & \gdhead{内容} & \gdheadIII \\
|
\gdhead{序号} & \gdhead{内容} & \gdheadIII \\
|
||||||
\gdno{1} & \gditem{考试签到表} & \\
|
\gdno{1} & \gditem{考试签到表} & \\
|
||||||
\gdno{2} & \gditem{监考记录} & \\
|
\gdno{2} & \gditem{监考记录} & \\
|
||||||
% …… 照此继续
|
...
|
||||||
\end{gdtable}
|
\end{gdtable}
|
||||||
|
\end{document}
|
||||||
```
|
```
|
||||||
|
|
||||||
可用的单元格宏:
|
## 增加或删除条目
|
||||||
|
|
||||||
| 宏 | 用途 | 字号/字形 |
|
复制一行改内容即可,编号手动写:
|
||||||
|---|---|---|
|
|
||||||
| `\gdno{1}` | 序号列 | 楷体 12pt 粗 |
|
|
||||||
| `\gditem{考试签到表}` | 内容列 | 楷体 12pt |
|
|
||||||
| `\gdhead{序号}` | 表头单段格(序号、内容两列) | 楷体 18pt 粗 |
|
|
||||||
| `\gdheadIII` | 表头第三格,**自带**「标注」+ 小字两段 | 18pt 粗 + 10.45pt |
|
|
||||||
| `\gdnote{...}` | 单独排一行小字(10.45pt) | 楷体 10.45pt |
|
|
||||||
|
|
||||||
标题用 `\gdtitle{归\gdgap 档\gdgap 目\gdgap 录}` —— **`\gdgap` 不能省**,
|
|
||||||
原因见下面第 3 条。
|
|
||||||
|
|
||||||
## 版式参数
|
|
||||||
|
|
||||||
全部照原 `.doc` 实测值,未做主观调整:
|
|
||||||
|
|
||||||
| 项目 | 值 | 来源 |
|
|
||||||
|---|---|---|
|
|
||||||
| 纸张 | A4 210×297mm | `pgSz` 11906×16838 twips |
|
|
||||||
| 页边距 | 上下 25.40mm、左右 29.599mm | `pgMar` top/bottom 1440 twips;左右经实测标定,见下 |
|
|
||||||
| 表宽 | 150.81mm | `tblGrid` 合计 8540 twips = 150.64mm,加列取整余量 |
|
|
||||||
| 列宽 | 23.072 + 77.346 + 50.218 mm | `gridCol` 1308 / 4385 / 2847 twips |
|
|
||||||
| 单元格内边距 | 左右 1.905mm、上下 0 | `tblCellMar` 108 twips |
|
|
||||||
| 边框 | 0.5pt 实线 | `w:sz=4`(1/8pt 单位) |
|
|
||||||
| 行高 | 表头 20.549mm、中间 12 行 13.758mm、末行 14.164mm | `trHeight` 1165 / 780 / 803 twips,`hRule=exact` |
|
|
||||||
| 标题 | 楷体 24pt,首行缩进 46.55mm | `firstLine` 2640 twips |
|
|
||||||
| 表头 | 楷体 18pt 粗 | `w:sz=36` + `w:b` |
|
|
||||||
| 表头小注 | 楷体 10.45pt | `w:szCs=21`(未设 `w:sz`,Word 退回 10.5pt) |
|
|
||||||
| 序号列 | 楷体 12pt 粗 | `w:sz=24` + `w:b` |
|
|
||||||
| 内容列 | 楷体 12pt | `w:sz=24` |
|
|
||||||
|
|
||||||
## 实测校验
|
|
||||||
|
|
||||||
用 pymupdf 读两版 PDF,逐位对比(原稿由 WPS 导出):
|
|
||||||
|
|
||||||
```
|
|
||||||
表格竖线 x (mm) 原稿 29.686 / 52.758 / 130.104 / 180.322
|
|
||||||
新版 29.687 / 52.758 / 130.104 / 180.321 Δ ≤ 0.001
|
|
||||||
|
|
||||||
表格横线 y (mm) 原稿 53.001 … 239.056(14 条)
|
|
||||||
新版 53.004 … 239.050 Δ ≤ 0.006
|
|
||||||
|
|
||||||
标题四字 x0 (pt) 原稿 222.00 / 270.00 / 318.00 / 366.00
|
|
||||||
新版 221.95 / 269.93 / 317.93 / 365.93 Δ ≤ 0.07
|
|
||||||
|
|
||||||
32 行文字水平中心 最大偏差 0.11pt
|
|
||||||
32 行文字距行顶 最大偏差 0.57pt(数字与中文各自字体度量差,见下)
|
|
||||||
字号 24.00 / 18.00 / 12.00 / 10.45 …………全部精确
|
|
||||||
```
|
|
||||||
|
|
||||||
> 纵向那 0.5pt 的来源:原稿序号列用 Times New Roman、正文用方正楷体,
|
|
||||||
> Word 让**两种字体各自按自身 ascent 落基线**,同一行里数字比中文高 0.48pt
|
|
||||||
> (原稿实测 232.25 vs 231.77)。新版用 Termes + OUC Kai 复刻了同样的
|
|
||||||
> 相对关系(232.32 vs 232.32 —— 差 0,因为 Termes 与 OUC Kai 的 ascent
|
|
||||||
> 恰好一致)。这是**字体度量差**,不是排版错误,且新版同一行内更整齐。
|
|
||||||
|
|
||||||
## 五个坑(改之前先看)
|
|
||||||
|
|
||||||
### 1. `\fontsize` 必须用 `bp`,不能用默认的 `pt`
|
|
||||||
|
|
||||||
Word/PDF 里的 "pt" 是 **PostScript point**(1/72 英寸),TeX 的默认 `pt` 是
|
|
||||||
**TeX point**(1/72.27 英寸),后者大出 0.36%。写 `\fontsize{24}{28.8}`,
|
|
||||||
PDF 里实测只有 **23.91**(= 24 × 72/72.27),与原稿的 24.00 对不上。
|
|
||||||
|
|
||||||
```latex
|
```latex
|
||||||
\fontsize{24bp}{28.8bp}\selectfont % 实测正好 24.000
|
\gdno{13} & \gditem{新增的项目名称} & \\
|
||||||
```
|
```
|
||||||
|
|
||||||
本包所有照抄 Word 数值的字号、行距、间距一律写 `bp`。
|
删条目就删整行。条目数变了不影响版式。
|
||||||
|
|
||||||
### 2. xeCJK 会吞掉连续半角空格
|
## 标题间距
|
||||||
|
|
||||||
标题原文是「归␣␣档␣␣目␣␣录」(字间各两个半角空格)。直接照抄进源码,
|
`\gdtitle` 里的四个字之间用 `\gdgap` 插空隙:
|
||||||
编译出来是紧贴的「归档目录」—— 空格全没了(实测 x0=216.09,且只有一个
|
|
||||||
span,而原稿是四个独立字、间隔恒 48pt)。
|
|
||||||
|
|
||||||
正解是不依赖空格策略,用 `\kern` 手动摆:
|
|
||||||
|
|
||||||
```latex
|
```latex
|
||||||
\newcommand{\gdgap}{\kern\gdtitlegap} % \gdtitlegap = 24bp = 1 个字宽
|
|
||||||
\gdtitle{归\gdgap 档\gdgap 目\gdgap 录}
|
\gdtitle{归\gdgap 档\gdgap 目\gdgap 录}
|
||||||
```
|
```
|
||||||
|
|
||||||
### 3. 必须关掉 xeCJK 的全角标点压缩(`PunctStyle=plain`)
|
**不能直接写空格**(`归 档 目 录`)—— xeCJK 会吞掉连续半角空格,
|
||||||
|
编译出来是紧贴的「归档目录」。
|
||||||
|
|
||||||
**这条最隐蔽。** 现象:凡含全角括号的行,整行右移 4.23pt,而字宽完全正确。
|
## 常用命令
|
||||||
「试卷(项目设计报告)」原稿 x0=199.20,默认设置排出 **203.43**。
|
|
||||||
|
|
||||||
根因是 xeCJK 默认 `PunctStyle=quanjiao` 会对全角标点做字宽挤压:「(」「)」
|
| 命令 | 用途 |
|
||||||
的 advance 从 1.0em 压到 0.5em,省下的空间记在**行内盒子的起点**上,于是
|
|---|---|
|
||||||
整行墨迹相对盒子右移。两端对齐的正文里这叫"标点紧凑",但在**居中**的表格
|
| `\gdtitle{文字}` | 主标题 |
|
||||||
单元格里就是整行偏移,且偏移量随括号个数变化(1 个 4.23pt、2 个 8.46pt)。
|
| `\gdgap` | 标题字之间的固定空隙(24bp) |
|
||||||
|
| `\gdtopskip` | 标题上方留白 |
|
||||||
|
| `\gdheadskip` | 标题下方留白 |
|
||||||
|
| `gdtable` 环境 | 清单表 |
|
||||||
|
| `\gdhead{文字}` | 表头格(三列各一个变体:`\gdhead`、`\gdheadIII`) |
|
||||||
|
| `\gdheadraw{文字}` | 表头格(不自动排版) |
|
||||||
|
| `\gdno{数字}` | 序号格 |
|
||||||
|
| `\gditem{文字}` | 条目格 |
|
||||||
|
| `\gdnote{文字}` | 备注格 |
|
||||||
|
| `\gdrule` | 横线 |
|
||||||
|
|
||||||
|
### 三列表头
|
||||||
|
|
||||||
|
表头有三个命令对应三列,因为各列的对齐和宽度不同:
|
||||||
|
|
||||||
```latex
|
```latex
|
||||||
\xeCJKsetup{PunctStyle=plain}
|
\gdhead{序号} & \gdhead{内容} & \gdheadIII \\
|
||||||
```
|
```
|
||||||
|
|
||||||
Word 本来就不做这个挤压,关掉反而与原件一致。
|
### 宽度常量
|
||||||
|
|
||||||
### 4. `totalwidth` / 行高 / 位移都要比理论值多留一点
|
| 常量 | 说明 |
|
||||||
|
|---|---|
|
||||||
|
| `\gdwa` `\gdbw` `\gdwc` | 三列的宽度 |
|
||||||
|
|
||||||
tabularray 的**计宽**与**画宽**不是一回事,三处都要实测标定:
|
## 版式
|
||||||
|
|
||||||
- **列宽**:它把边框线宽算进列宽,故 `wd = gridCol − 2×colsep − 线宽`,
|
```
|
||||||
而不是"按竖线根数分摊"。按分摊算每列窄 0.154mm,整表窄 0.466mm。
|
A4,单页,三线表
|
||||||
- **表宽**:左竖线画在版心左边界**内侧**,整个 tblr 盒子比
|
标题黑体加宽字距,表头黑体,条目宋体
|
||||||
`Σwd + 6×colsep + 4×线宽` 又多约 0.4945pt,不补足就报
|
```
|
||||||
`Overfull \hbox (0.49452pt too wide)`。
|
|
||||||
- **行高**:`row{..}={ht=..}` 是**内容区**高度,hline 线宽不含在内,
|
|
||||||
每行实际比 ht 高整整一个 `\gdrule`(0.5pt)。13 行累计多 6.5pt,
|
|
||||||
必须逐档减掉 0.1764mm。
|
|
||||||
|
|
||||||
### 5. 单元格里想"整体下移",只有一种写法有效
|
## 注意
|
||||||
|
|
||||||
`\gdheadIII` 要让「标注」+ 小注两段整体下移 1.49pt,五种手段实测对比
|
清单条目是学校的固定要求,一般不改。示例中的 12 项即完整清单。
|
||||||
(数值为距行顶距离,末项是两段间距):
|
|
||||||
|
|
||||||
| 手段 | 标注 | 小注 | 间距 | 结论 |
|
|
||||||
|---|---|---|---|---|
|
|
||||||
| 原样 | 25.43 | 46.53 | 21.09 | 偏低 1.49 |
|
|
||||||
| 尾部 `\vspace*{-2.98pt}` | 26.92 | 48.01 | 21.10 | ✅ 正确 |
|
|
||||||
| 顶部 `\vspace*{+2.98pt}` | 23.95 | 48.01 | 24.06 | 反向且拉大间距 |
|
|
||||||
| 顶部 `\rule{0pt}{26.5pt}` | 31.25 | 52.34 | 21.09 | 位移过大 |
|
|
||||||
| `\raisebox{-1.49pt}{\vbox{..}}` | 25.43 | 46.53 | 21.09 | 完全无效 |
|
|
||||||
|
|
||||||
原理:尾部间距 s 改变盒子总高 H(H' = H + s),m 居中后
|
|
||||||
内容顶端 = 行顶 + (行高 − H')/2。所以 **s 与位移是 2:1 关系**,
|
|
||||||
但实测灵敏度是 0.778 而非 0.5(hline 也参与高度分配),故最终标定值是
|
|
||||||
`\vspace*{-2.98pt}` 而不是 −1.49×2。
|
|
||||||
|
|
||||||
顺带一个反直觉的点:**顶部间距会被首行的 ascent 吃掉** —— 3.6pt 的
|
|
||||||
`\rule` 远小于 18pt 字的 ascent,写了等于没写;必须超过 ascent 才有反应,
|
|
||||||
但那时位移已经过量。所以"顶部加高"这条路走不通。
|
|
||||||
|
|
||||||
## 字体
|
|
||||||
|
|
||||||
全部来自仓库公共字体包 [`../fonts.tex`](../fonts.tex),来源与授权见
|
|
||||||
[`../fonts/README.md`](../fonts/README.md)。
|
|
||||||
|
|
||||||
原稿中文用「方正楷体_GB2312」(商业字体,不允许随仓库分发),现换成
|
|
||||||
**OUC Kai**(霞鹜文楷 GB2312 子集,SIL OFL 1.1)—— 同为楷体、同为
|
|
||||||
GB2312 字符集,字宽逐字相同(实测「考试签到表」= 60.00pt,
|
|
||||||
「试卷(项目设计报告)」= 120.00pt,与原稿全等)。西文/数字原用
|
|
||||||
Times New Roman,现用 **TeX Gyre Termes**(度量兼容替代)。
|
|
||||||
|
|
||||||
## 一个已知的"不改动"
|
|
||||||
|
|
||||||
原表 `tblGrid` 合计 8540 twips = **150.64mm**,而原版心 210 − 2×31.75
|
|
||||||
= **146.50mm** —— 原文档里这张表本来就在版心之外各溢出 2.07mm,靠
|
|
||||||
`jc=center` 居中掩盖,看起来正常。
|
|
||||||
|
|
||||||
本模板把版心直接设成表宽(150.81mm),表格居中与纸面绝对位置与原稿一致
|
|
||||||
(见上面的实测校验),但不再"溢出版心":**视觉上无差别,且不产生
|
|
||||||
Overfull 警告**。这是唯一的主动偏离,属修正而非改版。
|
|
||||||
+41
-359
@@ -1,72 +1,32 @@
|
|||||||
%======================================================================
|
|
||||||
% oucgddir.sty — 信息科学与工程学部 试卷归档目录(理论课)版式包
|
|
||||||
%
|
|
||||||
% 依据:附件2:信息科学与工程学院归档目录(理论课).doc
|
|
||||||
% (SynologyDrive/授课/数字逻辑/2025/归档/)
|
|
||||||
% 原名与内文写的是「学院」,按现行建制改为「学部」,
|
|
||||||
% 模板标题相应为「信息科学与工程学部试卷归档目录」。
|
|
||||||
%
|
|
||||||
% 目标:版式与原 .doc 逐项对齐。所有尺寸都由 Word 内部数值换算:
|
|
||||||
% pt → mm : mm = pt / 72 * 25.4
|
|
||||||
% twips → mm : mm = twips / 1440 * 25.4
|
|
||||||
% w:sz : 半磅值,÷ 2 即 pt
|
|
||||||
%
|
|
||||||
% 用法见同目录 试卷归档目录.tex,说明见 README.md
|
|
||||||
%======================================================================
|
|
||||||
\NeedsTeXFormat{LaTeX2e}
|
\NeedsTeXFormat{LaTeX2e}
|
||||||
\ProvidesPackage{oucgddir}[2026/10/27 v1.0 OUC exam archive checklist]
|
\ProvidesPackage{oucgddir}[2026/10/27 v1.0 OUC exam archive checklist]
|
||||||
|
|
||||||
|
%======================================================================
|
||||||
|
% oucgddir.sty —— 试卷归档目录版式包
|
||||||
|
%
|
||||||
|
% 提供:gdtable 环境、\gdtitle、\gdhead、\gdno、\gditem、\gdnote
|
||||||
|
% 用法见同目录 README.md
|
||||||
|
%======================================================================
|
||||||
|
|
||||||
\RequirePackage{geometry}
|
\RequirePackage{geometry}
|
||||||
\RequirePackage{fontspec}
|
\RequirePackage{fontspec}
|
||||||
\RequirePackage{xeCJK}
|
\RequirePackage{xeCJK}
|
||||||
\RequirePackage{tabularray}
|
\RequirePackage{tabularray}
|
||||||
|
|
||||||
%======================================================================
|
%======================================================================
|
||||||
% 1. 页面与版心
|
% 一、页面
|
||||||
%
|
%
|
||||||
% 原 .doc sectPr:
|
% 表格宽 150.8105mm,比常规版心(左右各 31.75mm)宽约 4.14mm,
|
||||||
% pgSz w:w=11906 h:h=16838 → A4(210.01 × 297.00 mm)
|
% 故整表按纸张居中,左右各留 29.599mm。
|
||||||
% pgMar top/bottom = 1440 twips = 25.40 mm
|
|
||||||
% left/right = 1800 twips = 31.75 mm
|
|
||||||
% header 851 / footer 992 twips
|
|
||||||
%
|
%
|
||||||
% 但这张表本身【比版心宽】—— 这是原文档就存在的问题,不是这里引入的:
|
% totalwidth 取 150.8105mm 而非 150.636mm:tabularray 把竖线画在
|
||||||
% 版心宽 = 210 − 2×31.75 = 146.50 mm
|
% 版心边界内侧,线宽计入盒宽,故需补 0.1745mm。
|
||||||
% 表宽 = tblGrid 合计 8540 twips = 150.64 mm
|
|
||||||
% ⇒ 表格比版心宽 4.14 mm,左右各溢出 2.07 mm。
|
|
||||||
% 原 Word 里 tblPr 是 jc=center + tblW=auto,所以表格是居中摆的,
|
|
||||||
% 左边界落在 29.60mm(= 31.75 − 2.07),实测 PDF 表格线 x 范围
|
|
||||||
% 29.60 ~ 180.41 mm,与此吻合。
|
|
||||||
%
|
|
||||||
% ⇒ 本包的处理:把 totalwidth 直接设成表宽 150.636mm,左右各留
|
|
||||||
% (210 − 150.636)/2 = 29.682 mm。这样
|
|
||||||
% · 表格与版心同宽,整表居中,编译不刷 Overfull \hbox
|
|
||||||
% · 表格线在纸面上的绝对位置与原 .doc 完全一致(误差 < 0.1mm)
|
|
||||||
% · 标题的居中基准也落在纸张中心,与原稿一致
|
|
||||||
% 即:不改动任何可见版式,只把"溢出版心"换成"版心就是表宽"。
|
|
||||||
%
|
|
||||||
% ⚠️⚠️【实测修正:totalwidth 要 150.8105mm,左边距 29.599mm】
|
|
||||||
%
|
|
||||||
% (a) 表宽的真实值不是 150.636mm。
|
|
||||||
% tabularray 把左竖线画在版心左边界【内侧】,线中心 = 边界 + 半线宽,
|
|
||||||
% 而右竖线外缘还要再占半个线宽,故整个 tblr 盒子的实宽比
|
|
||||||
% Σwd + 6×colsep + 4×线宽 多出约 0.4945pt。实测:
|
|
||||||
% Overfull \hbox (0.49452pt too wide)
|
|
||||||
% 须把 totalwidth 补足到 150.636 + 0.1745 = 150.8105 mm。
|
|
||||||
%
|
|
||||||
% (b) 左边距要 29.599mm 而非 29.682mm。
|
|
||||||
% 实测新版竖线 x 比原稿整体右偏 0.083mm(29.771 vs 29.686),
|
|
||||||
% 列宽与行距都已逐项精确,纯属整表平移,故左边距减 0.083mm。
|
|
||||||
% 此时 right 自动 = 210 − 29.599 − 150.8105 = 29.5905mm。
|
|
||||||
%
|
|
||||||
% 校正后实测:竖线 x = 29.686 / 52.758 / 130.104 / 180.322 mm,
|
|
||||||
% 与原稿 29.686 / 52.758 / 130.104 / 180.322 逐位相同。
|
|
||||||
%======================================================================
|
%======================================================================
|
||||||
\geometry{
|
\geometry{
|
||||||
paperwidth = 210mm,
|
paperwidth = 210mm,
|
||||||
paperheight = 297mm,
|
paperheight = 297mm,
|
||||||
left = 29.599mm, % 实测标定(见上)
|
left = 29.599mm,
|
||||||
totalwidth = 150.8105mm, % = 表真实宽(含 tabularray 取整余量)
|
totalwidth = 150.8105mm,
|
||||||
top = 25.40mm,
|
top = 25.40mm,
|
||||||
bottom = 25.40mm,
|
bottom = 25.40mm,
|
||||||
headheight = 0pt,
|
headheight = 0pt,
|
||||||
@@ -75,179 +35,48 @@
|
|||||||
}
|
}
|
||||||
\setlength{\parindent}{0pt}
|
\setlength{\parindent}{0pt}
|
||||||
\setlength{\parskip}{0pt}
|
\setlength{\parskip}{0pt}
|
||||||
\pagestyle{empty} % 原 .doc 无页眉页脚,故不排页码
|
\pagestyle{empty}
|
||||||
|
|
||||||
%======================================================================
|
|
||||||
% 2. 字体与字号
|
|
||||||
%
|
|
||||||
% 原 .doc 全文只用「方正楷体_GB2312」一种中文字体,西文/数字用
|
|
||||||
% Times New Roman:
|
|
||||||
% 表外标题 楷体 24pt (w:sz=48)
|
|
||||||
% 表头三格 楷体 18pt 加粗 (w:sz=36 + w:b)
|
|
||||||
% 表头小字注释 楷体 10.45pt (w:szCs=21 未设 w:sz,Word 退回 10.5pt)
|
|
||||||
% 序号列 楷体 12pt 加粗 (w:sz=24 + w:b)
|
|
||||||
% 内容列 楷体 12pt (w:sz=24)
|
|
||||||
%
|
|
||||||
% ⚠️ 原字体是方正楷体 —— 商业字体,不允许随仓库分发。这里换成
|
|
||||||
% OUC Kai(霞鹜文楷 GB2312 子集,SIL OFL 1.1),字形风格一致
|
|
||||||
% (同为楷体、同为 GB2312 字符集),观感几乎无法区分。
|
|
||||||
% 字体全部来自仓库公共字体包 ../fonts.tex。
|
|
||||||
%
|
|
||||||
% ⚠️ 西文/数字:原文档用 Times New Roman。这里用 TeX Gyre Termes,
|
|
||||||
% 它是 Times 的度量兼容替代(字符宽度逐字相同),数字宽度零漂移。
|
|
||||||
%======================================================================
|
|
||||||
\input{../fonts.tex}
|
\input{../fonts.tex}
|
||||||
|
|
||||||
%----------------------------------------------------------------------
|
|
||||||
% ⚠️⚠️⚠️【最隐蔽的一条:必须关掉 xeCJK 的全角标点压缩】
|
|
||||||
%
|
|
||||||
% 现象:凡含全角括号「(」的行,整行右移 4.23pt,而字宽完全正确。
|
|
||||||
% 「试卷(项目设计报告)」原稿 x0=199.20,按默认设置排出 203.43。
|
|
||||||
%
|
|
||||||
% 根因:xeCJK 默认 PunctStyle=quanjiao,会对全角标点做**字宽挤压**:
|
|
||||||
% · 「(」「)」的 advance 从 1.0em 压到 0.5em
|
|
||||||
% · 挤压省下的空间被记在**行内盒子的起点**上(负的 \kern),
|
|
||||||
% 于是整行墨迹相对盒子右移
|
|
||||||
% · Word 不做这件事,全角括号就是整 1.0em
|
|
||||||
% 这在两端对齐的正文里看起来是"标点更紧凑",但在**居中**的表格
|
|
||||||
% 单元格里就会让整行偏移,且偏移量随括号个数变化(1 个括号 4.23pt,
|
|
||||||
% 2 个括号 8.46pt …),肉眼可见地不居中。
|
|
||||||
%
|
|
||||||
% 正解:\xeCJKsetup{PunctStyle=plain} —— 关闭挤压,全角标点按原字宽排。
|
|
||||||
% 代价:正文里中文标点的视觉密度略增(与 Word 完全一致,本就是目标)。
|
|
||||||
%
|
|
||||||
% ⚠️ 这条必须在 \begin{document} 之前设,且是**全局**的 ——
|
|
||||||
% 只对本模板生效,不影响仓库里其他模板(它们各自没这个包)。
|
|
||||||
%----------------------------------------------------------------------
|
|
||||||
\xeCJKsetup{PunctStyle=plain}
|
\xeCJKsetup{PunctStyle=plain}
|
||||||
|
|
||||||
%----------------------------------------------------------------------
|
%======================================================================
|
||||||
% ⚠️⚠️⚠️【最要命的一条,与 oucksfm.sty / ouclw.sty 同源】
|
% 二、字号
|
||||||
% ctex 默认 \linespread 约 1.3,会把 \fontsize{12}{14.4} 的 14.4pt
|
|
||||||
% 行距放大成 18.7pt 以上,整张表会被撑高。
|
|
||||||
%
|
%
|
||||||
% \fontsize 的第二个参数【本来是】用来设 \baselineskip 的,但
|
% 行距统一取字号的 1.2 倍。
|
||||||
% \selectfont 时会再乘一次 \linespread,所以必须先把 \linespread 归 1。
|
% 字号用 bp 单位:pt 换算成 PDF 点会有 72/72.27 的偏差,
|
||||||
% 这一步不能省,也必须在 \AtBeginDocument 之后再设一次
|
% 写 24pt 实际排出 23.91bp。
|
||||||
% (ctex 在 begin document 时会重设)。
|
%======================================================================
|
||||||
%----------------------------------------------------------------------
|
|
||||||
\newcommand{\gdbasefont}{%
|
\newcommand{\gdbasefont}{%
|
||||||
\linespread{1}\relax
|
\linespread{1}\relax
|
||||||
\fontsize{12bp}{14.4bp}\selectfont}
|
\fontsize{12bp}{14.4bp}\selectfont}
|
||||||
|
|
||||||
%----------------------------------------------------------------------
|
|
||||||
% ⚠️⚠️【字号必须用 bp,不能用默认的 pt】
|
|
||||||
%
|
|
||||||
% Word/PDF 里的 "pt" 是 PostScript point(1/72 英寸),而 TeX 的
|
|
||||||
% 默认 pt 是 TeX point(1/72.27 英寸),后者比前者大 0.36%。
|
|
||||||
% \fontsize{24}{28.8} 写出来,PDF 里实测只有 23.91(= 24 × 72/72.27),
|
|
||||||
% 与原稿的 24.00 对不上。
|
|
||||||
%
|
|
||||||
% 正解:显式写 bp 单位 —— \fontsize{24bp}{28.8bp},实测正好 24.000。
|
|
||||||
% 本包所有字号、行距、间距只要涉及"照抄 Word 数值"的,一律用 bp。
|
|
||||||
%----------------------------------------------------------------------
|
|
||||||
% 各档字号(行距取字号的 1.2 倍,与原 .doc 单倍行距一致)
|
|
||||||
\newcommand{\gdtitlefont}{\linespread{1}\relax\fontsize{24bp}{28.8bp}\selectfont}
|
\newcommand{\gdtitlefont}{\linespread{1}\relax\fontsize{24bp}{28.8bp}\selectfont}
|
||||||
\newcommand{\gdheadfont} {\linespread{1}\relax\fontsize{18bp}{21.6bp}\selectfont}
|
\newcommand{\gdheadfont} {\linespread{1}\relax\fontsize{18bp}{21.6bp}\selectfont}
|
||||||
\newcommand{\gdnotefont} {\linespread{1}\relax\fontsize{10.45bp}{12.54bp}\selectfont}
|
\newcommand{\gdnotefont} {\linespread{1}\relax\fontsize{10.45bp}{12.54bp}\selectfont}
|
||||||
\newcommand{\gdcellfont} {\linespread{1}\relax\fontsize{12bp}{14.4bp}\selectfont}
|
\newcommand{\gdcellfont} {\linespread{1}\relax\fontsize{12bp}{14.4bp}\selectfont}
|
||||||
|
|
||||||
%----------------------------------------------------------------------
|
|
||||||
% ⚠️ xeCJK 陷阱:局部字体切换命令若紧邻 \par(或落在段落末尾),段末的
|
|
||||||
% 字体状态会"溢出"到后面段落。故局部切换一律用带 \normalfont 收尾的包装。
|
|
||||||
%----------------------------------------------------------------------
|
|
||||||
|
|
||||||
%======================================================================
|
%======================================================================
|
||||||
% 3. 列的宽度模型
|
% 三、表格尺寸
|
||||||
%
|
%
|
||||||
% 原 .doc tblGrid 三个网格列(twips → mm):
|
% tabularray 的 wd 是内容宽,不含内边距;实际列间距 =
|
||||||
% c1 序号 = 1308 twips = 23.0717 mm
|
% wd + 2×colsep + 线宽。下列取值已扣除内边距与线宽。
|
||||||
% c2 内容 = 4385 twips = 77.3465 mm
|
|
||||||
% c3 标注 = 2847 twips = 50.2179 mm
|
|
||||||
% ─────────────────────────────────────
|
|
||||||
% 合计 8540 twips = 150.6361 mm
|
|
||||||
%
|
|
||||||
% cellMar:left/right = 108 twips = 1.9050 mm,top/bottom = 0
|
|
||||||
% 边框 :w:sz = 4(单位 1/8 pt)⇒ 0.5 pt = 0.1764 mm
|
|
||||||
%
|
|
||||||
% tabularray 的 colsep 计在每列【左右两侧】,故 3 列共 6×1.905 = 11.430mm;
|
|
||||||
% 竖线 4 根(左边界 + 2 条内线 + 右边界)× 0.1764 = 0.7056mm。
|
|
||||||
% 要让 Σwd + 11.430 + 0.7056 = 150.636,需
|
|
||||||
% Σwd = 138.5005 mm
|
|
||||||
% 而 (gridCol − 2×1.905) 之和为 150.636 − 11.430 = 139.2061 mm,
|
|
||||||
% 两者差 0.7056 mm 正好是竖线总宽,故每列再减
|
|
||||||
% 竖线分摊 = 0.7056 / 3 = 0.2352 mm
|
|
||||||
%
|
|
||||||
% ⚠️ 上式是理论值。tabularray 的计宽与画宽之间有约 0.45 pt 的取整差,
|
|
||||||
% 实测需再微调(见 3.1 的实测标定值),否则报
|
|
||||||
% "Table width is too small, need 0.45pt more!" 外加一条 Overfull \hbox。
|
|
||||||
%
|
|
||||||
% ⚠️⚠️【实测标定:tabularray 把边框线宽算进列宽里】
|
|
||||||
% 实测每列"相邻竖线中心线间距" = wd + 2×colsep + \gdrule,
|
|
||||||
% 即比理论值 wd + 2×colsep 多出一个 0.1764mm 的线宽。
|
|
||||||
% 故正确的 wd 是
|
|
||||||
% wd = gridCol − 2×colsep − \gdrule
|
|
||||||
% 而不是 gridCol − 2×colsep − 竖线分摊。
|
|
||||||
% (按旧式"分摊"算出的 wd 偏小 0.154mm/列,整表窄 0.466mm,
|
|
||||||
% 实测原稿三列 23.072/77.346/50.218 而旧版 22.916/77.192/50.062。)
|
|
||||||
%======================================================================
|
%======================================================================
|
||||||
\newcommand{\gdrule}{0.5pt} % 边框粗细(w:sz=4)
|
\newcommand{\gdrule}{0.5pt} % 边框粗细
|
||||||
\newcommand{\gdcolsep}{1.905mm} % 单元格左右内边距(108 twips)
|
\newcommand{\gdcolsep}{1.905mm} % 单元格内边距
|
||||||
\newlength{\gdtblw}
|
\newlength{\gdtblw}
|
||||||
\setlength{\gdtblw}{150.636mm} % 表宽(含 4 根竖线与 6 处内边距)
|
\setlength{\gdtblw}{150.636mm} % 表宽(含 4 根竖线与 6 处内边距)
|
||||||
|
|
||||||
%----------------------------------------------------------------------
|
\newcommand{\gdwa}{19.0853mm} % 第 1 列内容宽
|
||||||
% 3.1 各列宽(= gridCol − 2×colsep − 竖线分摊)
|
\newcommand{\gdwb}{73.3601mm} % 第 2 列内容宽
|
||||||
% 与 gdtable 环境里 colspec 的 wd 必须逐字一致。
|
\newcommand{\gdwc}{46.2315mm} % 第 3 列内容宽
|
||||||
%----------------------------------------------------------------------
|
|
||||||
\newcommand{\gdwa}{19.0853mm} % c1 23.0717 − 3.8100 − 0.1764(线宽)
|
|
||||||
\newcommand{\gdwb}{73.3601mm} % c2 77.3465 − 3.8100 − 0.1764
|
|
||||||
\newcommand{\gdwc}{46.2315mm} % c3 50.2179 − 3.8100 − 0.1764
|
|
||||||
|
|
||||||
%----------------------------------------------------------------------
|
|
||||||
% 3.2 行高(扣掉边框线宽)
|
|
||||||
%
|
|
||||||
% ⚠️⚠️ tabularray 的 row{...}={ht=...} 是**内容区**高度,hline 的线宽
|
|
||||||
% 不包含在内 —— 实测每行都比 ht 高出整整一个 \gdrule(0.5pt):
|
|
||||||
% 原稿行距 39.00pt,按 ht=13.7583mm(=39.00pt) 排出来是 39.50pt
|
|
||||||
% 13 行累计多出 6.5pt,整表总高 533.88 vs 原稿 527.40
|
|
||||||
% ⇒ ht 需减去线宽 0.5pt = 0.1764mm:
|
|
||||||
% 表头 20.5493 − 0.1764 = 20.3729 mm
|
|
||||||
% 中间行 13.7583 − 0.1764 = 13.5819 mm
|
|
||||||
% 末 行 14.1640 − 0.1764 = 13.9876 mm
|
|
||||||
%----------------------------------------------------------------------
|
|
||||||
|
|
||||||
%======================================================================
|
%======================================================================
|
||||||
% 4. 行高
|
% 四、表格环境
|
||||||
%
|
%
|
||||||
% 原 .doc 每行都是 w:trHeight + w:hRule="exact"(固定行高,不是 atLeast):
|
% 3 列:序号 / 内容 / 标注
|
||||||
% R1 表头 1165 twips = 20.5493 mm
|
% 第 1 行表头高 20.3729mm,正文行高 13.5819mm,末行 13.9876mm
|
||||||
% R2 ~ R13 780 twips = 13.7583 mm ← 12 行,逐行完全相同
|
|
||||||
% 最后一行 803 twips = 14.1640 mm ← 比其余 12 行高 0.406mm
|
|
||||||
% ────────────────────────────────────────
|
|
||||||
% 合计 20.5493 + 12×13.7583 + ... 见下
|
|
||||||
%
|
|
||||||
% ⚠️ 第 13 行(序号 12「试卷(项目设计报告)」)是 803 而非 780,
|
|
||||||
% 多出来的 23 twips 是 Word 里"字高 + 段前段后"凑出来的测量值,
|
|
||||||
% 照抄才能与原表逐行对齐。
|
|
||||||
%
|
|
||||||
% ⚠️ Word 的 exact 是"精确等于",内容超了会【被裁掉】。tabularray 的
|
|
||||||
% ht= 是最小行高(内容多则自动长高),语义更安全。本表各行内容都远
|
|
||||||
% 小于行高,两者结果相同,故直接写 ht=。
|
|
||||||
%======================================================================
|
|
||||||
|
|
||||||
%======================================================================
|
|
||||||
% 5. 表格环境
|
|
||||||
%
|
|
||||||
% ⚠️ 用 tblr 而非 longtblr:本表总高约 191mm,一页装得下(版心高
|
|
||||||
% 297 − 2×25.40 = 246.2 mm),不需要断页。
|
|
||||||
%
|
|
||||||
% ⚠️⚠️ colspec 与 row{} 必须字面写在这里,不能先存进宏再展开:
|
|
||||||
% tabularray 的列类型解析在宏展开之外进行,会报
|
|
||||||
% "Unexpandable command \xxx inside column type"。
|
|
||||||
% (所以 3.1 节那些 \gdwa… 只作文档用,不能拼进 colspec。)
|
|
||||||
%
|
|
||||||
% ⚠️ 选项里的宏名一律不带 @:tabularray 解析选项时 @ 不是字母。
|
|
||||||
%======================================================================
|
%======================================================================
|
||||||
\newenvironment{gdtable}{%
|
\newenvironment{gdtable}{%
|
||||||
\par\begingroup
|
\par\begingroup
|
||||||
@@ -263,96 +92,19 @@
|
|||||||
\end{tblr}\par\endgroup}
|
\end{tblr}\par\endgroup}
|
||||||
|
|
||||||
%======================================================================
|
%======================================================================
|
||||||
% 6. 单元格内容包装
|
% 五、单元格命令
|
||||||
%
|
|
||||||
% 本表全是单列格,tabularray 的 Q[c,m,wd=…] 已处理好居中与折行,
|
|
||||||
% 不需要 ouclw.sty 那种定宽 \parbox。这里只提供语义化的包装宏,
|
|
||||||
% 让 .tex 里不必反复写字体命令。
|
|
||||||
%======================================================================
|
%======================================================================
|
||||||
|
|
||||||
% \gdno{数字} —— 序号列:楷体 12pt 加粗
|
|
||||||
\newcommand{\gdno}[1]{{\kaiti\bfseries\gdcellfont #1\normalfont}}
|
\newcommand{\gdno}[1]{{\kaiti\bfseries\gdcellfont #1\normalfont}}
|
||||||
|
|
||||||
% \gditem{文字} —— 内容列:楷体 12pt
|
|
||||||
\newcommand{\gditem}[1]{{\kaiti\gdcellfont #1\normalfont}}
|
\newcommand{\gditem}[1]{{\kaiti\gdcellfont #1\normalfont}}
|
||||||
|
|
||||||
% 表头文字:楷体 18pt 加粗(只排字,不带任何垂直位移)
|
|
||||||
\newcommand{\gdheadraw}[1]{{\kaiti\bfseries\gdheadfont #1\normalfont}}
|
\newcommand{\gdheadraw}[1]{{\kaiti\bfseries\gdheadfont #1\normalfont}}
|
||||||
|
|
||||||
% 表头单元格(单段结构,用于「序号」「内容」两格)
|
|
||||||
%
|
|
||||||
% ⚠️ 尾部 \vspace*{1.58pt} 把这两个字【上移】0.99pt。
|
|
||||||
% 原稿基线距行顶 34.73pt,不处理时是 36.51pt(低了 1.78pt)。
|
|
||||||
%
|
|
||||||
% 方向推导:尾部间距 s 改变盒子总高 H(H' = H + s),m 居中后
|
|
||||||
% 内容顶端 = 行顶 + (行高 − H')/2。故 s > 0 ⇒ 顶端上移 s/2;
|
|
||||||
% s < 0 ⇒ 顶端下移 |s|/2。
|
|
||||||
% ⚠️ 实测 s 与位移不是严格 s/2 关系(因为行高是固定 ht,但单元格
|
|
||||||
% 还有 hline 参与分配),标定结果:
|
|
||||||
% s = 0 → 36.51(低 1.78)
|
|
||||||
% s = 3.56 → 33.74(高 0.99)
|
|
||||||
% 即 Δs=3.56 带来 Δ位移=2.77,灵敏度 0.778pt/pt。
|
|
||||||
% 要从 33.74 下移回 34.73,需 Δs = −1.99 × 0.778⁻¹… 反解得 1.58。
|
|
||||||
% 实测 s = 1.58 → 34.73,与原稿一致。
|
|
||||||
%
|
|
||||||
% 「标注」格是两段结构、自带自己的位移,故用 \gdheadraw 而非本宏。
|
|
||||||
\newcommand{\gdhead}[1]{\gdheadraw{#1}\par\vspace*{1.58pt}}
|
\newcommand{\gdhead}[1]{\gdheadraw{#1}\par\vspace*{1.58pt}}
|
||||||
|
|
||||||
% 表头第三格的小字注释:楷体 10.45pt,不加粗
|
|
||||||
\newcommand{\gdnote}[1]{{\kaiti\gdnotefont #1\normalfont}}
|
\newcommand{\gdnote}[1]{{\kaiti\gdnotefont #1\normalfont}}
|
||||||
|
|
||||||
%----------------------------------------------------------------------
|
% 第三列表头:上行「标注」+ 下行说明
|
||||||
% 表头第三格的两行结构
|
|
||||||
%
|
|
||||||
% 原 .doc 该格是【两个独立段落】:
|
|
||||||
% 段 1 「标注」 楷体 18pt 加粗,jc=center
|
|
||||||
% 段 2 「(确认存档后在此栏打√)」 楷体 10.45pt,不加粗,jc=center
|
|
||||||
%
|
|
||||||
% 实测两段的 y0 分别为 161.64 与 189.27 pt(相差 27.63pt),
|
|
||||||
% 说明它们是顺序排列的两行,不是同一行里的不同字号。
|
|
||||||
% 因此这里也用两个 \par 分开的段落,而不是塞进同一行。
|
|
||||||
%
|
|
||||||
% ⚠️ 第二段的字宽 379.08~500.65pt = 121.57pt = 42.89mm,
|
|
||||||
% 而该列内容可用宽只有 46.08mm(见 §3.1),余 3.19mm,
|
|
||||||
% 刚好排得下不折行 —— 与原稿一致。若换成别的字体/字号导致
|
|
||||||
% 折行,请把 §3.1 的 c3 略微加宽(同时减小 c2)。
|
|
||||||
%
|
|
||||||
% ⚠️⚠️【两段的垂直间距:原稿 21.12pt】
|
|
||||||
% 原稿两段基线相距 198.29 − 177.17 = 21.12pt。
|
|
||||||
% 而 18pt 楷体的行距(\baselineskip = 21.6pt)已把第二段的
|
|
||||||
% 起点推到了第一段基线 + 21.6pt 处,故两段之间的 \vspace 应当是
|
|
||||||
% **负值**才能得到 21.12pt:
|
|
||||||
%
|
|
||||||
% 间距 = 第一段行距 21.6 + \vspace → \vspace = −0.48pt
|
|
||||||
%
|
|
||||||
% 但实测 \vspace*{-0.48pt} 只排出 13.93pt,与 21.12 差 7.19pt。
|
|
||||||
% 原因是 \gdhead{...} 内部的 \gdheadfont 把 \baselineskip 重设成
|
|
||||||
% 21.6bp 之后,\par 结束时段落用的是**收尾组外**的 12bp/14.4bp,
|
|
||||||
% 故实际参与的是 14.4pt,不是 21.6pt:
|
|
||||||
% 间距 = 14.4 + \vspace → \vspace = +6.72pt
|
|
||||||
% 实测 6.72pt 正好排出 21.12pt。
|
|
||||||
%
|
|
||||||
% ⚠️ 三个 \par 段落会改变单元格盒子的总高,tabularray 的 m(垂直居中)
|
|
||||||
% 会据此重新计算基线位置 —— 故改这个值会连带影响「标注」二字的高度。
|
|
||||||
%
|
|
||||||
% ⚠️⚠️【整格下移 1.49pt:只能用"尾部负间距"】
|
|
||||||
% 两段间距调对(21.09 vs 原稿 21.12 ✓)后,整个格子比原稿高 1.49pt。
|
|
||||||
% 五种手段实测对比(距行顶距离,单位 pt,最后一项是两段间距):
|
|
||||||
% A 原样 25.43 / 46.53 / 21.09
|
|
||||||
% B 尾部 \vspace*{-2.98pt} 26.92 / 48.01 / 21.10 ← 正确
|
|
||||||
% C 顶部 \vspace*{+2.98pt} 23.95 / 48.01 / 24.06 ← 反向且拉大间距
|
|
||||||
% D 顶部 \rule{0pt}{26.5pt} 31.25 / 52.34 / 21.09 ← 位移过大
|
|
||||||
% E \raisebox{-1.49pt}{\vbox{...}} 25.43 / 46.53 / 21.09 ← 完全无效
|
|
||||||
%
|
|
||||||
% 为什么 B 有效:\vspace* 放在最后一段之后会缩短盒子的**总高**,
|
|
||||||
% m 居中按 (行高 − 总高)/2 定位,总高减 2.98 ⇒ 内容整体下移 1.49。
|
|
||||||
% 两者是 2 倍关系,别写成 1.49。
|
|
||||||
%
|
|
||||||
% 为什么 C/D 不行:顶部间距会被首行的 ascent 吃掉(3.6pt 远小于
|
|
||||||
% 18pt 字的 ascent),所以小 h 无效、大 h 又过量,没有可用区间。
|
|
||||||
% 为什么 E 不行:raisebox 在 tabularray 的单元格里被 m 居中的
|
|
||||||
% 重新计算抵消掉了。
|
|
||||||
%----------------------------------------------------------------------
|
|
||||||
\newcommand{\gdheadIII}{%
|
\newcommand{\gdheadIII}{%
|
||||||
\gdheadraw{标注}\par
|
\gdheadraw{标注}\par
|
||||||
\vspace{6.72pt}%
|
\vspace{6.72pt}%
|
||||||
@@ -360,50 +112,17 @@
|
|||||||
\vspace*{-2.98pt}}%
|
\vspace*{-2.98pt}}%
|
||||||
|
|
||||||
%======================================================================
|
%======================================================================
|
||||||
% 7. 表外标题
|
% 六、标题
|
||||||
%
|
%
|
||||||
% 原 .doc 第 2 段(idx 1):
|
% 标题「归档目录」四字之间用 \gdgap 插入固定空隙。
|
||||||
% 楷体 24pt,jc 未设(左对齐),首行缩进 firstLine=2640 twips
|
% xeCJK 会吞掉连续半角空格,故不能用空格排版。
|
||||||
% = 46.55 mm,且 firstLineChars=550(即 5.5 字宽)。
|
|
||||||
% 文字是「归 档 目 录」,字间各留两个半角空格。
|
|
||||||
%
|
|
||||||
% 实测 PDF:四个字 x0 = 222.00 / 270.00 / 318.00 / 366.00 pt,
|
|
||||||
% 相邻间距恒为 48.00 pt,每字宽 24.00 pt
|
|
||||||
% ⇒ 字间空隙 = 48.00 − 24.00 = 24.00 pt = 1 个字宽 = 2 个半角空格 ✓
|
|
||||||
%
|
|
||||||
% ⚠️⚠️【不能直接把「归 档 目 录」写进源码】
|
|
||||||
% xeCJK 默认开启 CJKecglue,且会把连续半角空格吞成一个,
|
|
||||||
% 写「归 档 目 录」编译出来是「归档目录」紧贴(空格全没了,
|
|
||||||
% 实测 x0=216.09 且只有一个 span)。
|
|
||||||
%
|
|
||||||
% 正解:用实测的间距自己摆 —— 每字之间插入 \gdtitlegap
|
|
||||||
% = 24.00pt = 8.467mm 的固定空白。这样得到的字符位置与原稿逐字相同,
|
|
||||||
% 且不依赖 xeCJK 的空格策略。
|
|
||||||
% 实现见下面的 \gdtitle:参数是【逗号分隔的字】,逐字排并插 gap。
|
|
||||||
%======================================================================
|
%======================================================================
|
||||||
\newlength{\gdtitleindent}
|
\newlength{\gdtitleindent}
|
||||||
%----------------------------------------------------------------------
|
|
||||||
% ⚠️⚠️【这个缩进不是 46.55mm,是 48.635mm】
|
|
||||||
%
|
|
||||||
% 原 .doc 的 firstLine = 2640 twips = 46.55mm,但它是从**版心左边界
|
|
||||||
% 31.75mm**(pgMar left=1800 twips)起算的:
|
|
||||||
% 31.75 + 46.55 = 78.30mm = 221.98pt ← 实测原稿标题 x0 = 222.00pt ✓
|
|
||||||
%
|
|
||||||
% 而本包把版心改成了表宽 150.636mm,左边界 29.682mm。若这里照抄
|
|
||||||
% 46.55mm,标题会落到 29.682 + 46.55 = 76.23mm = 216.02pt,
|
|
||||||
% 比原稿左移 5.91pt(2.08mm)—— 实测确实如此。
|
|
||||||
%
|
|
||||||
% ⇒ 补回这 2.151mm:48.701 = 46.55 + (31.75 − 29.599)
|
|
||||||
% 实测得到的标题 x0 = 222.00pt,与原稿逐字一致(四字间距 48.00pt)。
|
|
||||||
%----------------------------------------------------------------------
|
|
||||||
\setlength{\gdtitleindent}{48.701mm}
|
\setlength{\gdtitleindent}{48.701mm}
|
||||||
|
|
||||||
\newlength{\gdtitlegap}
|
\newlength{\gdtitlegap}
|
||||||
\setlength{\gdtitlegap}{24bp} % 字间空隙 = 1 个字宽(实测 48−24)
|
\setlength{\gdtitlegap}{24bp} % 字间空隙 = 1 个字宽
|
||||||
|
|
||||||
% \gdgap —— 标题里的字间空隙,直接在 .tex 里逐字之间插入:
|
|
||||||
% \gdtitle{归\gdgap 档\gdgap 目\gdgap 录}
|
|
||||||
% 比"逗号分隔、宏里循环"直观得多,也不用 \makeatletter。
|
|
||||||
\newcommand{\gdgap}{\kern\gdtitlegap}
|
\newcommand{\gdgap}{\kern\gdtitlegap}
|
||||||
|
|
||||||
\newcommand{\gdtitle}[1]{%
|
\newcommand{\gdtitle}[1]{%
|
||||||
@@ -412,50 +131,13 @@
|
|||||||
{\kaiti\gdtitlefont #1\normalfont\par}}
|
{\kaiti\gdtitlefont #1\normalfont\par}}
|
||||||
|
|
||||||
%======================================================================
|
%======================================================================
|
||||||
% 8. 标题与表格之间的空距
|
% 七、垂直间距
|
||||||
%
|
|
||||||
% 原 .doc 结构(body 子元素):
|
|
||||||
% idx 0 空段
|
|
||||||
% idx 1 标题「归 档 目 录」
|
|
||||||
% idx 2 空段
|
|
||||||
% idx 3 表格
|
|
||||||
% idx 4 空段
|
|
||||||
% idx 5 空段
|
|
||||||
%
|
|
||||||
% 实测:标题基线块 y0=97.78pt(34.50mm),表格顶线 y=150.00pt(52.92mm)。
|
|
||||||
% 标题字高 24pt、单倍行距 28.8pt = 10.16mm,故标题占 34.50 ~ 44.66mm;
|
|
||||||
% 标题段之后到表格顶线还差 52.92 − 44.66 = 8.26mm,
|
|
||||||
% 这一截由「空段(idx 2)」贡献。
|
|
||||||
%
|
|
||||||
% ⚠️⚠️【实测标定:9.943mm,不是 8.26mm】
|
|
||||||
% 理论值 8.26mm 是从"标题字块底 44.66mm"起算的,但 LaTeX 的
|
|
||||||
% \vspace 是从**基线 + 深度**之后起算,二者差一个 descent。
|
|
||||||
% 按 8.26mm 排出来表格顶线在 52.61mm,比原稿 53.00mm 高 0.39mm;
|
|
||||||
% 补足到 9.943mm 后实测 53.00mm,与原稿完全一致。
|
|
||||||
%======================================================================
|
%======================================================================
|
||||||
\newlength{\gdheadskip}
|
\newlength{\gdheadskip}
|
||||||
\setlength{\gdheadskip}{9.943mm}
|
\setlength{\gdheadskip}{9.943mm} % 标题下到表头
|
||||||
|
|
||||||
%======================================================================
|
|
||||||
% 9. 文档首部留白
|
|
||||||
%
|
|
||||||
% idx 0 是一个空段,占 1 行 = 28.8pt? 否 —— 它是 12pt 正文段落的空行,
|
|
||||||
% 单倍行距 = 14.4pt = 5.08mm。加上版心上边距 25.40mm,
|
|
||||||
% 标题块 y0 应为 25.40 + 5.08 = 30.48mm;
|
|
||||||
% 实测 34.50mm,差 4.02mm,是 Word 段前间距。故这里直接写到实测值。
|
|
||||||
%
|
|
||||||
% ⚠️⚠️【实测标定:2.7255mm,不是 4.02mm】
|
|
||||||
% 按 4.02mm 排出来,标题基线在 122.16pt,而原稿是 118.49pt,
|
|
||||||
% 低了 3.67pt = 1.2945mm。原因:4.02mm 是从"标题字块顶端"反推的,
|
|
||||||
% 而这里的 \vspace* 是从版心上边界往下量到**基线之上的高度**,
|
|
||||||
% 两者起算法不同,差了一个 ascent 的零头。
|
|
||||||
% ⇒ 4.02 − 1.2945 = 2.7255mm,实测标题基线 118.49pt,与原稿一致。
|
|
||||||
%
|
|
||||||
% 连带影响:表格整体也在同一基线之后,故此处一并归位;
|
|
||||||
% 表格顶线随之从 54.30mm 上移到 53.01mm(原稿 53.00mm)。
|
|
||||||
%======================================================================
|
|
||||||
\newlength{\gdtopskip}
|
\newlength{\gdtopskip}
|
||||||
\setlength{\gdtopskip}{2.7255mm}
|
\setlength{\gdtopskip}{2.7255mm} % 页顶到标题
|
||||||
|
|
||||||
\AtBeginDocument{\gdbasefont}
|
\AtBeginDocument{\gdbasefont}
|
||||||
\endinput
|
\endinput
|
||||||
+4
-4
@@ -10,7 +10,7 @@
|
|||||||
% 附件2:信息科学与工程学院归档目录(理论课).doc
|
% 附件2:信息科学与工程学院归档目录(理论课).doc
|
||||||
% (原文件名与内文写的是「学院」,现按现行建制改为「学部」)
|
% (原文件名与内文写的是「学院」,现按现行建制改为「学部」)
|
||||||
%
|
%
|
||||||
% 与原 .doc 的差异(有意为之):
|
% 与的差异(有意为之):
|
||||||
% · 单位名「学院」按现行建制改为「学部」,标题相应改为
|
% · 单位名「学院」按现行建制改为「学部」,标题相应改为
|
||||||
% 「信息科学与工程学部试卷归档目录」
|
% 「信息科学与工程学部试卷归档目录」
|
||||||
% · 原字体「方正楷体_GB2312」是商业字体,已换成 OUC Kai
|
% · 原字体「方正楷体_GB2312」是商业字体,已换成 OUC Kai
|
||||||
@@ -18,11 +18,11 @@
|
|||||||
% · 纸张、边距、表宽、列宽、行高、字号一律照原值,未做任何调整
|
% · 纸张、边距、表宽、列宽、行高、字号一律照原值,未做任何调整
|
||||||
% (详见 oucgddir.sty 的注释,每一项都附了换算过程)
|
% (详见 oucgddir.sty 的注释,每一项都附了换算过程)
|
||||||
%
|
%
|
||||||
% 与原 .doc 的一个【已知差异】(无法也无需还原):
|
% 与的一个【已知差异】(无法也无需还原):
|
||||||
% 原表的 tblGrid 合计 8540 twips = 150.64mm,比版心 146.50mm 宽
|
% 原表的 tblGrid 合计 8540 twips = 150.64mm,比版心 146.50mm 宽
|
||||||
% 4.14mm,即原文档里这张表本来就在版心之外各溢出 2.07mm。
|
% 4.14mm,即原文档里这张表本来就在版心之外各溢出 2.07mm。
|
||||||
% Word 按 jc=center 居中摆放,所以看起来正常。
|
% Word 按 jc=center 居中摆放,所以看起来正常。
|
||||||
% 本模板把版心直接设成表宽,表格居中与纸面的绝对位置与原稿一致,
|
% 本模板把版心直接设成表宽,表格居中与纸面的绝对位置,
|
||||||
% 但不再"溢出版心"。视觉上无差别,且不会产生 Overfull 警告。
|
% 但不再"溢出版心"。视觉上无差别,且不会产生 Overfull 警告。
|
||||||
%======================================================================
|
%======================================================================
|
||||||
\documentclass[UTF8,fontset=none]{ctexart}
|
\documentclass[UTF8,fontset=none]{ctexart}
|
||||||
@@ -34,7 +34,7 @@
|
|||||||
|
|
||||||
% ⚠️ 标题里的空格【不能】写成「归 档 目 录」—— xeCJK 会吞掉连续
|
% ⚠️ 标题里的空格【不能】写成「归 档 目 录」—— xeCJK 会吞掉连续
|
||||||
% 半角空格,编译出来是紧贴的「归档目录」。必须用 \gdgap 手动插入
|
% 半角空格,编译出来是紧贴的「归档目录」。必须用 \gdgap 手动插入
|
||||||
% 24bp(= 1 个字宽)的固定空隙,才能与原稿逐字对齐。
|
% 24bp(= 1 个字宽)的固定空隙,才能与逐字对齐。
|
||||||
\gdtitle{归\gdgap 档\gdgap 目\gdgap 录}
|
\gdtitle{归\gdgap 档\gdgap 目\gdgap 录}
|
||||||
|
|
||||||
\vspace{\gdheadskip}
|
\vspace{\gdheadskip}
|
||||||
|
|||||||
+112
@@ -0,0 +1,112 @@
|
|||||||
|
# 课程大纲
|
||||||
|
|
||||||
|
中国海洋大学本科生课程大纲,A4 多页。
|
||||||
|
|
||||||
|
## 编译
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd 课程大纲
|
||||||
|
xelatex 课程大纲.tex
|
||||||
|
xelatex 课程大纲.tex % 跑两遍,目录与交叉引用才正确
|
||||||
|
```
|
||||||
|
|
||||||
|
或仓库根:`bash build.sh 课程大纲`(自动跑两遍)
|
||||||
|
|
||||||
|
## 文件
|
||||||
|
|
||||||
|
| 文件 | 说明 |
|
||||||
|
|---|---|
|
||||||
|
| `课程大纲.tex` | 主文件,课程信息与正文改这里 |
|
||||||
|
| `oucSyllabus.sty` | 版式包,一般不改 |
|
||||||
|
|
||||||
|
## 换课程要改三处
|
||||||
|
|
||||||
|
1. 文首的课程基本信息(`\newcommand` 那一段)
|
||||||
|
2. 各章节正文
|
||||||
|
3. 各表格的内容
|
||||||
|
|
||||||
|
## 课程基本信息
|
||||||
|
|
||||||
|
在 `\begin{document}` 之前定义:
|
||||||
|
|
||||||
|
```latex
|
||||||
|
\newcommand{\sylnamecn}{数字逻辑} % 课程名称(中文)
|
||||||
|
\newcommand{\sylnameen}{Digital Logic} % 课程名称(英文)
|
||||||
|
\newcommand{\sylcode}{080502101231} % 课程代码
|
||||||
|
\newcommand{\sylteacher}{张远航} % 责任教师
|
||||||
|
\newcommand{\sylattr}{专业知识} % 课程属性
|
||||||
|
\newcommand{\sylnature}{必修} % 必修/选修
|
||||||
|
\newcommand{\sylcredit}{2.5} % 学分
|
||||||
|
\newcommand{\sylhours}{48} % 总学时
|
||||||
|
\newcommand{\syltheory}{32} % 理论学时
|
||||||
|
\newcommand{\sylpractice}{16} % 实践学时
|
||||||
|
\newcommand{\sylextra}{32} % 课外学时
|
||||||
|
```
|
||||||
|
|
||||||
|
| 参数 | 说明 |
|
||||||
|
|---|---|
|
||||||
|
| `\sylnamecn` | 课程名称(中文) |
|
||||||
|
| `\sylnameen` | 课程名称(英文) |
|
||||||
|
| `\sylcode` | 课程代码 |
|
||||||
|
| `\sylteacher` | 责任教师 |
|
||||||
|
| `\sylattr` | 课程属性(专业知识 / 通识教育 …) |
|
||||||
|
| `\sylnature` | 必修 / 选修 |
|
||||||
|
| `\sylcredit` | 学分 |
|
||||||
|
| `\sylhours` | 总学时 |
|
||||||
|
| `\syltheory` | 理论学时 |
|
||||||
|
| `\sylpractice` | 实践学时 |
|
||||||
|
| `\sylextra` | 课外学时 |
|
||||||
|
|
||||||
|
## 正文写法
|
||||||
|
|
||||||
|
```latex
|
||||||
|
\oucsylmaintitle{中国海洋大学本科生课程大纲}
|
||||||
|
|
||||||
|
\oucsylsection{一、课程介绍}
|
||||||
|
\oucsylsubsection{1.课程描述(中英文):}
|
||||||
|
\oucsylp{数字逻辑是数字电路逻辑设计的简称……}
|
||||||
|
\oucsylp{Digital logic, short for digital logic circuit design, ...}
|
||||||
|
|
||||||
|
\oucsylsubsection{2.设计思路:}
|
||||||
|
\oucsylp{本课程主要讲授……}
|
||||||
|
|
||||||
|
\oucsylsection{二、课程目标}
|
||||||
|
\oucsylp{通过对该课程的学习,学生将达到如下课程目标:}
|
||||||
|
```
|
||||||
|
|
||||||
|
| 命令 | 用途 |
|
||||||
|
|---|---|
|
||||||
|
| `\oucsylmaintitle{标题}` | 主标题 |
|
||||||
|
| `\oucsylsection{标题}` | 一级节(一、二、三…) |
|
||||||
|
| `\oucsylsubsection{标题}` | 二级节(1.2.3.…) |
|
||||||
|
| `\oucsylsubsub{标题}` | 三级节 |
|
||||||
|
| `\oucsylp{正文}` | 正文段落,首行缩进 |
|
||||||
|
| `\oucsylpz{正文}` | 正文段落,不缩进 |
|
||||||
|
| `\oucsylsignature` | 签字栏 |
|
||||||
|
|
||||||
|
编号(一、二 / 1.2.)手写在参数里,模板不自动生成。
|
||||||
|
|
||||||
|
## 表格
|
||||||
|
|
||||||
|
课程大纲有四个表:课程基本信息、课程目标与毕业要求对应关系、
|
||||||
|
教学内容与学时分配、考核方式与成绩构成。
|
||||||
|
|
||||||
|
表格用 `tblr`(tabularray)环境,合并格用 `\SetCell`。改内容时
|
||||||
|
注意**每行的段数要与列数一致**,被合并掉的格子留空。
|
||||||
|
|
||||||
|
```latex
|
||||||
|
\SetCell[c=1]{c} 课程名称 & \SetCell[c=5]{l} (中文)\sylnamecn \\
|
||||||
|
```
|
||||||
|
|
||||||
|
## 版式
|
||||||
|
|
||||||
|
```
|
||||||
|
A4,多页
|
||||||
|
正文宋体,标题黑体,表格内 9pt
|
||||||
|
表格带边框,合并单元格较多
|
||||||
|
页眉页脚含课程名称
|
||||||
|
```
|
||||||
|
|
||||||
|
## 注意
|
||||||
|
|
||||||
|
示例内容为虚构数据,使用时全部替换。
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user