Files
Z User e45b68bb8b feat: IMAP mail sync with thread-to-contact matching (PRD §6.1)
Real IMAP connection via imapflow library:
- Connects to IMAP server (IMAPFlow, TLS on port 993)
- Fetches recent messages (configurable limit, default 20)
- Extracts: from, fromEmail, subject, date, snippet (200 chars)
- Thread-to-contact matching (PRD §6.1):
  1. Match sender email against persons table
  2. If no person match, extract domain and match against company.website
  3. Returns matchedCompany + matchedPerson for each email
- Audit-logged (action: crm.mailsync:imap)
- Zod validated (host, port, user, password, folder, limit)
- 502 on IMAP connection failure with detail
- 400 on validation failure

Tested: invalid creds → 502 'IMAP connection failed', missing host → 400
2026-10-27 22:50:50 +00:00

278 lines
12 KiB
Markdown
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 排版方向 Text Direction:横排 / 直排 / 混排
中文是世界上少数能**横竖两套排版系统并行**的文字。"用什么方向"是任何中文排版项目的第一个决策,而不是默认横排。本文给出方向决策树、参数对照、CSS 实现、地区风格差异。
## 一、方向决策树
```
内容主要属性是什么?
│
├─ 古籍 / 文言 / 诗词 / 书法集 / 题词 / 对联 ────────────→ 直排
├─ 邀请函 / 请柬 / 礼仪文书 / 书信复古 ──────────────→ 直排
├─ 博物馆图录 / 艺术画册中"诗题画跋"页 ────────────→ 直排
├─ 杂志 / 报纸 / 教材 / 学术论文 / 商务文档 ───────→ 横排
├─ 现代小说 / 散文 / 网页 / H5 / App ───────────────→ 横排
└─ 工具书 / 字典 / 辞海 ───────────────────────→ 横排(直排版多见于民国老版本)
需不需要混排?
│
├─ 直排中遇 1 字英文/缩略词 ────→ 正立排(保持横向单字)
├─ 直排中遇 2-3 位阿拉伯数字 ───→ 纵中横排 tate-chu-yoko(保持横向小组)
├─ 直排中遇整段西文/词组 ───────→ 顺时针 90° 旋转
├─ 直排中遇竖排小注 ──────────→ 双行夹注(注文两行平行,字号 1/2)
├─ 横排中遇直排标题/匾额 ──────→ 局部 writing-mode: vertical-rl
└─ 横排中遇直排小段诗词引文 ───→ 局部直排("插秧式")
```
## 二、横排 vs 直排参数对照
| 维度 | 横排 | 直排 |
|---|---|---|
| 文字方向 | 左 → 右 | 上 → 下 |
| 行方向 | 上 → 下 | **右 → 左** |
| 翻页方向 | 从左向右翻(**左侧装订**) | 从右向左翻(**右侧装订**) |
| 正面页位置 | 右页(奇数页) | 左页(奇数页) |
| 分栏方向 | 垂直切分(左中右栏) | 水平切分(上中下栏) |
| 图/表标题位置 | 上方 / 下方 | 左侧 / 右侧 |
| 表头行位置 | 上方 | 右侧 |
| 表头列位置 | 左侧 | 上方 |
| 末页多栏行数 | 各栏尽量对齐,余空在末栏末尾 | 顺其结束,各栏行数可不齐 |
| 行长上限 | ≤ 48 字 | ≤ 55 字 |
| 行长下限 | ≥ 10 字 | ≥ 10 字 |
| CSS writing-mode | `horizontal-tb`(默认) | `vertical-rl` |
## 三、标点在横/直排中的差异(大陆 GB/T 15834-2011)
**关键差异点。错配会让版面瞬间显业余。**
| 标点 | 横排(大陆) | 直排(大陆) | 港台 |
|---|---|---|---|
| 句号 。 | 字面左下角 | 字面右上角 | 字面正中 |
| 逗号 , | 字面左下角 | 字面右上角 | 字面正中 |
| 顿号 、 | 字面左下角 | 字面右上角 | 字面正中 |
| 冒号 : | 字面左下角,直立 | **直立偏右**(不转 90°) | 居中直立 |
| 分号 ; | 字面左下角,直立 | **直立偏右**(不转 90°) | 居中直立 |
| 问号 ? | 字面左下角,直立 | **直立**(不转 90°) | 居中直立 |
| 叹号 ! | 字面左下角,直立 | **直立**(不转 90°) | 居中直立 |
| 引号(双) | 弯引号 " " | **直角引号 「」**(双) | 直角引号 |
| 引号(单) | 弯引号 ' ' | 直角引号 『』 | 直角引号 |
| 书名号 | 《》〈〉 | 《》(直立) | 甲式波浪 ﹏(台湾)/ 乙式《》 |
| 破折号 | —— 占 2 字水平居中 | **占 2 字垂直居中** | 同 |
| 省略号 | …… 占 2 字,6 点水平居中 | 占 2 字,6 点**垂直居中** | 同 |
**反例(要避免)**:
- 把日文规则套用到中文直排:冒号、分号、问号、叹号在日文直排转 90° 躺倒;**中文必须保持直立**。某代 macOS 因 Unicode UAX#50 早期不完善曾把中文比照日文,是错误案例。
- 直排正文用弯引号 " "(应改用直角「」)。
## 四、直排中混排西文的 3 种方法(W3C CLReq §2.1.3)
直排文本中遇到西文/数字时,根据长度选用:
### 方法 1:正立排(Upright)
- 用于:**单个字母、首字母缩略词**(如 GDP、CPU、A)
- 做法:用与汉字等宽的字体或全角字符,与汉字同方向逐字排
- CSS:`text-orientation: upright`
- 示例:`一个 G D P 增速…` (G、D、P 各占一格,与汉字同方向)
### 方法 2:顺时针 90° 旋转(Rotated)
- 用于:**一般单词 / 句子 / 4 位以上数字**(如 "JavaScript"、"2024"、"the quick brown fox")
- 做法:用比例字体,整词整句旋转
- 汉字与西文之间间距 **≤ 1/4 汉字宽**;西文位于行首/行尾时**不加空白**
- CSS:`text-orientation: sideways`(即默认行为)
### 方法 3:纵中横排(Tate-chu-yoko 縦中横)
- 用于:**2–3 位阿拉伯数字、短缩写**(如 "3.0"、"A+"、"2B"、"21"、"AM"、"99")
- 做法:比例字体,保持正方向横置;宽度与行幅相当或稍出
- 活字时代严格不超过 1 个汉字宽;现今可凸出行间
- CSS:`text-combine-upright: all`
- 示例:年龄 `21` 岁、`3.0` 升发动机、温度 `25` ℃
### 混排间距规则(直排同横排)
- 直排中**通常不用弯引号**(应改用直角引号)
- 若引用西文且用弯引号,需跟随被引文旋转
- 直排中阿拉伯数字内部不可分行,破折号/省略号不可分行
## 五、横排中嵌入直排
现代横排文档中嵌入小段直排的场景:
- 标题 / 匾额 / 题字
- 古诗引文(一首七绝直排展示,强化古意)
- 对联(两幅竖排平行展示)
- 印章、闲章、款识
- 杂志专题"穿插式"页面
**CSS 实现**:
```css
.vertical-quote {
writing-mode: vertical-rl; /* 直排:从右向左 */
text-orientation: mixed; /* 汉字直立,西文转横 */
height: 20em;
margin: 0 1em;
}
```
**注意事项**:
- 直排段在横排里要"做容器"——给定明确高度,不要让它自由撑开
- 直排标点要切换到右上角形态;不要直接搬横排标点
- 嵌入位置遵守"文意停顿"——句间嵌入而非词间
## 六、装订与翻页方向
装订方向直接影响版心位置和阅读体验,不能搞反。
| 方向 | 装订侧 | 翻页方向 | 第一页(正面)位置 | 用途 |
|---|---|---|---|---|
| **横排左翻** | 左侧 | 从左向右 | **右页**(奇数页) | 现代中文书、教材、报告、所有英文书 |
| **直排右翻** | 右侧 | 从右向左 | **左页**(奇数页) | 古籍、文言、诗集、传统书法集 |
| **直排左翻(错的)** | 左侧 | 从左向右 | — | 中日韩三国都不用 |
**关键检查项**:
- 大标题必须出现在**正面页**(横排右页 / 直排左页),不能开在反面页
- 章节末页留出余白时,留白方向匹配阅读方向(横排留下方、直排留下方)
- 跨页大图:横排左页向右延展、直排右页向左延展
## 七、CSS writing-mode 完整指南
```css
/* 横排(默认) */
.horizontal {
writing-mode: horizontal-tb; /* horizontal, top-to-bottom */
}
/* 直排(中文、日文、传统蒙文) */
.vertical {
writing-mode: vertical-rl; /* vertical, right-to-left lines */
text-orientation: mixed; /* 汉字立、半角西文转 90° */
}
/* 直排但行从左向右(少见,部分新蒙文) */
.vertical-lr {
writing-mode: vertical-lr;
}
/* 直排内单字符强制立起来(缩略词、单字母) */
.upright {
text-orientation: upright;
}
/* 纵中横排(数字小组保持横置) */
.tcy {
text-combine-upright: all;
}
```
完整 HTML 示例:
```html
<article style="writing-mode: vertical-rl; height: 30em;">
<p>
秦时明月汉时关,万里长征人未还。
但使<span style="text-combine-upright: all;">21</span>世纪有李广,
不教胡马度阴山。
</p>
</article>
```
## 八、地区风格三大体系
地区差异的索引表——一个项目锁定一个地区,按下面维度逐项对齐。具体执行细节看对应文件:标点详见 `punctuation.md`、字体详见 `fonts.md`、避头尾详见 `punctuation.md § 四`。
| 维度 | 大陆简体 | 港台繁体 | 日文 |
|---|---|---|---|
| 标点位置 | **横排左下、直排右上** | **居中**(横直排都一样) | 横排左下、直排右上(同大陆) |
| 避头尾严格度 | GB 级 / strict 级 | 多不严格(标点居中无突兀) | 严格 |
| 标点风格 | 开明式(句末全宽、句内半宽)多 | 居中式 + 多不调宽度 | 开明式 + 严格挤压 |
| 直排冒号分号 | 直立偏右 | 居中直立 | **转 90° 躺倒** |
| 引号 | 弯引号 ""''(横)/ 直角「」(直) | 直角「」『』(先单后双) | 直角「」 |
| 书名号 | 《》〈〉 | 甲式波浪 ﹏(书底)+ 乙式《》 | 二重括号 『』 |
| 间隔号 · | 占**半字宽** | 占**全字宽** | 占全字宽 |
| 公文字体 | **仿宋** | **楷体** | 明朝体 |
**核心心法**:项目开始就锁定地区风格,不要"中港台日"混用。
## 九、什么时候直排?什么时候横排?
### 必须直排
- 古籍影印 / 古籍今译保留原貌
- 文言文学校教材(部分台湾教材)
- 中医典籍、佛经、道经
- 书法作品集、字帖
- 传统戏曲剧本(旧版)
- 朱批奏折、家书复刻
### 强烈推荐直排
- 当代古典诗词集
- 茶艺 / 香道 / 国画相关书籍
- 高端艺术画册"诗题画跋"页
- 邀请函 / 请柬 / 谢卡(小段)
- 博物馆图录的部分内页(混合)
- 题字 / 题词 / 闲章
### 可以选直排(增加古意 / 仪式感)
- 散文集封面
- 招贴海报标题
- 茶包装、白酒包装文案
- 婚礼喜帖
- 复古风咖啡店菜单
### 不要直排
- 现代长文(用户已习惯横向扫视)
- 表格密集的文档(直排表格难做)
- 大量中英混排的技术 / 学术内容
- 网页正文(写读不便、生态差)
- App / H5(小屏直排压力大)
## 十、混排(横直交叉)的进阶玩法
不要把"混排"理解为"破格"——这是中文排版的基础语法。常见 5 种:
### 1. 横排正文 + 直排引文
正文横排,引用的古诗、对联、题词单段直排,与正文形成节奏对比。
```html
<article class="horizontal-body">
<p>李白《静夜思》写道:</p>
<blockquote class="vertical-quote">
床前明月光,疑是地上霜。<br>
举头望明月,低头思故乡。
</blockquote>
<p>这首诗体现了…</p>
</article>
```
### 2. 直排正文 + 横排数据
古籍今译类,正文直排,但年表、数据表、地图说明等横排。靠纸张/底色区分。
### 3. 跨页"半横半直"
左页直排(古文原文)、右页横排(今译),翻页对照。常见于古籍今译。
### 4. 标题直排、正文横排
封面 / 章首页用直排大字标题,营造仪式感;内页正文回到横排实用。
### 5. 双行夹注(小注)
直排正文中插入双行夹注:两行小注同高,字号为正文 1/2,平行排列。古籍标配。
```
正┃ 双行夹注:
文┃ 上行注┃下行注
正┃ 上行注┃下行注
文┃
```
## 十一、检查清单(方向相关)
排印完成前必过:
- [ ] 排版方向(横 / 直 / 混)是否与内容气质匹配?
- [ ] 装订方向是否与排版方向对应?(横左翻 / 直右翻)
- [ ] 大标题是否在正面页(横右页 / 直左页)?
- [ ] 直排中数字是否用了纵中横排?
- [ ] 直排中单字英文是否用了正立排?
- [ ] 直排标点是否切换到右上角形态?
- [ ] 直排冒号分号是否保持直立(没躺成日式)?
- [ ] 直排引号是否改用了直角「」?
- [ ] 地区风格是否一致?(没把港台居中标点 + 大陆 GB 避头尾混用)
- [ ] 横排嵌直排的段落是否给了明确高度?
- [ ] 图表标题方向是否匹配主排版方向?
- [ ] CSS `writing-mode` 和 `text-orientation` 是否成对设置?