Compare commits
6
Commits
8447db4693
...
10b126266b
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
10b126266b | ||
|
|
f581a3840b | ||
|
|
9dc8732614 | ||
|
|
ac9628d2b7 | ||
|
|
5bef767708 | ||
|
|
b0c6f3d0dc |
@@ -0,0 +1,2 @@
|
|||||||
|
# Generated document exports
|
||||||
|
/NITLOAD-STANDARD-NITRAC/export/
|
||||||
Vendored
+8
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"chat.tools.terminal.autoApprove": {
|
||||||
|
"/^typst compile --root \"\\.\" \"NITLOAD-STANDARD-NITRAC\\\\NITRAC-doc-1b\\.typ\" \"NITLOAD-STANDARD-NITRAC\\\\export\\\\NITRAC-doc-1b-preview\\.pdf\"$/": {
|
||||||
|
"approve": true,
|
||||||
|
"matchCommandLine": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,4 @@
|
|||||||
#import "NLI-doc-template.typ": cover, conf
|
#import "../NLI-doc-template.typ": cover, conf
|
||||||
|
|
||||||
// ============================================================
|
// ============================================================
|
||||||
// Nitload 标准文件模板说明文档
|
// Nitload 标准文件模板说明文档
|
||||||
|
|||||||
@@ -1,39 +1,14 @@
|
|||||||
#import "../NLI-doc-template.typ": cover, conf
|
#import "NITRAC-doc-template.typ": nitrac-cover, conf
|
||||||
|
|
||||||
#let mark-unit = 1.2cm
|
#nitrac-cover(
|
||||||
#let mark-blue = rgb("#4FC3F7")
|
title: "确定性自动化 实时与集成",
|
||||||
#let mark-letter(column, row, letter) = place(
|
title-en: "Deterministic Automation Real-time and Integration",
|
||||||
top + left,
|
number: "NITRAC-DOC-1",
|
||||||
dx: (3.6 + column * 2.5) * mark-unit,
|
|
||||||
dy: row * mark-unit,
|
|
||||||
box(
|
|
||||||
width: 2.5 * mark-unit,
|
|
||||||
height: 3 * mark-unit,
|
|
||||||
inset: 0pt,
|
|
||||||
align(center + horizon, text(
|
|
||||||
font: "Source Code Pro",
|
|
||||||
size: 72pt,
|
|
||||||
weight: "medium",
|
|
||||||
fill: mark-blue,
|
|
||||||
)[#letter]),
|
|
||||||
),
|
|
||||||
)
|
|
||||||
|
|
||||||
#let nitrac-mark = {
|
|
||||||
mark-letter(0, 0, "T")
|
|
||||||
mark-letter(1, 1, "R")
|
|
||||||
mark-letter(2, 2, "A")
|
|
||||||
mark-letter(3, 3, "C")
|
|
||||||
}
|
|
||||||
|
|
||||||
#cover(
|
|
||||||
title: "荷城创新实时与控制系统",
|
|
||||||
title-en: "Nitload Realtime and Control",
|
|
||||||
logo: nitrac-mark,
|
|
||||||
number: "NITRAC-DOC-1B",
|
|
||||||
author: "Nitload Industry",
|
author: "Nitload Industry",
|
||||||
classification: "MID[中秘]SEC",
|
classification: "MID[中秘]SEC",
|
||||||
date: "2026 年 9 月",
|
date: "2026 年 9 月",
|
||||||
|
sub_title: "第一册:总则与基本原则",
|
||||||
|
sub_title_en: "Part 1: Overview and fundamental principles",
|
||||||
)
|
)
|
||||||
|
|
||||||
#show: conf.with(number-pages: true)
|
#show: conf.with(number-pages: true)
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
#import "NITRAC-doc-template.typ": nitrac-cover, conf
|
||||||
|
|
||||||
|
#nitrac-cover(
|
||||||
|
title: "确定性自动化 实时与集成",
|
||||||
|
title-en: "Deterministic Automation Real-time and Integration",
|
||||||
|
number: "NITRAC-DOC-1",
|
||||||
|
author: "Nitload Industry",
|
||||||
|
classification: "MID[中秘]SEC",
|
||||||
|
date: "2026 年 9 月",
|
||||||
|
sub_title: "第二册:数据描述和交换格式",
|
||||||
|
sub_title_en: "Part 2: Data description and exchange format",
|
||||||
|
)
|
||||||
|
|
||||||
|
#show: conf.with(number-pages: true)
|
||||||
|
|
||||||
|
= 第一章 总则
|
||||||
|
|
||||||
|
本文档为 NITRAC 系列标准文档第一册草案。
|
||||||
|
|
||||||
|
== 1.1 范围
|
||||||
|
|
||||||
|
本节规定文档的适用范围。
|
||||||
|
|
||||||
|
== 1.2 规范性引用文件
|
||||||
|
|
||||||
|
本节列出编制和实施本标准所需的规范性引用文件。
|
||||||
|
|
||||||
|
= 第二章 术语和定义
|
||||||
|
|
||||||
|
本节规定本文档使用的术语和定义。
|
||||||
|
|
||||||
|
= 第三章 技术要求
|
||||||
|
|
||||||
|
本节规定 NITRAC 的技术要求。
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
#import "NITRAC-doc-template.typ": nitrac-cover, conf
|
||||||
|
|
||||||
|
#nitrac-cover(
|
||||||
|
title: "确定性自动化 实时与集成",
|
||||||
|
title-en: "Deterministic Automation Real-time and Integration",
|
||||||
|
number: "NITRAC-DOC-3",
|
||||||
|
author: "Nitload Industry",
|
||||||
|
classification: "MID[中秘]SEC",
|
||||||
|
date: "2026 年 9 月",
|
||||||
|
sub_title: "第三册:时间同步系统",
|
||||||
|
sub_title_en: "Part 3: Time synchronization system",
|
||||||
|
)
|
||||||
|
|
||||||
|
#show: conf.with(number-pages: true)
|
||||||
|
|
||||||
|
= 第一章 总则
|
||||||
|
|
||||||
|
本文档为 NITRAC 系列标准文档第三册草案,规定确定性自动化系统中的时间同步系统要求。
|
||||||
|
|
||||||
|
== 1.1 范围
|
||||||
|
|
||||||
|
本册规定系统时间基准、同步域、同步方式以及时间同步状态管理的基本要求。
|
||||||
|
|
||||||
|
== 1.2 规范性引用文件
|
||||||
|
|
||||||
|
本节列出编制和实施本册所需的规范性引用文件。
|
||||||
|
|
||||||
|
= 第二章 术语和定义
|
||||||
|
|
||||||
|
本节规定本册使用的时间基准、同步域、主时钟、从时钟和同步状态等术语。
|
||||||
|
|
||||||
|
= 第三章 时间同步系统
|
||||||
|
|
||||||
|
本节规定时间同步系统的体系结构、时钟角色、同步过程、异常处理和性能要求。
|
||||||
|
|
||||||
|
== 3.1 时间基准与同步域
|
||||||
|
|
||||||
|
== 3.2 时钟角色与同步关系
|
||||||
|
|
||||||
|
== 3.3 同步过程与状态管理
|
||||||
|
|
||||||
|
== 3.4 异常处理与性能要求
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
#import "NITRAC-doc-template.typ": nitrac-cover, conf
|
||||||
|
|
||||||
|
#nitrac-cover(
|
||||||
|
title: "确定性自动化 实时与集成",
|
||||||
|
title-en: "Deterministic Automation Real-time and Integration",
|
||||||
|
number: "NITRAC-DOC-4",
|
||||||
|
author: "Nitload Industry",
|
||||||
|
classification: "MID[中秘]SEC",
|
||||||
|
date: "2026 年 9 月",
|
||||||
|
sub_title: "第四册:端点处理单元",
|
||||||
|
sub_title_en: "Part 4: Endpoint Processing Unit",
|
||||||
|
)
|
||||||
|
|
||||||
|
#show: conf.with(number-pages: true)
|
||||||
|
|
||||||
|
= 第一章 总则
|
||||||
|
|
||||||
|
本文档为 NITRAC 系列标准文档第四册草案,规定端点处理单元的基本要求。
|
||||||
|
|
||||||
|
== 1.1 范围
|
||||||
|
|
||||||
|
本册规定端点处理单元的功能边界、组成、运行状态以及与其他系统单元的接口要求。
|
||||||
|
|
||||||
|
== 1.2 规范性引用文件
|
||||||
|
|
||||||
|
本节列出编制和实施本册所需的规范性引用文件。
|
||||||
|
|
||||||
|
= 第二章 术语和定义
|
||||||
|
|
||||||
|
本节规定本册使用的端点处理单元、任务、执行周期、运行状态和处理资源等术语。
|
||||||
|
|
||||||
|
= 第三章 端点处理单元
|
||||||
|
|
||||||
|
本节规定端点处理单元的体系结构、任务执行、资源管理、状态转换和异常处理要求。
|
||||||
|
|
||||||
|
== 3.1 单元组成与功能边界
|
||||||
|
|
||||||
|
== 3.2 任务模型与执行周期
|
||||||
|
|
||||||
|
== 3.3 处理资源与状态管理
|
||||||
|
|
||||||
|
== 3.4 异常处理与诊断
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
#import "NITRAC-doc-template.typ": nitrac-cover, conf
|
||||||
|
|
||||||
|
#nitrac-cover(
|
||||||
|
title: "确定性自动化 实时与集成",
|
||||||
|
title-en: "Deterministic Automation Real-time and Integration",
|
||||||
|
number: "NITRAC-DOC-5",
|
||||||
|
author: "Nitload Industry",
|
||||||
|
classification: "MID[中秘]SEC",
|
||||||
|
date: "2026 年 9 月",
|
||||||
|
sub_title: "第五册:NEDL(EPU 下行链路)",
|
||||||
|
sub_title_en: "Part 5: NITRAC EPU Downstream Link",
|
||||||
|
)
|
||||||
|
|
||||||
|
#show: conf.with(number-pages: true)
|
||||||
|
|
||||||
|
= 第一章 总则
|
||||||
|
|
||||||
|
本文档为 NITRAC 系列标准文档第五册草案。NEDL 全称为 NITRAC EPU Downstream Link,是 NITRAC 体系中由 EPU(Endpoint Processing Unit,端点处理单元)面向下游执行器提供的可自定义控制链路。本册规定该控制链路的组成、接口、时序和开发要求。
|
||||||
|
|
||||||
|
== 1.1 范围
|
||||||
|
|
||||||
|
本册适用于 NITRAC EPU 与下游执行器之间的确定性控制通信。内容覆盖硬件端口、物理连接、线缆定义、时间编码、控制数据传输、链路配置以及可编程开发方法。本册不将 NEDL 定义为编程语言或独立的描述语言。
|
||||||
|
|
||||||
|
== 1.2 规范性引用文件
|
||||||
|
|
||||||
|
本节列出编制和实施本册所需的规范性引用文件。
|
||||||
|
|
||||||
|
= 第二章 术语和定义
|
||||||
|
|
||||||
|
本节规定本册使用的 NEDL、EPU、下游执行器、控制端口、链路、时间编码、控制周期和可编程控制等术语。
|
||||||
|
|
||||||
|
= 第三章 NEDL 控制链路
|
||||||
|
|
||||||
|
本节规定 NEDL 作为 EPU 下行控制链路的体系结构、物理承载、时序组织、控制数据和开发接口要求。
|
||||||
|
|
||||||
|
== 3.1 链路定位与体系结构
|
||||||
|
|
||||||
|
NEDL 是连接 EPU 与下游执行器的控制链路。EPU 负责生成、调度并发送确定性控制信息,下游执行器负责接收控制信息并按照规定的时间和状态要求执行动作。
|
||||||
|
|
||||||
|
== 3.2 硬件端口
|
||||||
|
|
||||||
|
本节规定 EPU 端口、执行器端口、端口方向、信号角色、端口能力和端口状态管理要求。
|
||||||
|
|
||||||
|
== 3.3 线缆与物理连接定义
|
||||||
|
|
||||||
|
本节规定线缆类型、连接器、导体分配、屏蔽与接地、链路长度以及物理连接的一致性要求。
|
||||||
|
|
||||||
|
== 3.4 时间编码与确定性传输
|
||||||
|
|
||||||
|
本节规定控制周期、时间基准、时间戳、时隙、帧边界和时间编码方式,确保控制信息能够在确定性时间窗口内传输和执行。
|
||||||
|
|
||||||
|
== 3.5 控制数据与链路状态
|
||||||
|
|
||||||
|
本节规定下行控制数据、状态数据、确认机制、链路初始化、运行状态和异常状态处理要求。
|
||||||
|
|
||||||
|
== 3.6 可编程开发方法
|
||||||
|
|
||||||
|
本节规定 NEDL 的可编程配置、控制逻辑开发、设备适配、参数管理、调试诊断和版本兼容要求。
|
||||||
|
|
||||||
|
== 3.7 定制化与一致性要求
|
||||||
|
|
||||||
|
本节规定 NEDL 在不同执行器和应用场景下的定制边界、互操作性、验证方法和一致性要求。
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
#import "NITRAC-doc-template.typ": nitrac-cover, conf
|
||||||
|
|
||||||
|
#nitrac-cover(
|
||||||
|
title: "确定性自动化 实时与集成",
|
||||||
|
title-en: "Deterministic Automation Real-time and Integration",
|
||||||
|
number: "NITRAC-DOC-6",
|
||||||
|
author: "Nitload Industry",
|
||||||
|
classification: "MID[中秘]SEC",
|
||||||
|
date: "2026 年 9 月",
|
||||||
|
sub_title: "第六册:内部互联",
|
||||||
|
sub_title_en: "Part 6: Internal interconnection",
|
||||||
|
)
|
||||||
|
|
||||||
|
#show: conf.with(number-pages: true)
|
||||||
|
|
||||||
|
= 第一章 总则
|
||||||
|
|
||||||
|
本文档为 NITRAC 系列标准文档第六册草案,规定系统内部互联的基本要求。
|
||||||
|
|
||||||
|
== 1.1 范围
|
||||||
|
|
||||||
|
本册规定内部互联的拓扑、连接关系、通信边界以及互联资源管理要求。
|
||||||
|
|
||||||
|
== 1.2 规范性引用文件
|
||||||
|
|
||||||
|
本节列出编制和实施本册所需的规范性引用文件。
|
||||||
|
|
||||||
|
= 第二章 术语和定义
|
||||||
|
|
||||||
|
本节规定本册使用的内部互联、节点、链路、端点、通道和互联域等术语。
|
||||||
|
|
||||||
|
= 第三章 内部互联
|
||||||
|
|
||||||
|
本节规定内部互联的体系结构、链路模型、通信行为、资源配置和故障隔离要求。
|
||||||
|
|
||||||
|
== 3.1 互联拓扑与节点关系
|
||||||
|
|
||||||
|
== 3.2 链路与通道模型
|
||||||
|
|
||||||
|
== 3.3 通信行为与资源配置
|
||||||
|
|
||||||
|
== 3.4 故障隔离与恢复
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
#import "NITRAC-doc-template.typ": nitrac-cover, conf
|
||||||
|
|
||||||
|
#nitrac-cover(
|
||||||
|
title: "确定性自动化 实时与集成",
|
||||||
|
title-en: "Deterministic Automation Real-time and Integration",
|
||||||
|
number: "NITRAC-DOC-7",
|
||||||
|
author: "Nitload Industry",
|
||||||
|
classification: "MID[中秘]SEC",
|
||||||
|
date: "2026 年 9 月",
|
||||||
|
sub_title: "第七册:系统集成",
|
||||||
|
sub_title_en: "Part 7: System integration",
|
||||||
|
)
|
||||||
|
|
||||||
|
#show: conf.with(number-pages: true)
|
||||||
|
|
||||||
|
= 第一章 总则
|
||||||
|
|
||||||
|
本文档为 NITRAC 系列标准文档第七册草案,规定系统集成的基本要求。
|
||||||
|
|
||||||
|
== 1.1 范围
|
||||||
|
|
||||||
|
本册规定 NITRAC 系统集成的对象、边界、集成流程、验证方法以及交付要求。
|
||||||
|
|
||||||
|
== 1.2 规范性引用文件
|
||||||
|
|
||||||
|
本节列出编制和实施本册所需的规范性引用文件。
|
||||||
|
|
||||||
|
= 第二章 术语和定义
|
||||||
|
|
||||||
|
本节规定本册使用的系统集成、配置、部署、验证、验收和运行基线等术语。
|
||||||
|
|
||||||
|
= 第三章 系统集成
|
||||||
|
|
||||||
|
本节规定系统集成架构、配置管理、集成验证、联调测试和交付运行要求。
|
||||||
|
|
||||||
|
== 3.1 集成架构与边界
|
||||||
|
|
||||||
|
== 3.2 配置管理与部署
|
||||||
|
|
||||||
|
== 3.3 集成验证与联调测试
|
||||||
|
|
||||||
|
== 3.4 交付与运行基线
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
// NITRAC document-group template.
|
||||||
|
// Provides the standardized mark, cover wrapper, and body configuration.
|
||||||
|
#import "../NLI-doc-template.typ": cover, conf as base-conf
|
||||||
|
|
||||||
|
#let conf = base-conf
|
||||||
|
|
||||||
|
#let mark-unit = 1.2cm
|
||||||
|
#let mark-blue = rgb("#4FC3F7")
|
||||||
|
#let mark-font = "Bahnschrift"
|
||||||
|
|
||||||
|
// Standard NITRAC mark. The top offset is intentionally configurable here
|
||||||
|
// because the mark is positioned independently from the cover grid.
|
||||||
|
#let nitrac-mark = context {
|
||||||
|
let mark-x = 3.3 * mark-unit
|
||||||
|
let mark-width = 21cm - mark-x - 0.3 * mark-unit
|
||||||
|
let mark-height = 6 * mark-unit
|
||||||
|
let mark-padding = 1 * mark-unit
|
||||||
|
let mark-safe-height = mark-height - 0 * mark-padding
|
||||||
|
let probe-size = 100pt
|
||||||
|
let mark = text(
|
||||||
|
font: mark-font,
|
||||||
|
weight: "bold",
|
||||||
|
size: probe-size,
|
||||||
|
fill: mark-blue,
|
||||||
|
)[ITRAC]
|
||||||
|
let mark-size = probe-size * (mark-width / measure(mark).width)
|
||||||
|
let mark-text = text(font: mark-font, weight: "bold", size: mark-size, fill: mark-blue)[ITRAC]
|
||||||
|
let mark-stretch-y = mark-safe-height / measure(mark-text).height * 100%
|
||||||
|
place(
|
||||||
|
top + left,
|
||||||
|
dx: mark-x,
|
||||||
|
dy: mark-padding,
|
||||||
|
box(
|
||||||
|
width: mark-width,
|
||||||
|
height: mark-safe-height,
|
||||||
|
inset: 0pt,
|
||||||
|
scale(x: 100%, y: 100%, reflow: false, {
|
||||||
|
align(center + horizon, scale(x: 100%, y: mark-stretch-y, reflow: false, mark-text))
|
||||||
|
}),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
#let nitrac-cover(..args) = cover(logo: nitrac-mark, ..args)
|
||||||
+106
-31
@@ -1,16 +1,18 @@
|
|||||||
// ============================================================
|
// ============================================================
|
||||||
// A4 文档模板
|
// A4 文档模板
|
||||||
// 封面:页边距 0,中文黑体 / 英文 Source Code Pro
|
// 封面:页边距 0,标题与图案 Bahnschrift / 信息 Source Code Pro
|
||||||
// 正文:上下 3.5cm,左右 2cm,中文宋体 / 英文 Times New Roman
|
// 正文:上下 3.5cm,左右 2cm,中文 Source Han Sans SC / 英文 IBM Plex Sans
|
||||||
// 代码块:Source Code Pro
|
// 代码块:IBM Plex Mono
|
||||||
// ============================================================
|
// ============================================================
|
||||||
|
|
||||||
// ---- 字体配置(可按需修改)----
|
// ---- 字体配置(可按需修改)----
|
||||||
#let cover-cjk = "SimHei" // 封面中文:黑体
|
#let cover-cjk = "SimHei" // 封面中文回退:黑体
|
||||||
#let cover-latin = "Source Code Pro" // 封面英文
|
#let cover-latin = "Source Code Pro" // 文档信息与签名:Source Code Pro
|
||||||
#let body-cjk = "SimSun" // 正文中文:宋体
|
#let cover-title-cjk = "SimHei" // 封面中文标题
|
||||||
#let body-latin = "Times New Roman" // 正文英文:新罗马
|
#let cover-title-latin = "Bahnschrift" // 封面英文标题
|
||||||
#let mono-font = "Source Code Pro" // 代码块
|
#let body-cjk = "Source Han Sans SC" // 正文中文
|
||||||
|
#let body-latin = "IBM Plex Sans" // 正文英文
|
||||||
|
#let mono-font = "IBM Plex Mono" // 代码块
|
||||||
|
|
||||||
// ---- 封面网格系统 ----
|
// ---- 封面网格系统 ----
|
||||||
// 坐标系:左上角为原点,x 向右、y 向下;坐标记为 (x, y) 即 (列, 行)。
|
// 坐标系:左上角为原点,x 向右、y 向下;坐标记为 (x, y) 即 (列, 行)。
|
||||||
@@ -41,7 +43,7 @@
|
|||||||
// 在单位格内居中放置一个字母
|
// 在单位格内居中放置一个字母
|
||||||
#let glyph(x, y, ch, color) = cell(x, y, box(
|
#let glyph(x, y, ch, color) = cell(x, y, box(
|
||||||
width: unit, height: unit, inset: 0pt,
|
width: unit, height: unit, inset: 0pt,
|
||||||
align(center + horizon, text(font: cover-cjk, size: glyph-size, weight: "medium", fill: color)[#ch]),
|
align(center + horizon, text(font: cover-title-latin, size: glyph-size, weight: "medium", fill: color)[#ch]),
|
||||||
))
|
))
|
||||||
|
|
||||||
// ---- 封面 ----
|
// ---- 封面 ----
|
||||||
@@ -49,13 +51,17 @@
|
|||||||
#let cover(
|
#let cover(
|
||||||
title: none, // 主标题(中文)
|
title: none, // 主标题(中文)
|
||||||
title-en: none, // 主标题(英文,Source Code Pro 自行排版)
|
title-en: none, // 主标题(英文,Source Code Pro 自行排版)
|
||||||
subtitle: none, // 副标题
|
subtitle: none, // 兼容旧调用:英文分册题名
|
||||||
|
sub_title: none, // 中文分册题名
|
||||||
|
sub_title_en: none, // 英文分册题名
|
||||||
|
subtitle_en: none, // 兼容旧调用:英文分册题名
|
||||||
logo: none, // 图片路径,如 image("logo.png")
|
logo: none, // 图片路径,如 image("logo.png")
|
||||||
number: none, // 文档编号
|
number: none, // 文档编号
|
||||||
author: none, // 作者(可为单个字符串或数组)
|
author: none, // 作者(可为单个字符串或数组)
|
||||||
classification: none, // 密级,如 "内部"、"秘密"
|
classification: none, // 密级,如 "内部"、"秘密"
|
||||||
info: (:), // 附加信息字典,如 (学号: "123", 指导教师: "张三")
|
info: (:), // 附加信息字典,如 (学号: "123", 指导教师: "张三")
|
||||||
date: none, // 日期
|
date: none, // 日期
|
||||||
|
part-info: none, // 兼容旧调用:分册题名
|
||||||
fill: white, // 封面背景色
|
fill: white, // 封面背景色
|
||||||
decorate: true, // 是否绘制天蓝/暖橙网格装饰色块
|
decorate: true, // 是否绘制天蓝/暖橙网格装饰色块
|
||||||
) = {
|
) = {
|
||||||
@@ -98,10 +104,10 @@
|
|||||||
let cn-dy = 0.2 * unit
|
let cn-dy = 0.2 * unit
|
||||||
let is-narrow = c => str.to-unicode(c.codepoints().first()) < 0x2E80
|
let is-narrow = c => str.to-unicode(c.codepoints().first()) < 0x2E80
|
||||||
// 西文开头时使用更明确的 0.2 格左边距,与西文标题和信息区形成视觉对齐。
|
// 西文开头时使用更明确的 0.2 格左边距,与西文标题和信息区形成视觉对齐。
|
||||||
let title-start-pad = if cs.len() > 0 and is-narrow(cs.first()) { 0.2 * unit } else { cn-dx }
|
let title-start-pad = 0pt
|
||||||
let title-width = 21cm - unit - title-start-pad
|
let title-width = 21cm - 2 * unit
|
||||||
let en-left-pad = 0.2 * unit
|
let en-left-pad = 0pt
|
||||||
let en-box-width = 21cm - unit
|
let en-box-width = 21cm - 2 * unit
|
||||||
// 分段:连续西文合为一段,其余每字一段
|
// 分段:连续西文合为一段,其余每字一段
|
||||||
let segs = ()
|
let segs = ()
|
||||||
let run = ""
|
let run = ""
|
||||||
@@ -121,7 +127,7 @@
|
|||||||
for seg in segs {
|
for seg in segs {
|
||||||
let latin = is-narrow(seg.first())
|
let latin = is-narrow(seg.first())
|
||||||
let segment = text(
|
let segment = text(
|
||||||
font: if latin { (cover-latin, cover-cjk) } else { (cover-cjk, cover-latin) },
|
font: if latin { cover-title-latin } else { cover-title-cjk },
|
||||||
size: glyph-size,
|
size: glyph-size,
|
||||||
fill: black,
|
fill: black,
|
||||||
)[#seg]
|
)[#seg]
|
||||||
@@ -148,7 +154,7 @@
|
|||||||
let en-rows = 0
|
let en-rows = 0
|
||||||
let en-gap = if cn-rows > 0 and title-en != none { 0.25 * unit } else { 0pt }
|
let en-gap = if cn-rows > 0 and title-en != none { 0.25 * unit } else { 0pt }
|
||||||
if title-en != none {
|
if title-en != none {
|
||||||
let en1 = text(font: (cover-latin, cover-cjk), size: glyph-size, fill: black)[#title-en]
|
let en1 = text(font: cover-title-latin, size: glyph-size, fill: black)[#title-en]
|
||||||
let lh = measure(en1).height
|
let lh = measure(en1).height
|
||||||
let pad = (unit - lh) / 2
|
let pad = (unit - lh) / 2
|
||||||
let inner = {
|
let inner = {
|
||||||
@@ -165,6 +171,72 @@
|
|||||||
let title-rows = cn-rows + en-rows
|
let title-rows = cn-rows + en-rows
|
||||||
let title-end-y = (7 + title-rows) * unit + en-gap
|
let title-end-y = (7 + title-rows) * unit + en-gap
|
||||||
|
|
||||||
|
let part-title-text = if sub_title != none { sub_title } else { none }
|
||||||
|
let part-title-en = if sub_title_en != none {
|
||||||
|
sub_title_en
|
||||||
|
} else if subtitle_en != none {
|
||||||
|
subtitle_en
|
||||||
|
} else {
|
||||||
|
subtitle
|
||||||
|
}
|
||||||
|
let part-box = if part-title-text != none or part-title-en != none or part-info != none {
|
||||||
|
let part-lines = ()
|
||||||
|
if part-title-text != none {
|
||||||
|
let part-cjk-indent = 0pt
|
||||||
|
part-lines.push(block(
|
||||||
|
width: 100%,
|
||||||
|
inset: (left: part-cjk-indent),
|
||||||
|
{
|
||||||
|
set text(font: cover-title-cjk, size: 18pt, fill: black)
|
||||||
|
set par(leading: 0.3em, first-line-indent: -part-cjk-indent)
|
||||||
|
[#part-title-text]
|
||||||
|
},
|
||||||
|
))
|
||||||
|
}
|
||||||
|
if part-title-en != none {
|
||||||
|
let parts = part-title-en.split(":")
|
||||||
|
if parts.len() > 1 {
|
||||||
|
let prefix = parts.at(0) + ":"
|
||||||
|
let body = parts.slice(1).join(":").trim()
|
||||||
|
part-lines.push(grid(
|
||||||
|
columns: (auto, 1fr),
|
||||||
|
column-gutter: 0.25em,
|
||||||
|
align: (left + top, left + top),
|
||||||
|
text(font: cover-title-latin, size: 18pt, fill: black)[#prefix],
|
||||||
|
box(
|
||||||
|
width: 100%,
|
||||||
|
{
|
||||||
|
set text(font: cover-title-latin, size: 18pt, fill: black)
|
||||||
|
set par(leading: 0.3em)
|
||||||
|
[#body]
|
||||||
|
},
|
||||||
|
),
|
||||||
|
))
|
||||||
|
} else {
|
||||||
|
part-lines.push(text(
|
||||||
|
font: cover-title-latin, size: 18pt, fill: black,
|
||||||
|
)[#part-title-en])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if part-lines.len() == 0 and part-info != none {
|
||||||
|
part-lines.push(text(
|
||||||
|
font: cover-title-cjk, size: 18pt, fill: black,
|
||||||
|
)[#part-info])
|
||||||
|
}
|
||||||
|
let part-value = stack(dir: ttb, spacing: 0.35 * unit, ..part-lines)
|
||||||
|
box(
|
||||||
|
width: 10.5cm - unit,
|
||||||
|
inset: (left: 0.1 * unit, right: 0.25 * unit),
|
||||||
|
align(left + top, part-value),
|
||||||
|
)
|
||||||
|
} else { none }
|
||||||
|
let part-y = title-end-y + 0.5 * unit
|
||||||
|
let part-height = if part-box != none { measure(part-box).height } else { 0pt }
|
||||||
|
if part-box != none {
|
||||||
|
place(top + left, dx: unit, dy: part-y, part-box)
|
||||||
|
}
|
||||||
|
let part-end-y = part-y + part-height
|
||||||
|
|
||||||
let metadata = ()
|
let metadata = ()
|
||||||
if number != none { metadata.push(("编号", number)) }
|
if number != none { metadata.push(("编号", number)) }
|
||||||
if author != none {
|
if author != none {
|
||||||
@@ -177,12 +249,12 @@
|
|||||||
if value != none { metadata.push((str(key), value)) }
|
if value != none { metadata.push((str(key), value)) }
|
||||||
}
|
}
|
||||||
let marker-height = 2 * unit
|
let marker-height = 2 * unit
|
||||||
let info-y = title-end-y + 0.45 * unit
|
let info-y = part-end-y + 0.45 * unit
|
||||||
|
|
||||||
let cells = ()
|
let cells = ()
|
||||||
for (label, value) in metadata {
|
for (label, value) in metadata {
|
||||||
cells.push(text(
|
cells.push(text(
|
||||||
font: (cover-cjk, cover-latin), size: 12pt,
|
font: (cover-latin, cover-cjk), size: 12pt,
|
||||||
weight: "medium", fill: luma(48%),
|
weight: "medium", fill: luma(48%),
|
||||||
)[#label])
|
)[#label])
|
||||||
cells.push(text(
|
cells.push(text(
|
||||||
@@ -191,7 +263,9 @@
|
|||||||
)[#value])
|
)[#value])
|
||||||
}
|
}
|
||||||
let info-content = if metadata.len() > 0 {
|
let info-content = if metadata.len() > 0 {
|
||||||
box(width: 21cm - 1.5 * unit,
|
box(
|
||||||
|
width: 21cm - 8.5 * unit,
|
||||||
|
inset: (left: 0.25 * unit, right: 0.25 * unit),
|
||||||
align(left + top, grid(
|
align(left + top, grid(
|
||||||
columns: (auto, 1fr),
|
columns: (auto, 1fr),
|
||||||
column-gutter: 0.6em,
|
column-gutter: 0.6em,
|
||||||
@@ -205,11 +279,7 @@
|
|||||||
// 左侧笔画与右侧笔画一样保持固定高度,不再随标题行数拉伸。
|
// 左侧笔画与右侧笔画一样保持固定高度,不再随标题行数拉伸。
|
||||||
// 标志在第七格独立收尾;下方长条依据文档信息的实际高度紧凑起笔。
|
// 标志在第七格独立收尾;下方长条依据文档信息的实际高度紧凑起笔。
|
||||||
tri(0, 6, "tr", sky)
|
tri(0, 6, "tr", sky)
|
||||||
let strip-y = if metadata.len() > 0 {
|
let strip-y = part-end-y + 0.18 * unit
|
||||||
info-y + info-height + 0.18 * unit
|
|
||||||
} else {
|
|
||||||
7 * unit
|
|
||||||
}
|
|
||||||
let strip-height = 29.7cm - strip-y
|
let strip-height = 29.7cm - strip-y
|
||||||
place(top + left, dy: strip-y, polygon(
|
place(top + left, dy: strip-y, polygon(
|
||||||
fill: sky, stroke: none,
|
fill: sky, stroke: none,
|
||||||
@@ -240,18 +310,24 @@
|
|||||||
)[signed]
|
)[signed]
|
||||||
let signed-size = measure(signed-label)
|
let signed-size = measure(signed-label)
|
||||||
place(top + left,
|
place(top + left,
|
||||||
dx: unit + signature-line-length - signed-size.width,
|
dx: unit,
|
||||||
dy: meta-y + apex-y - signed-size.height - 0.04 * unit,
|
dy: meta-y + apex-y - signed-size.height - 0.04 * unit,
|
||||||
signed-label)
|
signed-label)
|
||||||
|
|
||||||
// 三角形保留在距页底七个单位的位置,作为独立的封面装饰。
|
// 三角形保留在距页底七个单位的位置,作为独立的封面装饰。
|
||||||
// 文档信息不再与三角形连线,而是跟随主标题实际高度,排列在标题正下方。
|
// 文档信息不再与三角形连线,而是跟随主标题实际高度,排列在标题正下方。
|
||||||
|
|
||||||
place(top + left, dx: 1.25 * unit, dy: info-y, info-content)
|
place(
|
||||||
}
|
top + left,
|
||||||
|
dx: unit + signature-line-length,
|
||||||
|
dy: meta-y + apex-y + 0.3 * unit,
|
||||||
|
info-content,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
tri(2, 6, "tl", sky)
|
tri(2, 6, "tl", sky)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pagebreak(weak: true)
|
pagebreak(weak: true)
|
||||||
}
|
}
|
||||||
@@ -273,11 +349,10 @@
|
|||||||
// 无序列表整体缩进一个正文字符;圆点与正文仍使用 Typst 默认间距。
|
// 无序列表整体缩进一个正文字符;圆点与正文仍使用 Typst 默认间距。
|
||||||
set list(indent: 1em)
|
set list(indent: 1em)
|
||||||
|
|
||||||
// 标题字体:中文黑体,英文 Source Code Pro
|
// 正文标题与正文使用同一套中西文字体。
|
||||||
show heading: set text(font: (cover-latin, cover-cjk))
|
show heading: set text(font: (body-latin, body-cjk))
|
||||||
|
|
||||||
// 代码块与行内代码:西文使用 Source Code Pro,中文显式回退到正文宋体。
|
// 代码块与行内代码:西文使用 IBM Plex Mono,中文回退到正文中文字体。
|
||||||
// 避免 Source Code Pro 缺少中文字形时由系统选择到隶书等不合适字体。
|
|
||||||
show raw: set text(font: (mono-font, body-cjk))
|
show raw: set text(font: (mono-font, body-cjk))
|
||||||
|
|
||||||
// 块级代码:细边框、浅色背景与自动行号;行内代码不受影响。
|
// 块级代码:细边框、浅色背景与自动行号;行内代码不受影响。
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,107 @@
|
|||||||
|
#import "../NLI-doc-template.typ": cover, conf
|
||||||
|
|
||||||
|
#cover(
|
||||||
|
title: "NITLOAD 部歌",
|
||||||
|
title-en: "NITLOAD DEPARTMENT ANTHEM",
|
||||||
|
number: "NLI-DOC-260923001",
|
||||||
|
author: "Nitload Industry",
|
||||||
|
classification: "NON[无秘]SEC",
|
||||||
|
date: "2026 年 9 月",
|
||||||
|
)
|
||||||
|
|
||||||
|
#show: conf.with(number-pages: true)
|
||||||
|
|
||||||
|
= 第一章 说明
|
||||||
|
|
||||||
|
本文件为 Nitload 技术团队部歌《NITLOAD 部歌》的歌词与创作注释文档,用于统一收录歌词文本、段落结构及其中涉及的技术意象。
|
||||||
|
|
||||||
|
== 文档目的
|
||||||
|
|
||||||
|
本文件旨在为部歌的传阅、演唱与后续修订提供统一文本依据,保留歌词原有的节奏结构、技术指涉和创作语境。
|
||||||
|
|
||||||
|
== 内容范围
|
||||||
|
|
||||||
|
歌词意象横跨高能物理、微纳器件、集成电路、航天器与深空探测等领域,体现团队对基础科学、工程技术和未知边界的持续探索。本版已收录第一主歌与第三副歌,其余段落将在歌词定稿后补充。
|
||||||
|
|
||||||
|
== 编排说明
|
||||||
|
|
||||||
|
正文按歌词段落编排,每段独立分页;歌词采用居中排版,并在句行之间保留适当间距,以便阅读和演唱。歌词中的序号对应页下注释。
|
||||||
|
|
||||||
|
== 注释说明
|
||||||
|
|
||||||
|
注释用于说明歌词中的专业概念、技术过程、历史背景及创作来源,不构成对相关技术的完整定义。涉及专名、缩写和单位时,保留其通常使用的英文或国际写法。
|
||||||
|
|
||||||
|
#pagebreak()
|
||||||
|
|
||||||
|
= 第二章 歌词
|
||||||
|
|
||||||
|
#set par(first-line-indent: 0pt, justify: false, leading: 0.9em)
|
||||||
|
|
||||||
|
== 第一段 · 第一主歌
|
||||||
|
|
||||||
|
#align(center)[
|
||||||
|
穿越了光年外微纳间落入阵列中#footnote[高能粒子传感器(如超级神冈及中国青海的高能物理传感器),以及各种用途的 CMOS 传感器,都是阵列的形式,以获得高分辨率的数据。]化作图线上一闪
|
||||||
|
\
|
||||||
|
#v(0.8em)
|
||||||
|
在那瞬间,在那瞬间,
|
||||||
|
\
|
||||||
|
#v(0.8em)
|
||||||
|
于认识的边界#footnote[探索知识的边界、尝试技术的极限的人,可以成为“边界人物”(Frontier Person)。]上映入明晰的眼
|
||||||
|
\
|
||||||
|
#v(0.8em)
|
||||||
|
跃动的原子,迸发出光线#footnote[现代 EUV 光刻机使用二氧化碳激光器轰击锡滴,产生高能 13.5 nm 紫外光。]
|
||||||
|
\
|
||||||
|
#v(0.8em)
|
||||||
|
刻下了数字亦使用的咒言#footnote[现代芯片与指令集架构是数字计算的基石。“咒言”源自本部门“基于汇编语言语法特性的魔法描述方法”文创项目。]
|
||||||
|
\
|
||||||
|
#v(0.8em)
|
||||||
|
登上拉氏点#footnote[拉格朗日点,二体系统的引力平衡点。位于此点的航天器可以保持和二体的相对静止,常用于部署探测器和天文望远镜。],冲入环面间#footnote[粒子对撞机的探测器多为圆环形片状堆叠得到,其中一些称为“环面仪器”。]
|
||||||
|
\
|
||||||
|
#v(0.8em)
|
||||||
|
是从诞生的亘古传来二厘米微澜#footnote[宇宙微波背景辐射。]
|
||||||
|
]
|
||||||
|
|
||||||
|
#pagebreak()
|
||||||
|
|
||||||
|
== 第二段 · 第二主歌
|
||||||
|
|
||||||
|
#align(center)[
|
||||||
|
歌词待补。
|
||||||
|
]
|
||||||
|
|
||||||
|
#pagebreak()
|
||||||
|
|
||||||
|
== 第四段 · 第三副歌
|
||||||
|
|
||||||
|
#align(center)[
|
||||||
|
歌词待补。
|
||||||
|
]
|
||||||
|
|
||||||
|
#pagebreak()
|
||||||
|
|
||||||
|
== 第五段 · 第二副歌
|
||||||
|
|
||||||
|
#align(center)[
|
||||||
|
歌词待补。
|
||||||
|
]
|
||||||
|
|
||||||
|
#pagebreak()
|
||||||
|
|
||||||
|
== 第六段 · 第三副歌
|
||||||
|
|
||||||
|
#align(center)[
|
||||||
|
|
||||||
|
看跃入夜空羽翼渐开#footnote[指多数航天器入轨后展开天线、太阳能板和科学仪器的过程。]
|
||||||
|
\
|
||||||
|
#v(0.8em)
|
||||||
|
寻星扁舟聆微波#footnote[通过射电望远镜、成像传感器、专门天线等,探测细微电磁信号的过程。]
|
||||||
|
\
|
||||||
|
#v(0.8em)
|
||||||
|
皆承载着签名者#footnote[NASA 为首的多次探测器船票项目中,申请者的签名将在专门晶片上,伴随探测器前往目的地。]随金片#footnote[多艘探测器携带唱片、纪念碑或船票踏上旅程。较著名的有前苏联月球任务搭载的球形纪念章、阿波罗 11 号任务搭载的纪念碑、旅行者 1/2 号的金唱片,以及 21 世纪 NASA 深空任务的电子船票。]的问候与寄托
|
||||||
|
\
|
||||||
|
#v(0.8em)
|
||||||
|
这青绿色#footnote[航天器再入地球大气时,氮分子激发放出的青绿色。],在身披靛衣、皓目#footnote[现代太阳能板多为青黑色,并通过各种相机和传感器获得清晰且强大的视觉。]旅人的眼中
|
||||||
|
\
|
||||||
|
#v(0.8em)
|
||||||
|
正映照出星辰浩瀚,与翩然而落的炬火
|
||||||
|
]
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
看长空花与叶翻滚着被扭曲重构 天地间好是喧嚣
|
||||||
|
在那一天 在那一天 于抉择的路口前睁开明晰的眼
|
||||||
|
永恒的白昼 分解成蜉蝣 追随着少女曾走过的路线
|
||||||
|
登上制高点 浮现在眼前 是从无名的原野之中滋生的怀念
|
||||||
|
|
||||||
|
曾经于清醒梦相逢过的黑影在街道夹缝处呢喃细语着
|
||||||
|
在那明天 在那明天 于抉择的路口前无数次跨越
|
||||||
|
明哲保身的 贤者正 将遗忘的时间又重新聚敛
|
||||||
|
沿着海岸边 沿着海岸边 似曾相识的陌生火焰不住地跳跃
|
||||||
|
|
||||||
|
从地球深处沸腾起的碎语熔岩乘上风
|
||||||
|
皆承载着被舍弃的原住民们诚挚寄托
|
||||||
|
这人世间在恬静而又温和的少女眼中
|
||||||
|
会倒映出在黑夜里被唤起的万家灯火
|
||||||
|
|
||||||
|
看长空被日光烧灼成半抹朱红 融化留下火烧云一朵
|
||||||
|
在那一天 在那一天 于失落的路口前找回久远的初见
|
||||||
|
意识中涌现 无尽的昨天 随风的轨迹于回忆沦陷
|
||||||
|
沿着河岸边 沿着河岸边 素未谋面的幸福之花拒绝再凋谢
|
||||||
|
|
||||||
|
从地球深处沸腾起的碎语熔岩乘上风 皆承载着被舍弃的原住民们诚挚寄托 这人世间在恬静而又温和的少女眼中 会倒映出在黑夜里被唤起的万家灯火 从地球深处沸腾起的碎语熔岩乘上风 皆承载着被舍弃的原住民们诚挚寄托 这人世间在恬静而又温和的少女眼中 会倒映出在黑夜里被唤起的万家灯火
|
||||||
Reference in New Issue
Block a user