feat: add document conversion templates

Add md-to-pdf and md-to-docx templates for mytoolkit convert command.
Migrated from workspace/templates.
This commit is contained in:
Zhengshou Lai
2026-05-06 00:11:37 +08:00
parent dea83774a5
commit 2791a785ff
18 changed files with 20018 additions and 0 deletions
File diff suppressed because it is too large Load Diff
+92
View File
@@ -0,0 +1,92 @@
# 赖正首 Zhengshou Lai
副教授 · 中山大学土木工程学院
laizhengsh@mail.sysu.edu.cn · +86 198-6603-8070
[Google Scholar](https://scholar.google.com) · [ORCID](https://orcid.org/0000-0002-2378-9193)
赖正首博士现任中山大学土木工程学院副教授,香港高等研究院应用数学研究中心双聘教师。研究专注于颗粒介质多尺度计算力学,致力于开发先进的数值算法与高性能计算软件。
## 教育背景
| 时间 | 学位 | 学校 |
| --------- | ----------------------------- | ----------------------- |
| 20152018 | Ph.D. in Civil Engineering | Clemson University, USA |
| 20122014 | Ph.D. Candidate (transferred) | Sun Yat-sen University |
| 20082012 | B.Eng. in Traffic Engineering | Sun Yat-sen University |
## 工作经历
| 时间 | 职位 | 地点 |
| --------- | ------------------------------------------ | --------- |
| 2023–至今 | 副教授,中山大学土木工程学院 | 广州 |
| 2025–至今 | 双聘教师,香港高等研究院应用数学研究中心 | 香港 |
| 20212023 | 博士后("香江学者"计划),香港科技大学/中山大学 | 香港/广州 |
| 2019–2021 | 博士后,中山大学智能工程学院 | 广州 |
## 论文发表(†学生一作,\#通讯)
### 2026
1. **Lai, Z.**, Huang, S., Kong, Y., Zhao, S., Zhao, J., & Huang, L. (2026). Hybrid resolved-unresolved CFD-DEM framework for multiscale fluid-particle systems with irregular-shaped and polydisperse particles. *Journal of Computational Physics*, 554, 114759.
2. Li, C., Huang, L., **Lai, Z.**\#, Huang, S., & Lin, Y. (2026). A diffusion-based generative framework for virtual porous granular media generation. *Powder Technology*, 473, 122230.
3. Li, C., **Lai, Z.**\#, Huang, S., & Huang, L. (2026). Neural network-driven shape representation and computational particle mechanics via signed distance fields. *Engineering Applications of Artificial Intelligence*, 167, 113913.
### 2024
4. Huang, S.†, Wang, P., **Lai, Z.**\#, Yin, Z. Y., Huang, L., & Xu, C. (2024). Machine-learning-enabled discrete element method: The extension to three dimensions and computational issues. *Computer Methods in Applied Mechanics and Engineering*, 432, 117445.
5. **Lai, Z.**, Feng, Y. T., Zhao, J., & Huang, L. (2024). Unifying the contact in signed distance field-based and conventional discrete element methods. *Computers and Geotechnics*, 176, 106764.
6. Lin, Y., **Lai, Z.**, Ma, J., & Huang, L. (2024). A combined weighted Voronoi tessellation and random field approach for modeling heterogeneous rocks with correlated grain structure. *Construction and Building Materials*, 416, 135228.
### 2022
7. **Lai, Z.**, Zhao, S., Zhao, J., & Huang, L. (2022). Signed distance field framework for unified DEM modeling of granular media with arbitrary particle shapes. *Computational Mechanics*, 70(4), 763--783.
8. Xiao, R., Liang, B., Wu, F., Huang, L., & **Lai, Z.** (2022). Biocementation of coral sand under seawater environment and an improved three-stage biogrouting approach. *Construction and Building Materials*, 362, 129758.
## 科研项目
### 纵向项目
- **广东省科学技术厅,面上项目(主持)**;水合物固态流化开采中气—液—固三相流动机理与耦合数值方法研究;2026.01–至今(10万元)
- **国家自然科学基金,青年项目(主持)**;基于CT图像和机器学习的钙质砂宏微观力学试验及多尺度离散元建模;2020.01–2022.1225万元)
- **博士后科学基金,面上项目(主持)**;基于傅里叶级数的不规则颗粒离散元方法研究;2020.01–2021.1212万元)
### 横向项目
- **中国科学院力学研究所(主持)**;非球形颗粒的接触算法开发;2025–至今(18万元)
- **中铁十八局集团市政工程有限公司(主持)**;深厚饱和淤泥地层地铁车站深基坑施工变形规律与预警控制技术;2024–至今(160万元)
## 获奖与荣誉
- **2024**;地下工程裂隙岩体渗流测试装备与防渗关键技术,广东省技术发明奖,一等奖
- **2022**;软土-城市隧道耦合体系性能演化理论与安全控制技术,广东省科技进步奖,一等奖
- **2020**;基于岩溶发育机理的碳酸盐岩地区工程地质调查及塌陷预警关键技术,广东省科技进步奖,二等奖
## 知识产权
### 发明专利
- 一种基于改进浸入边界及有向距离场的任意形状颗粒CFD-DEM处理方法及系统,2024
- 基于粒子群优化与贝塞尔曲线的颗粒形状模拟方法及系统,2021
- 一种不规则颗粒的形状模拟方法、装置及设备,2020
### 软件著作权
- 应用过程分析与模拟平台-基于有向距离场的CFD-DEM流固耦合软件 V1.02024
- NetDEM离散元软件 V1.02022
## 学术服务
### 期刊审稿
- *Computers and Geotechnics*、*Acta Geotechnica*、*Granular Matter*、*Engineering Geology*、*Powder Technology*、*Applied Mathematical Modelling*、*Ocean Engineering* 等
### 学术兼职
- **中国岩石力学与工程学会** — 人工智能技术实用化专业委员会委员(2024–至今)
- **中国颗粒学会** — 颗粒计算专业委员会委员(2025–至今)
- **广东省力学学会** — 委员(2025–至今)
+130
View File
@@ -0,0 +1,130 @@
// CV 模板 —— 简洁学术风格,参考 default 模板
#let serif-stack = ("Cambria", "PingFang SC", "Helvetica Neue", "Arial")
#let sans-stack = ("Cambria", "PingFang SC", "Helvetica Neue", "Arial")
#let mono-stack = ("Courier New", "Menlo", "Monaco", "SimSun")
#let primary = rgb("#1F4E79")
#let accent = rgb("#3467A8")
#let light = rgb("#96A0AA")
#let rule-blue = accent.lighten(46%)
#let _cv-h1-counter = counter("cv-h1")
#let three-line-table(..args) = {
let kwargs = args.named()
let children = args.pos()
let new_children = ()
let header_seen = false
for child in children {
if child.func() == table.header {
new_children.push(table.hline(stroke: 1.25pt + rule-blue))
new_children.push(child)
header_seen = true
} else if header_seen and child.func() == table.hline {
new_children.push(table.hline(stroke: 0.75pt + rule-blue))
header_seen = false
} else {
new_children.push(child)
}
}
new_children.push(table.hline(stroke: 1.25pt + rule-blue))
kwargs.stroke = none
kwargs.inset = (x: 8pt, y: 5pt)
table(..new_children, ..kwargs)
}
#let cv(body) = {
set page(
paper: "a4",
margin: (top: 2.0cm, bottom: 2.0cm, left: 2.0cm, right: 2.0cm),
header: context {
align(right)[
#text(size: 8pt, fill: light)[
Updated on #datetime.today().display("[year]-[month]-[day]")
]
]
},
footer: context {
align(center)[
#text(size: 8pt, fill: light)[
— #counter(page).display("1") —
]
]
},
)
set text(
font: serif-stack,
size: 10pt,
lang: "zh",
)
show raw: set text(font: mono-stack)
set par(
justify: true,
leading: 0.72em,
spacing: 0.92em,
first-line-indent: 0em,
)
set list(tight: true, indent: 1.2em, body-indent: 0.45em, spacing: 0.85em)
set enum(tight: true, indent: 1.2em, body-indent: 0.45em, spacing: 0.85em)
show heading: it => {
set text(font: sans-stack)
it
}
show heading.where(level: 1): it => {
_cv-h1-counter.step()
context {
let n = _cv-h1-counter.get().first()
if n == 1 {
align(center)[
#text(size: 18pt, weight: "bold")[#it.body]
]
v(0.8em)
} else {
v(1.2em)
text(size: 13pt, weight: "bold", fill: primary, it.body)
v(0.45em)
}
}
}
show heading.where(level: 2): it => {
v(0.8em)
stack(spacing: 0.5em,
text(size: 11pt, weight: "bold", fill: accent, it.body),
line(length: 100%, stroke: 0.7pt + rule-blue),
)
v(0.2em)
}
show heading.where(level: 3): it => {
v(0.5em)
text(size: 10pt, weight: "bold", fill: light, it.body)
v(0.2em)
}
set heading(numbering: none)
show link: it => text(fill: accent, it)
show strong: it => {
text(font: sans-stack, weight: "bold", it.body)
}
set table(
inset: (x: 8pt, y: 5pt),
stroke: 0.5pt + rule-blue,
)
body
}