Przeglądaj źródła

update genek-paper-2-all

zhxd 2 miesięcy temu
rodzic
commit
51472ea9b4

+ 109 - 223
genek-paper-2-all/SKILL.md

@@ -1,273 +1,159 @@
 ---
 name: genek-paper-2-all
-description: 将学术论文转换为会议海报(HTML)、PPT演示文稿和交互式网站。涵盖论文图片提取(优先从出版商网站下载)、海报内容规范(Background/Results/Methods/Conclusions等板块)、折叠式图表展示、物种图标、流程图等。当用户提及"论文转海报"、"论文转PPT"、"提取论文图片"、"学术海报"时使用此技能。
+description: 从论文生成海报、网页版 PPT、PPTX 的统一 pipeline。内容一致,海报使用原图,slides 和 PPT 使用拆分后的 panel 图。当用户提及"论文转海报"、"论文转PPT"、"学术海报"、"网页PPT"时使用此技能。
 ---
 
-# 学术论文转换全流程(Paper2All)
+# Paper2All 统一 Pipeline
 
-## 概述
+从单篇论文生成三种展示格式,**内容一致**。图片策略:**海报使用原图**(`figures/fig{N}.png`),**slides 和 PPT 使用拆分后的 panel 图**(`figures/panels/`)。
 
-将学术论文(PDF/LaTeX)转换为多种展示格式:
-1. **Paper2Poster**:HTML 交互式会议海报
-2. **Paper2PPT**:PowerPoint 演示文稿(使用 pptxgenjs)
-3. **Paper2Web**:交互式学术主页
+## 目录结构(按论文隔离)
 
-## 适用场景
-
-- 会议海报制作、学术演示准备
-- 论文宣传推广材料生成
-- 论文图片提取与复用
-- 用户提及:论文转海报、论文转PPT、提取论文图片、学术海报、conference poster
-
----
-
-## 一、论文图片提取(关键步骤)
-
-### 优先级策略
-
-| 优先级 | 方法 | 质量 | 适用场景 |
-|--------|------|------|----------|
-| **1** | **出版商网站下载** | 纯图表,无页眉/图注 | 已发表的开放获取论文 |
-| **2** | `pdftoppm` 整页转图 + 裁剪 | 需后处理 | 无法访问网页版时 |
-| **3** | `pdfimages` 提取嵌入图 | 碎片化 | 仅作参考,通常不推荐 |
-
-### 方法一:出版商网站下载(推荐)
-
-**Springer Nature / BMC 系列期刊** URL 模板:
+每篇论文以 **第一作者姓氏 + 年份** 命名独立子目录(与 `genek-extract-figures`、`genek-split-figures` 约定一致):
 
 ```
-https://media.springernature.com/full/springer-static/image/art%3A{DOI_encoded}/MediaObjects/{journal_id}_{year}_{article_id}_Fig{N}_HTML.png
+papers/
+└── {Author}{Year}/                          (如 Li2022、Zhang2023)
+    ├── paper.pdf
+    ├── figures/
+    │   ├── fig1.png ... figN.png            (原图,genek-extract-figures)
+    │   └── panels/
+    │       ├── fig1_A.png                   (拆分后的 panel)
+    │       ├── fig1_BC.png
+    │       └── ...
+    ├── poster.html
+    ├── slides.html
+    ├── create_pptx.js
+    └── presentation.pptx
 ```
 
-DOI 解析规则(以 `10.1186/s12915-022-01301-7` 为例):
-- `journal_id` = `12915`(s 后面的数字)
-- `year` = `2022`
-- `article_id` = `1301`(最后的序号,去掉 `-7` 修订号)
-
-批量下载脚本:
-```bash
-for i in 1 2 3 4 5 6; do
-  curl -sL -o "figures/fig${i}.png" \
-    "https://media.springernature.com/full/springer-static/image/art%3A10.1186%2Fs12915-022-01301-7/MediaObjects/12915_2022_1301_Fig${i}_HTML.png"
-done
-```
+## 五步通用流程
 
-其他出版商 URL 规律详见 → [references/figure-extraction.md](references/figure-extraction.md)
+| 步骤 | 内容 | 依赖 |
+|------|------|------|
+| **S1** | 阅读论文,提取结构化内容(标题/作者/项目设计/Introduction/Methods/Results/Conclusions) | — |
+| **S2** | 提取 Figure 原图 → `figures/fig1.png` … | `genek-extract-figures` |
+| **S3** | 对每张 Figure 拆分 panel → `figures/panels/fig{N}_{panels}.png` | `genek-split-figures` |
+| **S4** | 用同一份内容 + panel 图生成 poster.html、slides.html、presentation.pptx | 见 [poster-components](references/poster-components.md)、[slides-components](references/slides-components.md)、`pptx` skill |
+| **S5** | 本地预览,检查图片、交互、双语、三格式内容一致 | — |
 
-### 方法二:PDF 整页转图(备选)
+### Panel 命名规范
 
-```bash
-# 300 DPI 高清转换
-pdftoppm -png -r 300 paper.pdf figures/page
+拆分结果统一命名:
 
-# 需要 Pillow 裁剪页眉/页脚(精度难保证,仅在方法一不可用时使用)
-```
+- 单 panel:`fig1_A.png`
+- 多 panel 合并为一组:`fig1_BC.png`、`fig1_DEFG.png`
 
-### 图片命名规范
+### 图片使用规则
 
-按论文原始编号命名:`fig1.png` ~ `fig{N}.png`,删除中间过程文件。
+| 格式 | 使用图片 | 路径 |
+|------|---------|------|
+| poster.html | **原图** | `figures/fig{N}.png` |
+| slides.html | **panel 图** | `figures/panels/fig{N}_{panels}.png` |
+| presentation.pptx | **panel 图** | `figures/panels/fig{N}_{panels}.png` |
 
----
+海报空间充裕,用原图展示完整 Figure 更直观;slides/PPT 逐页讲解,用拆分后的 panel 图对应每个 Result 更清晰。
 
-## 二、学术海报内容规范
+### 项目设计(Study Design)
 
-### 必备板块
+从论文 Methods/Results 中提取实验设计信息,以**表格 + 关键统计数字**呈现。三格式均需包含。
 
-```
-海报结构(3列布局):
-├── Header:标题 + 作者 + 单位
-├── 第1列
-│   ├── Background(背景 + 物种列表 + 层级图)
-│   ├── Study Design(样本设计 + 测序方案 + 数据量)
-│   └── Bioinformatics Methods(流程图)
-├── 第2列
-│   ├── Results 1(发现卡片 + 折叠图)
-│   └── Results 2(发现卡片 + 折叠图)
-├── 第3列
-│   ├── Results 3(发现卡片 + 折叠图)
-│   └── Results 4(发现卡片 + 折叠图)
-├── Conclusions(跨2-3列,编号列表)
-└── Footer:Data Availability + Funding + Correspondence
-```
+常见字段(按论文实际内容选取,不同领域可增减):
 
-### 各板块要求
+| 字段 | 适用场景 | 示例 |
+|------|---------|------|
+| 物种 (Species) | 动物/植物/微生物研究 | Human, Mouse, Chicken 等 |
+| 样本类型 (Sample) | 所有实验研究 | Fibroblast cell lines, Tumor tissue, Serum |
+| 样本数量 (Replicates) | 所有实验研究 | 1–5 replicates per species |
+| 患者/个体 (Cohort) | 临床/群体研究 | 500 patients, 1200 healthy controls |
+| 实验技术 (Technology) | 所有组学研究 | Hi-C, RNA-seq, ATAC-seq, WGS |
+| 测序平台 (Platform) | 测序类研究 | Illumina HiSeq X Ten |
+| 测序量 (Sequencing depth) | 测序类研究 | ~230M contacts per library |
+| 分辨率 (Resolution) | 组学数据分析 | 20 kb, single-cell |
+| 参考基因组 (Reference) | 基因组学研究 | GRCh38, GRCm38 等 |
+| 时间点 (Timepoints) | 纵向/发育研究 | E8.5, E10.5, E14.5, P0, Adult |
+| 处理条件 (Treatment) | 干预/药物研究 | Control vs. Drug (10 μM, 48h) |
 
-**Study Design(项目设计)**:
-- 统计概览:物种数、文库数、总接触数、分辨率等(stat-box 展示)
-- 样本表格:物种、重复数、基因组大小、平均接触数
-- 测序方案:平台、酶切、标记方法
-- 数据质量:原始数据量 → 清洗量、Q20/Q30、重复率等
+如论文涉及多物种/多样本,优先提取为一张汇总表。
 
-**Methods(生信方法)**:
-- 用 CSS 流程图展示(非纯文本),从原始数据 → QC → 比对 → 矩阵构建 → 分支分析
-- 末尾用 flow-branch 展示并行分析模块
+#### 多物种研究的进化关系要求
 
-**Results(结果)**:
-- 每个结果板块含 finding-card(发现卡片)+ 折叠图表区
-- 重要发现用 `.finding-card.important` 高亮
+当论文涉及 **≥3 个物种的跨物种比较** 时,Study Design 中必须包含:
 
-### 物种图标
+1. **简易系统发育树(cladogram)**:用 CSS 组件展示物种间拓扑关系(不需要标注分化时间)
+2. **类群分组着色**:用颜色区分主要分类群,如哺乳类/鸟类/鱼类、或脊椎/无脊椎
+3. **外群标识**:明确标出外群物种
 
-多物种研究中,**不使用 emoji**(跨平台不稳定),改用 CSS 圆形缩写:
+组件实现见 [poster-components.md → Cladogram](references/poster-components.md)。
 
-```html
-<span class="sp-icon mammal-icon">Hu</span> Human
-<span class="sp-icon bird-icon">Ch</span> Chicken
-<span class="sp-icon fish-icon">Zf</span> Zebrafish
-```
+不涉及跨物种比较的论文(如单物种研究、临床队列研究)不需要 cladogram。
 
-按分类着色:哺乳类(蓝色)、鸟类(暖橙)、鱼类(绿色)。
+## 海报布局规则
 
-### 折叠图表 + 放大查看
+### 三列 Grid 布局原则
 
-使用 `<details>/<summary>` 实现折叠,配合 lightbox 实现点击放大
+海报采用 48in 宽、3 列 grid。各区域固定分配
 
-```html
-<details class="fig-collapse">
-  <summary>Figure 1 — 标题描述</summary>
-  <div class="fig-content">
-    <div class="fig-image-container">
-      <img src="figures/fig1.png" alt="Figure 1">
-      <div class="fig-caption">图注说明</div>
-    </div>
-  </div>
-</details>
 ```
-
-Lightbox 实现要点:
-- fixed overlay + `z-index: 9999` + 半透明黑色背景
-- `cursor: zoom-in`(图片)/ `cursor: zoom-out`(overlay)
-- 支持 Esc 键关闭
-
-详细 CSS/HTML 模板见 → [references/poster-guide.md](references/poster-guide.md)
-
-### 中英文双语切换
-
-海报**默认同时输出中英文内容**,通过页面右上角语言切换按钮在线切换:
-
-实现方式:用 `data-lang` 属性标记所有文本元素,JS 控制显示/隐藏。
-
-```html
-<!-- 每段文本提供双语版本 -->
-<p data-lang="en">The 3D architecture of the genome...</p>
-<p data-lang="zh">基因组的三维架构...</p>
+         Col 1                Col 2                    Col 3
+Header   ──────────────────── 全宽 ─────────────────────
+Row 1    Background           Study Design (跨 2–3 列)
+Row 2    Methods              Result 1                 Result 2
+Row 3    Conclusions          Result 3                 Result 4
+Row 4                         Result 5                 Result 6
+Footer   ──────────────────── 全宽 ─────────────────────
 ```
 
-```html
-<!-- 语言切换按钮(fixed 定位,右上角) -->
-<div class="lang-switch">
-  <button class="lang-btn active" data-target="en">EN</button>
-  <button class="lang-btn" data-target="zh">中文</button>
-</div>
-```
+**第 1 行 = 概览行**:Background(Col 1)和 Study Design(Col 2–3)并排,让读者一眼获得研究背景与实验设计全貌。Study Design 跨 2 列以容纳表格和 cladogram。
 
-切换逻辑:
-```javascript
-document.querySelectorAll('.lang-btn').forEach(function(btn){
-  btn.addEventListener('click', function(){
-    var lang = this.dataset.target;
-    document.querySelectorAll('[data-lang]').forEach(function(el){
-      el.style.display = el.dataset.lang === lang ? '' : 'none';
-    });
-    document.querySelectorAll('.lang-btn').forEach(function(b){ b.classList.remove('active'); });
-    this.classList.add('active');
-  });
-});
-// 初始化:默认显示英文
-document.querySelectorAll('[data-lang="zh"]').forEach(function(el){ el.style.display = 'none'; });
-```
+**第 1 列 Row 2 = Methods**:紧接 Background 下方,优先用流程图替代文字。流程图中每一步必须标注所使用的**软件工具名称**(如 HiC-Pro、Juicer、cooltools、FitHiC 等),便于读者复现。
 
-注意事项:
-- 板块标题(section-title)、finding-card 内容、结论条目等**均需双语标记**
-- 图表、统计数字、物种缩写(Hu/Mo/Ch 等)中英文通用,无需重复
-- 表格可共用结构,仅表头文字需双语
-- 语言按钮用 `position: fixed; top: 0.2in; right: 0.3in; z-index: 100;` 固定
+**第 1 列 Row 3 = Conclusions**:紧接 Methods 下方,深色渐变背景 + 编号列表,作为第 1 列的视觉终点。
 
-详细 CSS/JS 实现见 → [references/poster-guide.md](references/poster-guide.md)
+**第 2–3 列 = Result 区域**:从 Row 2 开始,严格按 **从左到右、从上到下** 排列。Result 数量不同时调整行数:
+- 2 个 Result → 1 行 × 2 列
+- 3–4 个 → 2 行 × 2 列(奇数时最后一行只占 1 格)
+- 5–6 个 → 3 行 × 2 列
+- ≥7 个 → 考虑合并相近的 Result
 
----
+### 视觉风格
 
-## 三、HTML/CSS 技术要点
-
-### 特殊字符处理
-
-| 场景 | 正确写法 | 错误写法 |
-|------|----------|----------|
-| HTML 正文 | `&#x25B6;`(▶) | 直接粘贴 emoji |
-| CSS `content` | `content: '\25B8'` | `content: '&#x25B8;'` |
-| 破折号 | `&#x2014;` | `—`(可能编码错误) |
-
-### 关键 CSS 规则
-
-```css
-/* 折叠箭头旋转 */
-details summary::before {
-  content: '\25B8';
-  transition: transform 0.2s;
-  display: inline-block;
-}
-details[open] summary::before {
-  transform: rotate(90deg);
-}
-
-/* 图片自适应 */
-.fig-image-container img {
-  max-width: 100%;
-  height: auto;
-  cursor: zoom-in;
-}
-
-/* 海报打印尺寸 */
-.poster { width: 48in; }
-
-@media print {
-  body { background: white; padding: 0; }
-  details { open: true; }
-}
-```
+- 现代交互风
+- 每个 Result 使用**独立 accent 色**作为顶部边框,通过颜色区分不同发现
+- Result 卡片带**编号圆标**(绝对定位),引导阅读顺序
+- 关键 Figure **默认展开**(`<details open>`),次要 Figure 折叠
+- Conclusions 位于 Col 1 底部,使用**深色渐变背景 + 编号列表**,作为第 1 列视觉终点
+- Footer 包含:数据可用性、致谢/资助、通讯作者联系方式
 
-### 注意事项
+## 三格式内容映射
 
-- `<summary>` 中的箭头由 CSS `::before` 生成,HTML 文本中**不要**重复放箭头字符
-- 海报物理尺寸(如 48×36 英寸)在浏览器中显示很大,需缩放查看
-- 使用 `python3 -m http.server` 本地预览,确保图片路径正确
+同一内容在不同格式中的呈现方式:
 
----
-
-## 四、PPT 生成(Paper2PPT)
+| 内容 | poster.html | slides.html | presentation.pptx |
+|------|-------------|-------------|--------------------|
+| 标题/作者/单位 | Header 区域 | 标题 slide | Title slide |
+| Background | Row 1 Col 1,含 finding-card 高亮研究空白 | 1–2 页 slide | 1–2 张幻灯片 |
+| 项目设计 | Row 1 Col 2–3,Stat box + 表格(多物种时含 cladogram) | 1 页表格 slide | 1 张表格幻灯片 |
+| Methods | Row 2 Col 1,流程图(每步标注软件工具名) | 1–2 页 slide | 1–2 张幻灯片 |
+| 每个 Result | 编号圆标 + Finding card + **原图**(折叠/展开) | 每 result 1 页,内嵌 **panel 图** | 每 result 1 张,插入 **panel 图** |
+| Conclusions | Row 3 Col 1,深色渐变背景,编号列表 | 总结 slide | Summary slide |
+| Figure 图片 | **原图** `figures/fig{N}.png`,折叠 + Lightbox | **panel 图** `figures/panels/`,内嵌可放大 | **panel 图**,插入幻灯片 |
+| Footer | 数据可用性 / 致谢 / 联系方式 | 末页 slide | 末页幻灯片 |
 
-使用 pptxgenjs(Node.js)生成:
+## 双语要求
 
-```bash
-npm install pptxgenjs
-node create_pptx.js
-```
+三种格式均需支持中英文切换:
 
-详细用法参考 pptx SKILL 中的 pptxgenjs.md。
+- **poster.html / slides.html**:`data-lang="en"` / `data-lang="zh"` 标记文本,右上角语言切换按钮,默认英文。
+- **presentation.pptx**:在 speaker notes 中放中文翻译,或按需生成两套 slide(先英文再中文)。
 
----
+## 依赖 skill
 
-## 五、工作流程
-
-```
-1. 阅读论文 PDF,提取核心内容
-   │
-2. 提取论文图片
-   ├── 尝试从出版商网站下载(优先)
-   └── 失败则用 pdftoppm + 裁剪
-   │
-3. 生成目标格式
-   ├── 海报:HTML 文件 + figures/ 目录
-   ├── PPT:Node.js + pptxgenjs
-   └── 网站:交互式 HTML
-   │
-4. 预览验证
-   ├── python3 -m http.server 本地预览
-   ├── 检查图片加载、折叠展开、放大功能
-   └── 验证物种图标、流程图、特殊字符显示
-```
+- **图片提取**:`genek-extract-figures` → 原图到 `figures/`
+- **Panel 拆分**:`genek-split-figures` → 子图到 `figures/panels/`
+- **PPT 生成**:`pptx` skill(pptxgenjs)→ 生成 .pptx
 
-## 参考文档
+## 组件与参考
 
-- [references/figure-extraction.md](references/figure-extraction.md) — 各出版商图片提取详细指南
-- [references/poster-guide.md](references/poster-guide.md) — 海报 HTML/CSS 完整模板与样式
+- 海报:布局与交互组件 → [references/poster-components.md](references/poster-components.md)
+- 网页 PPT:翻页、全屏、slide 类型 → [references/slides-components.md](references/slides-components.md)

+ 0 - 119
genek-paper-2-all/references/figure-extraction.md

@@ -1,119 +0,0 @@
-# 学术论文图片提取指南
-
-## 出版商网站图片 URL 模板
-
-### Springer Nature / BMC 系列
-
-适用期刊:BMC Biology, Nature, Nature Methods, Genome Biology 等。
-
-**URL 格式**:
-```
-https://media.springernature.com/full/springer-static/image/art%3A{DOI_URL_ENCODED}/MediaObjects/{journal_id}_{year}_{article_id}_Fig{N}_HTML.png
-```
-
-**DOI 解析示例**:
-
-| DOI | journal_id | year | article_id |
-|-----|-----------|------|------------|
-| `10.1186/s12915-022-01301-7` | 12915 | 2022 | 1301 |
-| `10.1038/s41586-023-06004-9` | 41586 | 2023 | 6004 |
-| `10.1186/s13059-021-02500-z` | 13059 | 2021 | 2500 |
-
-解析规则:
-- `journal_id`:DOI 中 `/s` 后面到 `-` 之间的数字
-- `year`:紧接其后的 4 位年份
-- `article_id`:年份后到末尾修订号之间的数字(去掉 `-N` 后缀)
-
-**完整下载脚本**:
-```bash
-#!/bin/bash
-DOI="10.1186/s12915-022-01301-7"
-JOURNAL_ID="12915"
-YEAR="2022"
-ARTICLE_ID="1301"
-FIG_COUNT=6
-
-DOI_ENCODED=$(echo "$DOI" | sed 's|/|%2F|g; s|:|%3A|g')
-
-mkdir -p figures
-for i in $(seq 1 $FIG_COUNT); do
-  url="https://media.springernature.com/full/springer-static/image/art%3A${DOI_ENCODED}/MediaObjects/${JOURNAL_ID}_${YEAR}_${ARTICLE_ID}_Fig${i}_HTML.png"
-  echo "下载 Fig ${i}..."
-  curl -sL -o "figures/fig${i}.png" "$url"
-  if [ -s "figures/fig${i}.png" ]; then
-    echo "  成功: $(wc -c < "figures/fig${i}.png") bytes"
-  else
-    echo "  失败: 文件为空,URL 可能不正确"
-  fi
-done
-```
-
-### 其他出版商(待补充)
-
-| 出版商 | 图片 URL 特征 | 备注 |
-|--------|--------------|------|
-| Elsevier (Cell/Lancet) | `ars.els-cdn.com` 域名 | 通常需要从文章页面解析 |
-| Wiley | `onlinelibrary.wiley.com` | 图片嵌入在文章页面 |
-| Oxford University Press | `oup.com` 域名 | 类似 Springer 有独立图片页 |
-| PLOS | `journals.plos.org` | 开放获取,图片可直接下载 |
-| MDPI | `mdpi.com` | 开放获取,图片 URL 规律性强 |
-
-> 遇到新出版商时,先访问论文网页版,在文章页面中查找 "Full size image" 或类似链接,
-> 用浏览器开发者工具查看图片的实际 URL,总结 URL 模板后补充到此文档。
-
----
-
-## 备选方案:PDF 提取
-
-### pdftoppm 整页转图
-
-```bash
-# 前置条件:安装 Poppler
-# macOS: brew install poppler
-# Ubuntu: apt install poppler-utils
-
-# 300 DPI 高清转换所有页面
-pdftoppm -png -r 300 paper.pdf figures/page
-
-# 仅转换特定页面(如第3页)
-pdftoppm -png -r 300 -f 3 -l 3 paper.pdf figures/page
-```
-
-转换后需要人工确认各 Figure 对应的页码,然后重命名:
-```bash
-mv figures/page-03.png figures/fig1.png
-mv figures/page-05.png figures/fig2.png
-# ...
-rm figures/page-*.png  # 删除中间文件
-```
-
-### Pillow 裁剪(不推荐,精度差)
-
-如果必须裁剪,使用以下 Python 脚本:
-
-```python
-from PIL import Image
-
-img = Image.open("figures/fig1.png")
-# crop box: (left, upper, right, lower)
-# 需要逐张图手动确定坐标,容易不精确
-cropped = img.crop((35, 210, 2445, 2815))
-cropped.save("figures/fig1.png")
-```
-
-**已知问题**:
-- 页眉位置因期刊格式不同而变化,难以统一
-- 图注与正文的分界不清晰
-- 多次裁剪尝试耗时且效果不稳定
-
-**结论**:始终优先从出版商网站下载原始图片。
-
----
-
-## pdfimages(不推荐)
-
-```bash
-pdfimages -png paper.pdf figures/img
-```
-
-**问题**:学术论文中的 Figure 通常由多个子面板(A, B, C...)组成,在 PDF 中以向量图形 + 多个小位图混合存储。`pdfimages` 只能提取嵌入的位图,得到的往往是碎片化的小图,无法还原完整 Figure。

+ 640 - 0
genek-paper-2-all/references/poster-components.md

@@ -0,0 +1,640 @@
+# HTML 海报可复用组件库
+
+## CSS 变量(配色方案)
+
+基础色板,根据论文或机构风格调整:
+
+```css
+:root {
+  --primary: #1B3A4B;
+  --secondary: #065A82;
+  --accent: #00A7E1;
+  --warm: #E8927C;
+  --gold: #D4A574;
+  --bg-light: #F4F7F9;
+  --bg-cream: #FAFBFC;
+  --text-dark: #1A1A2E;
+  --text-muted: #5A6B7D;
+}
+```
+
+### Result 独立 accent 色
+
+每个 Result 使用不同的 accent 色作为顶部边框和编号圆标背景,帮助读者区分不同发现。按论文主题选色,例如:
+
+```css
+:root {
+  --r1-color: #1B3A4B;
+  --r2-color: #065A82;
+  --r3-color: #2E8B57;
+  --r4-color: #00A7E1;
+  --r5-color: #D4A574;
+  --r6-color: #E8927C;
+}
+.result-1 { border-top-color: var(--r1-color); }
+.result-2 { border-top-color: var(--r2-color); }
+/* ... */
+```
+
+---
+
+## 三列 Grid 布局
+
+```css
+.poster { width: 48in; background: var(--bg-cream); }
+
+.content {
+  display: grid;
+  grid-template-columns: 1fr 1fr 1fr;
+  gap: 0.3in;
+  padding: 0.45in 0.55in;
+}
+```
+
+### 标准布局(6 个 Result 示例)
+
+第 1 列 = 叙事列,第 2–3 列 = Result + Conclusions。
+
+```css
+.background    { grid-column: 1; grid-row: 1; }
+.study-design  { grid-column: 1; grid-row: 2; }
+.methods       { grid-column: 1; grid-row: 3; }
+
+.result-1      { grid-column: 2; grid-row: 1; }
+.result-2      { grid-column: 3; grid-row: 1; }
+.result-3      { grid-column: 2; grid-row: 2; }
+.result-4      { grid-column: 3; grid-row: 2; }
+.result-5      { grid-column: 2; grid-row: 3; }
+.result-6      { grid-column: 3; grid-row: 3; }
+
+.conclusions   { grid-column: 2 / 4; grid-row: 4; }
+```
+
+Result 数量不同时调整行数,保持从左到右、从上到下排列:
+
+```css
+/* 4 个 Result */
+.result-1 { grid-column: 2; grid-row: 1; }
+.result-2 { grid-column: 3; grid-row: 1; }
+.result-3 { grid-column: 2; grid-row: 2; }
+.result-4 { grid-column: 3; grid-row: 2; }
+.conclusions { grid-column: 2 / 4; grid-row: 3; }
+
+/* 3 个 Result(最后行只占 1 格) */
+.result-1 { grid-column: 2; grid-row: 1; }
+.result-2 { grid-column: 3; grid-row: 1; }
+.result-3 { grid-column: 2; grid-row: 2; }
+.conclusions { grid-column: 2 / 4; grid-row: 3; }
+```
+
+---
+
+## Section 基础样式
+
+```css
+.section {
+  background: white;
+  border-radius: 0.08in;
+  padding: 0.3in;
+  position: relative;
+  box-shadow: 0 2px 10px rgba(0,0,0,0.04);
+  border: 1px solid rgba(0,0,0,0.05);
+  border-top: 4px solid var(--accent);
+}
+.section-title {
+  font-family: 'Playfair Display', serif;
+  font-size: 0.28in; font-weight: 700;
+  color: var(--primary);
+  margin-bottom: 0.18in; padding-bottom: 0.08in;
+  border-bottom: 3px solid var(--accent);
+  display: inline-block;
+}
+.section p, .section li {
+  font-size: 0.17in; line-height: 1.6; color: var(--text-dark);
+}
+```
+
+---
+
+## Result 编号圆标
+
+每个 Result section 带有绝对定位的编号圆标,引导阅读顺序:
+
+```css
+.result-number {
+  position: absolute;
+  top: -0.18in; left: 0.2in;
+  width: 0.4in; height: 0.4in;
+  border-radius: 50%;
+  display: flex; align-items: center; justify-content: center;
+  font-family: 'Playfair Display', serif;
+  font-size: 0.22in; font-weight: 900;
+  color: white;
+  box-shadow: 0 2px 8px rgba(0,0,0,0.15);
+  z-index: 2;
+}
+```
+
+HTML:
+
+```html
+<div class="section result-1" style="border-top-color: var(--r1-color)">
+  <div class="result-number" style="background: var(--r1-color)">1</div>
+  <h2 class="section-title">Result 标题</h2>
+  ...
+</div>
+```
+
+---
+
+## Conclusions 深色样式
+
+Conclusions 跨第 2–3 列,使用深色渐变背景作为视觉终点:
+
+```css
+.conclusions {
+  grid-column: 2 / 4;
+  background: linear-gradient(135deg, var(--primary) 0%, var(--secondary) 100%);
+  color: white;
+  border-top: none;
+}
+.conclusions .section-title {
+  color: white;
+  border-bottom-color: var(--gold);
+}
+
+.concl-item {
+  display: flex; align-items: flex-start;
+  gap: 0.12in; margin-bottom: 0.12in;
+  padding: 0.1in;
+  background: rgba(255,255,255,0.06);
+  border-radius: 0.05in;
+  border-left: 3px solid var(--gold);
+}
+.concl-num {
+  font-family: 'Playfair Display', serif;
+  font-size: 0.28in; font-weight: 900;
+  color: var(--accent); flex-shrink: 0;
+  width: 0.35in; text-align: center;
+}
+.concl-text {
+  font-size: 0.16in; line-height: 1.55;
+  color: rgba(255,255,255,0.92);
+}
+```
+
+HTML:
+
+```html
+<div class="section conclusions">
+  <h2 class="section-title">Conclusions</h2>
+  <div class="concl-item">
+    <div class="concl-num">1</div>
+    <div class="concl-text">结论内容...</div>
+  </div>
+  <div class="concl-item">
+    <div class="concl-num">2</div>
+    <div class="concl-text">结论内容...</div>
+  </div>
+</div>
+```
+
+---
+
+## Stat Box
+
+用于 Study Design 区域展示关键数字:
+
+```css
+.stat-row { display: flex; gap: 0.15in; flex-wrap: wrap; }
+.stat-box {
+  flex: 1; min-width: 1in;
+  background: var(--bg-light); border-radius: 0.06in;
+  padding: 0.14in; text-align: center;
+  border-left: 3px solid var(--accent);
+}
+.stat-box .number {
+  font-family: 'Playfair Display', serif;
+  font-size: 0.34in; font-weight: 900;
+  color: var(--secondary); display: block;
+}
+.stat-box .label {
+  font-size: 0.12in; color: var(--text-muted);
+  text-transform: uppercase; letter-spacing: 1px;
+}
+```
+
+---
+
+## Finding Card
+
+```css
+.finding-card {
+  background: var(--bg-light); border-radius: 0.06in;
+  padding: 0.15in; margin: 0.1in 0;
+  border-left: 4px solid var(--accent);
+}
+.finding-card.important {
+  border-left-color: var(--warm);
+  background: #FFF8F5;
+}
+```
+
+---
+
+## Cladogram(多物种系统发育树)
+
+仅用于涉及 ≥3 物种跨物种比较的论文。纯 CSS 实现,展示拓扑关系和类群分组,不标注分化时间。
+
+```css
+.cladogram {
+  padding: 0.15in;
+  background: var(--bg-light);
+  border-radius: 0.06in;
+  margin: 0.1in 0;
+  font-size: 0.12in;
+}
+.clade-group {
+  border-left: 2px solid var(--secondary);
+  margin-left: 0.15in;
+  padding-left: 0.15in;
+  padding-top: 0.04in;
+  padding-bottom: 0.04in;
+}
+.clade-label {
+  font-weight: 700;
+  color: var(--secondary);
+  font-size: 0.13in;
+  margin-bottom: 0.04in;
+}
+.clade-species {
+  display: flex; flex-wrap: wrap; gap: 0.06in;
+  margin: 0.04in 0;
+}
+.species-tag {
+  display: inline-flex; align-items: center; gap: 0.04in;
+  background: white; border-radius: 0.03in;
+  padding: 0.03in 0.08in;
+  font-size: 0.11in; font-weight: 600;
+  border: 1px solid #D8DEE4;
+}
+.species-tag .sp-dot {
+  width: 0.08in; height: 0.08in;
+  border-radius: 50%;
+}
+.outgroup-tag {
+  background: #FFF8F0;
+  border-color: var(--warm);
+}
+```
+
+HTML 示例(12 物种比较基因组学):
+
+```html
+<div class="cladogram">
+  <!-- 外群 -->
+  <div style="margin-bottom:0.06in">
+    <span class="species-tag outgroup-tag">
+      <span class="sp-dot" style="background:var(--green-a)"></span> Zebrafish
+    </span>
+    <span style="font-size:0.1in; color:var(--text-muted); margin-left:0.06in">distant outgroup</span>
+  </div>
+  <div style="margin-bottom:0.08in">
+    <span class="species-tag outgroup-tag">
+      <span class="sp-dot" style="background:var(--warm)"></span> Chicken
+    </span>
+    <span style="font-size:0.1in; color:var(--text-muted); margin-left:0.06in">close outgroup</span>
+  </div>
+  <!-- 哺乳类 -->
+  <div class="clade-group">
+    <div class="clade-label">Mammals</div>
+    <div class="clade-group">
+      <div class="clade-label">Euarchontoglires</div>
+      <div class="clade-species">
+        <span class="species-tag"><span class="sp-dot" style="background:var(--secondary)"></span> Human</span>
+        <span class="species-tag"><span class="sp-dot" style="background:var(--secondary)"></span> Rhesus</span>
+        <span class="species-tag"><span class="sp-dot" style="background:var(--secondary)"></span> Mouse</span>
+        <span class="species-tag"><span class="sp-dot" style="background:var(--secondary)"></span> Rat</span>
+        <span class="species-tag"><span class="sp-dot" style="background:var(--secondary)"></span> Rabbit</span>
+      </div>
+    </div>
+    <div class="clade-group">
+      <div class="clade-label">Laurasiatheria</div>
+      <div class="clade-species">
+        <span class="species-tag"><span class="sp-dot" style="background:var(--accent)"></span> Cow</span>
+        <span class="species-tag"><span class="sp-dot" style="background:var(--accent)"></span> Sheep</span>
+        <span class="species-tag"><span class="sp-dot" style="background:var(--accent)"></span> Pig</span>
+        <span class="species-tag"><span class="sp-dot" style="background:var(--accent)"></span> Cat</span>
+        <span class="species-tag"><span class="sp-dot" style="background:var(--accent)"></span> Dog</span>
+      </div>
+    </div>
+  </div>
+</div>
+```
+
+此组件的结构可适配各类物种分组:植物(单子叶/双子叶)、微生物(革兰氏阳性/阴性)等,只需调整 clade-label 和颜色。
+
+---
+
+## CSS 流程图
+
+```css
+.flowchart {
+  display: flex; flex-direction: column;
+  align-items: center; gap: 0;
+  margin: 0.1in 0;
+}
+.flow-node {
+  background: white; border: 2px solid var(--secondary);
+  border-radius: 0.06in; padding: 0.1in 0.15in;
+  text-align: center; width: 90%;
+  font-size: 0.13in; font-weight: 600;
+  color: var(--primary);
+}
+.flow-node.primary-node {
+  background: var(--secondary); color: white;
+  border-color: var(--secondary);
+}
+.flow-node .flow-detail {
+  font-size: 0.11in; font-weight: 400;
+  color: var(--text-muted); margin-top: 0.03in;
+}
+.flow-node.primary-node .flow-detail {
+  color: rgba(255,255,255,0.75);
+}
+.flow-arrow {
+  width: 2px; height: 0.18in;
+  background: var(--secondary); position: relative;
+}
+.flow-arrow::after {
+  content: ''; position: absolute;
+  bottom: -4px; left: -4px;
+  border-left: 5px solid transparent;
+  border-right: 5px solid transparent;
+  border-top: 6px solid var(--secondary);
+}
+.flow-branch {
+  display: grid;
+  grid-template-columns: repeat(auto-fit, minmax(1in, 1fr));
+  gap: 0.08in; width: 100%;
+}
+```
+
+---
+
+## 折叠图表
+
+海报使用 **原图**(`figures/fig{N}.png`)。关键 Figure 用 `<details open>` 默认展开,次要 Figure 折叠。
+
+```css
+details.fig-collapse {
+  margin-top: 0.12in;
+  border: 1px solid #D8DEE4;
+  border-radius: 0.06in;
+  overflow: hidden;
+}
+details.fig-collapse summary {
+  background: var(--bg-light);
+  padding: 0.1in 0.14in;
+  font-weight: 700; font-size: 0.14in;
+  color: var(--secondary);
+  cursor: pointer;
+  display: flex; align-items: center; gap: 0.08in;
+  list-style: none;
+}
+details.fig-collapse summary::-webkit-details-marker { display: none; }
+details.fig-collapse summary::before {
+  content: '\25B8'; font-size: 0.16in;
+  color: var(--accent);
+  transition: transform 0.2s;
+  display: inline-block;
+}
+details.fig-collapse[open] summary::before {
+  transform: rotate(90deg);
+}
+
+.fig-image-container {
+  text-align: center; margin: 0.08in 0;
+  border: 1px solid #E0E4E8; border-radius: 0.04in;
+  overflow: hidden;
+}
+.fig-image-container img {
+  max-width: 100%; height: auto;
+  display: block; margin: 0 auto;
+  cursor: zoom-in;
+  transition: opacity 0.2s;
+}
+.fig-image-container img:hover { opacity: 0.85; }
+.fig-caption {
+  font-size: 0.12in; color: var(--text-muted);
+  padding: 0.06in; background: var(--bg-light);
+  text-align: left; line-height: 1.5;
+}
+```
+
+```html
+<!-- 关键 Figure:默认展开 -->
+<details class="fig-collapse" open>
+  <summary>Figure 1 &#x2014; 标题</summary>
+  <div class="fig-content">
+    <div class="fig-image-container">
+      <img src="figures/fig1.png" alt="Figure 1">
+      <div class="fig-caption">图注</div>
+    </div>
+  </div>
+</details>
+
+<!-- 次要 Figure:折叠 -->
+<details class="fig-collapse">
+  <summary>Figure 2 &#x2014; 标题</summary>
+  ...
+</details>
+```
+
+---
+
+## Lightbox 放大查看
+
+```html
+<div class="lightbox-overlay" id="lightbox">
+  <img id="lightbox-img" src="" alt="">
+</div>
+```
+
+```css
+.lightbox-overlay {
+  display: none; position: fixed;
+  top: 0; left: 0; width: 100%; height: 100%;
+  background: rgba(0,0,0,0.88);
+  z-index: 9999;
+  justify-content: center; align-items: center;
+  cursor: zoom-out;
+}
+.lightbox-overlay.active { display: flex; }
+.lightbox-overlay img {
+  max-width: 92%; max-height: 92%;
+  object-fit: contain; border-radius: 4px;
+  box-shadow: 0 8px 40px rgba(0,0,0,0.5);
+}
+```
+
+```javascript
+(function(){
+  var overlay = document.getElementById('lightbox');
+  var lbImg = document.getElementById('lightbox-img');
+  document.querySelectorAll('.fig-image-container img').forEach(function(img){
+    img.addEventListener('click', function(){
+      lbImg.src = this.src;
+      lbImg.alt = this.alt;
+      overlay.classList.add('active');
+    });
+  });
+  overlay.addEventListener('click', function(){ overlay.classList.remove('active'); });
+  document.addEventListener('keydown', function(e){
+    if(e.key === 'Escape') overlay.classList.remove('active');
+  });
+})();
+```
+
+---
+
+## Footer
+
+```css
+.footer {
+  background: var(--primary);
+  padding: 0.25in 0.55in;
+  display: grid;
+  grid-template-columns: 1.5fr 1fr 1fr;
+  gap: 0.4in;
+  color: rgba(255,255,255,0.8);
+  font-size: 0.13in;
+  line-height: 1.6;
+}
+.footer strong {
+  color: var(--gold);
+  font-size: 0.14in;
+  letter-spacing: 1px;
+  text-transform: uppercase;
+}
+.footer a { color: var(--accent); text-decoration: none; }
+```
+
+```html
+<div class="footer">
+  <div>
+    <strong data-lang="en">Acknowledgments</strong>
+    <p data-lang="en">资助信息...</p>
+  </div>
+  <div>
+    <strong data-lang="en">Data Availability</strong>
+    <p data-lang="en">数据/代码链接...</p>
+  </div>
+  <div>
+    <strong data-lang="en">Contact</strong>
+    <p data-lang="en">通讯作者 email...</p>
+  </div>
+</div>
+```
+
+---
+
+## 中英文双语切换
+
+### 按钮样式
+
+```css
+.lang-switch {
+  position: fixed;
+  top: 0.2in; right: 0.3in;
+  z-index: 100;
+  display: flex; gap: 0;
+  background: rgba(255,255,255,0.97);
+  border-radius: 6px;
+  box-shadow: 0 2px 16px rgba(0,0,0,0.18);
+  overflow: hidden;
+  border: 1px solid #D0D7DE;
+}
+.lang-btn {
+  border: none; background: transparent;
+  padding: 8px 18px;
+  font-size: 15px; font-weight: 700;
+  color: var(--text-muted);
+  cursor: pointer;
+  transition: all 0.2s;
+}
+.lang-btn:hover { color: var(--secondary); background: var(--bg-light); }
+.lang-btn.active {
+  background: var(--secondary);
+  color: white;
+}
+```
+
+### HTML 标记
+
+```html
+<div class="lang-switch">
+  <button class="lang-btn active" data-target="en">EN</button>
+  <button class="lang-btn" data-target="zh">中文</button>
+</div>
+
+<!-- 需要翻译的元素加 data-lang -->
+<h2 data-lang="en">Introduction</h2>
+<h2 data-lang="zh">研究背景</h2>
+```
+
+无需双语标记的元素:数字/统计值、图片、DOI、作者姓名。
+
+### JS 切换逻辑
+
+```javascript
+(function(){
+  var btns = document.querySelectorAll('.lang-btn');
+  btns.forEach(function(btn){
+    btn.addEventListener('click', function(){
+      var lang = this.dataset.target;
+      document.querySelectorAll('[data-lang]').forEach(function(el){
+        el.style.display = el.dataset.lang === lang ? '' : 'none';
+      });
+      btns.forEach(function(b){ b.classList.remove('active'); });
+      this.classList.add('active');
+    });
+  });
+  document.querySelectorAll('[data-lang="zh"]').forEach(function(el){
+    el.style.display = 'none';
+  });
+})();
+```
+
+---
+
+## 打印与预览
+
+```css
+@media print {
+  body { background: white; padding: 0; }
+  .poster { box-shadow: none; }
+  details.fig-collapse[open] { break-inside: avoid; }
+  .lang-switch { display: none; }
+  -webkit-print-color-adjust: exact;
+  print-color-adjust: exact;
+}
+```
+
+```bash
+python3 -m http.server 8765
+# 访问 http://localhost:8765/papers/{Author}{Year}/poster.html
+```
+
+---
+
+## 特殊字符速查
+
+| 字符 | HTML 实体 | CSS content | 用途 |
+|------|----------|-------------|------|
+| ▸ | `&#x25B8;` | `\25B8` | 折叠箭头 |
+| → | `&#x2192;` | `\2192` | 右箭头 |
+| — | `&#x2014;` | `\2014` | 破折号 |
+| × | `&times;` | - | 乘号 |
+| ≥ | `&ge;` | - | 大于等于 |
+| ≤ | `&le;` | - | 小于等于 |

+ 0 - 389
genek-paper-2-all/references/poster-guide.md

@@ -1,389 +0,0 @@
-# 学术海报 HTML/CSS 完整指南
-
-## 整体结构
-
-```html
-<!DOCTYPE html>
-<html lang="en">
-<head>
-  <meta charset="UTF-8">
-  <title>论文标题 — Poster</title>
-  <style>/* 样式见下方 */</style>
-</head>
-<body>
-  <div class="poster">
-    <div class="header"><!-- 标题/作者/单位 --></div>
-    <div class="content"><!-- 3列网格 --></div>
-    <div class="footer"><!-- Data Availability / Funding --></div>
-  </div>
-
-  <!-- Lightbox -->
-  <div class="lightbox-overlay" id="lightbox">
-    <img id="lightbox-img" src="" alt="">
-    <div class="lightbox-hint">Click anywhere or press Esc to close</div>
-  </div>
-
-  <script>/* Lightbox JS 见下方 */</script>
-</body>
-</html>
-```
-
-## CSS 变量(配色方案)
-
-```css
-:root {
-  --primary: #1B3A4B;
-  --secondary: #065A82;
-  --accent: #00A7E1;
-  --warm: #E8927C;
-  --bg-light: #F4F7F9;
-  --bg-cream: #FAFBFC;
-  --text-dark: #1A1A2E;
-  --text-muted: #5A6B7D;
-  --gold: #D4A574;
-  --green-a: #2E8B57;
-  --red-b: #C85A54;
-}
-```
-
-## 3列网格布局
-
-```css
-.poster { width: 48in; background: var(--bg-cream); }
-
-.content {
-  display: grid;
-  grid-template-columns: 1fr 1fr 1fr;
-  gap: 0.3in;
-  padding: 0.45in 0.55in;
-}
-
-/* 板块定位 */
-.background   { grid-column: 1; grid-row: 1; }
-.study-design { grid-column: 1; grid-row: 2; }
-.methods-flow { grid-column: 1; grid-row: 3; }
-.results-1    { grid-column: 2; grid-row: 1; }
-.results-2    { grid-column: 2; grid-row: 2; }
-.results-3    { grid-column: 3; grid-row: 1; }
-.results-4    { grid-column: 3; grid-row: 2; }
-.conclusions  { grid-column: 2 / 4; grid-row: 3; }
-```
-
-## 物种图标系统
-
-**原则**:不用 emoji,用 CSS 圆形缩写,确保跨平台一致。
-
-```css
-.sp-icon {
-  display: inline-flex; align-items: center; justify-content: center;
-  width: 0.22in; height: 0.22in; border-radius: 50%;
-  font-size: 0.11in; font-weight: 700; color: white;
-}
-.sp-icon.mammal-icon { background: var(--secondary); }
-.sp-icon.bird-icon   { background: var(--warm); }
-.sp-icon.fish-icon   { background: var(--green-a); }
-```
-
-```html
-<span class="sp-icon mammal-icon">Hu</span> Human
-<span class="sp-icon mammal-icon">Mo</span> Mouse
-<span class="sp-icon bird-icon">Ch</span> Chicken
-<span class="sp-icon fish-icon">Zf</span> Zebrafish
-```
-
-## 统计数据展示(stat-box)
-
-```css
-.stat-row { display: flex; gap: 0.15in; flex-wrap: wrap; }
-.stat-box {
-  flex: 1; min-width: 1in;
-  background: var(--bg-light); border-radius: 0.06in;
-  padding: 0.14in; text-align: center;
-  border-left: 3px solid var(--accent);
-}
-.stat-box .number {
-  font-size: 0.34in; font-weight: 900;
-  color: var(--secondary);
-}
-.stat-box .label {
-  font-size: 0.12in; color: var(--text-muted);
-  text-transform: uppercase; letter-spacing: 1px;
-}
-```
-
-## 发现卡片(finding-card)
-
-```css
-.finding-card {
-  background: var(--bg-light); border-radius: 0.06in;
-  padding: 0.15in; margin: 0.1in 0;
-  border-left: 4px solid var(--accent);
-}
-.finding-card.important {
-  border-left-color: var(--warm);
-  background: #FFF8F5;
-}
-```
-
-## CSS 流程图
-
-```css
-.flowchart {
-  display: flex; flex-direction: column;
-  align-items: center; gap: 0;
-}
-.flow-node {
-  background: white; border: 2px solid var(--secondary);
-  border-radius: 0.06in; padding: 0.1in 0.15in;
-  text-align: center; width: 90%;
-}
-.flow-node.primary-node {
-  background: var(--secondary); color: white;
-}
-.flow-arrow {
-  width: 2px; height: 0.18in; background: var(--secondary);
-  position: relative;
-}
-.flow-arrow::after {
-  content: ''; position: absolute;
-  bottom: -4px; left: -4px;
-  border-left: 5px solid transparent;
-  border-right: 5px solid transparent;
-  border-top: 6px solid var(--secondary);
-}
-/* 分支节点 */
-.flow-branch {
-  display: grid; grid-template-columns: repeat(5, 1fr);
-  gap: 0.08in; width: 100%;
-}
-```
-
-## 折叠图表
-
-```css
-details.fig-collapse {
-  margin-top: 0.12in;
-  border: 1px solid #D8DEE4;
-  border-radius: 0.06in;
-  overflow: hidden;
-}
-details.fig-collapse summary {
-  background: var(--bg-light);
-  padding: 0.1in 0.14in;
-  font-weight: 700; color: var(--secondary);
-  cursor: pointer;
-  list-style: none;
-}
-details.fig-collapse summary::-webkit-details-marker { display: none; }
-
-/* CSS 箭头(不要在 HTML 中重复放箭头字符) */
-details.fig-collapse summary::before {
-  content: '\25B8';
-  color: var(--accent);
-  transition: transform 0.2s;
-  display: inline-block;
-  margin-right: 0.08in;
-}
-details.fig-collapse[open] summary::before {
-  transform: rotate(90deg);
-}
-
-/* 图片容器 */
-.fig-image-container {
-  text-align: center; margin: 0.08in 0;
-  border: 1px solid #E0E4E8; border-radius: 0.04in;
-  overflow: hidden;
-}
-.fig-image-container img {
-  max-width: 100%; height: auto;
-  display: block; margin: 0 auto;
-  cursor: zoom-in;
-}
-.fig-image-container img:hover { opacity: 0.85; }
-.fig-caption {
-  font-size: 0.12in; color: var(--text-muted);
-  padding: 0.06in; background: var(--bg-light);
-  text-align: left;
-}
-```
-
-## Lightbox 放大查看
-
-```css
-.lightbox-overlay {
-  display: none; position: fixed;
-  top: 0; left: 0; width: 100%; height: 100%;
-  background: rgba(0,0,0,0.88);
-  z-index: 9999;
-  justify-content: center; align-items: center;
-  cursor: zoom-out;
-}
-.lightbox-overlay.active { display: flex; }
-.lightbox-overlay img {
-  max-width: 92%; max-height: 92%;
-  object-fit: contain; border-radius: 4px;
-  box-shadow: 0 8px 40px rgba(0,0,0,0.5);
-}
-```
-
-```javascript
-(function(){
-  var overlay = document.getElementById('lightbox');
-  var lbImg = document.getElementById('lightbox-img');
-  document.querySelectorAll('.fig-image-container img').forEach(function(img){
-    img.addEventListener('click', function(){
-      lbImg.src = this.src;
-      lbImg.alt = this.alt;
-      overlay.classList.add('active');
-    });
-  });
-  overlay.addEventListener('click', function(){ overlay.classList.remove('active'); });
-  document.addEventListener('keydown', function(e){
-    if(e.key === 'Escape') overlay.classList.remove('active');
-  });
-})();
-```
-
-## 特殊字符速查表
-
-| 字符 | HTML 实体 | CSS content | 用途 |
-|------|----------|-------------|------|
-| ▶ | `&#x25B6;` | `\25B6` | 折叠箭头 |
-| ▸ | `&#x25B8;` | `\25B8` | 小三角 |
-| → | `&#x2192;` | `\2192` | 右箭头 |
-| ➡ | `&#x27A1;` | `\27A1` | 粗右箭头 |
-| — | `&#x2014;` | `\2014` | 破折号 |
-| – | `&#x2013;` | `\2013` | 短横线 |
-| † | `&#x2020;` | `\2020` | 共同一作 |
-| ≥ | `&ge;` | - | 大于等于 |
-| ≤ | `&le;` | - | 小于等于 |
-| × | `&times;` | - | 乘号 |
-| − | `&minus;` | - | 减号 |
-| ↔ | `&#x2194;` | `\2194` | 双向箭头 |
-| © | `&copy;` | - | 版权 |
-
-## 打印与预览
-
-```css
-@media print {
-  body { background: white; padding: 0; }
-  .poster { box-shadow: none; }
-  details.fig-collapse { open: true; }
-}
-```
-
-本地预览命令:
-```bash
-cd project_directory
-python3 -m http.server 8765
-# 访问 http://localhost:8765/poster.html
-```
-
-## 中英文双语切换
-
-### 语言切换按钮样式
-
-```css
-.lang-switch {
-  position: fixed;
-  top: 0.2in; right: 0.3in;
-  z-index: 100;
-  display: flex; gap: 2px;
-  background: rgba(255,255,255,0.95);
-  border-radius: 0.04in;
-  box-shadow: 0 2px 12px rgba(0,0,0,0.15);
-  overflow: hidden;
-  border: 1px solid #D8DEE4;
-}
-.lang-btn {
-  border: none; background: transparent;
-  padding: 0.06in 0.14in;
-  font-size: 0.13in; font-weight: 700;
-  color: var(--text-muted);
-  cursor: pointer;
-  transition: all 0.2s;
-}
-.lang-btn:hover { color: var(--secondary); }
-.lang-btn.active {
-  background: var(--secondary);
-  color: white;
-}
-```
-
-### HTML 双语标记规范
-
-所有需要翻译的文本元素加 `data-lang` 属性:
-
-```html
-<!-- 板块标题 -->
-<h2 class="section-title" data-lang="en">Background</h2>
-<h2 class="section-title" data-lang="zh">研究背景</h2>
-
-<!-- 段落内容 -->
-<p data-lang="en">The 3D architecture of the eukaryotic genome...</p>
-<p data-lang="zh">真核生物基因组的三维架构高度有序...</p>
-
-<!-- finding-card -->
-<div class="finding-card">
-  <h4 data-lang="en">Chromosome length governs architecture</h4>
-  <h4 data-lang="zh">染色体长度决定整体架构</h4>
-  <p data-lang="en">Contact probability negatively correlated...</p>
-  <p data-lang="zh">接触概率与基因组距离呈负相关...</p>
-</div>
-
-<!-- 结论条目 -->
-<div class="concl-item">
-  <div class="concl-num">1</div>
-  <div class="concl-text" data-lang="en"><strong>Genome size...</strong></div>
-  <div class="concl-text" data-lang="zh"><strong>基因组大小...</strong></div>
-</div>
-```
-
-### 无需双语的元素
-
-以下内容中英文通用,**不加** `data-lang`:
-- 数字/统计值(stat-box 中的 `12`、`5.75B` 等)
-- 物种缩写图标(`Hu`、`Mo`、`Ch`)
-- 图片(`<img>` 标签)
-- 数据表格中的数值列
-- DOI、GEO 编号等标识符
-- 作者姓名、单位名称(保持英文原文)
-
-表格表头需要双语:
-```html
-<thead>
-  <tr data-lang="en"><th>Species</th><th>Replicates</th><th>Genome Size</th></tr>
-  <tr data-lang="zh"><th>物种</th><th>重复数</th><th>基因组大小</th></tr>
-</thead>
-```
-
-### 完整 JS 切换逻辑
-
-```javascript
-(function(){
-  var btns = document.querySelectorAll('.lang-btn');
-  btns.forEach(function(btn){
-    btn.addEventListener('click', function(){
-      var lang = this.dataset.target;
-      document.querySelectorAll('[data-lang]').forEach(function(el){
-        el.style.display = el.dataset.lang === lang ? '' : 'none';
-      });
-      btns.forEach(function(b){ b.classList.remove('active'); });
-      this.classList.add('active');
-    });
-  });
-  // 默认英文
-  document.querySelectorAll('[data-lang="zh"]').forEach(function(el){
-    el.style.display = 'none';
-  });
-})();
-```
-
-### 打印时双语处理
-
-```css
-@media print {
-  .lang-switch { display: none; }
-  /* 打印时显示当前选中的语言,或可改为两种都显示 */
-}
-```

+ 337 - 0
genek-paper-2-all/references/slides-components.md

@@ -0,0 +1,337 @@
+# 网页版 PPT 可复用组件库
+
+与海报、PPTX 共用同一份内容和 **拆分后的 panel 图**(`figures/panels/`)。图片路径相对 `slides.html` 所在目录(即论文子目录)。
+
+---
+
+## 整体结构
+
+每页一个 `<section class="slide">`,全屏一页(100vw × 100vh),左右键翻页。
+
+```html
+<div class="slides-root">
+  <div class="lang-switch">...</div>
+  <div class="slide-nav">
+    <button class="nav-btn prev" aria-label="上一页">&#x25C0;</button>
+    <span class="slide-counter"><span id="current">1</span> / <span id="total">N</span></span>
+    <button class="nav-btn next" aria-label="下一页">&#x25B6;</button>
+  </div>
+
+  <div class="slides-container">
+    <section class="slide" data-slide="1">...</section>
+    <section class="slide" data-slide="2">...</section>
+    ...
+  </div>
+
+  <div class="lightbox-overlay" id="lightbox">...</div>
+</div>
+```
+
+```css
+:root {
+  --primary: #1B3A4B;
+  --secondary: #065A82;
+  --accent: #00A7E1;
+  --bg-light: #F4F7F9;
+  --text-dark: #1A1A2E;
+  --text-muted: #5A6B7D;
+}
+
+.slides-root {
+  position: relative;
+  width: 100vw;
+  min-height: 100vh;
+  overflow: hidden;
+}
+
+.slide {
+  width: 100vw;
+  height: 100vh;
+  box-sizing: border-box;
+  padding: 1.5rem 2.5rem;
+  display: none;
+  flex-direction: column;
+  justify-content: center;
+}
+.slide.active {
+  display: flex;
+}
+```
+
+---
+
+## 左右键盘翻页 + 页码
+
+```javascript
+(function(){
+  var slides = document.querySelectorAll('.slide');
+  var total = slides.length;
+  var current = 0;
+  var currentEl = document.getElementById('current');
+  var totalEl = document.getElementById('total');
+  if (totalEl) totalEl.textContent = total;
+
+  function show(i) {
+    i = Math.max(0, Math.min(i, total - 1));
+    current = i;
+    slides.forEach(function(s, j){ s.classList.toggle('active', j === i); });
+    if (currentEl) currentEl.textContent = i + 1;
+  }
+
+  document.addEventListener('keydown', function(e){
+    if (e.key === 'ArrowLeft') { show(current - 1); e.preventDefault(); }
+    if (e.key === 'ArrowRight') { show(current + 1); e.preventDefault(); }
+  });
+
+  document.querySelectorAll('.nav-btn.prev').forEach(function(btn){
+    btn.addEventListener('click', function(){ show(current - 1); });
+  });
+  document.querySelectorAll('.nav-btn.next').forEach(function(btn){
+    btn.addEventListener('click', function(){ show(current + 1); });
+  });
+
+  show(0);
+})();
+```
+
+```css
+.slide-nav {
+  position: fixed;
+  bottom: 1rem;
+  left: 50%;
+  transform: translateX(-50%);
+  z-index: 50;
+  display: flex;
+  align-items: center;
+  gap: 1rem;
+  background: rgba(255,255,255,0.95);
+  padding: 0.35rem 0.75rem;
+  border-radius: 0.25rem;
+  box-shadow: 0 2px 12px rgba(0,0,0,0.15);
+}
+.nav-btn {
+  border: none;
+  background: transparent;
+  font-size: 1.25rem;
+  cursor: pointer;
+  color: var(--secondary);
+}
+.nav-btn:hover { opacity: 0.8; }
+.slide-counter {
+  font-size: 0.9rem;
+  color: var(--text-muted);
+}
+```
+
+---
+
+## 全屏(F 键)
+
+```javascript
+document.addEventListener('keydown', function(e){
+  if (e.key === 'f' || e.key === 'F') {
+    if (!document.fullscreenElement) {
+      document.documentElement.requestFullscreen().catch(function(){});
+    } else {
+      document.exitFullscreen();
+    }
+    e.preventDefault();
+  }
+});
+```
+
+---
+
+## Panel 展示与 Lightbox
+
+每页内嵌 panel 图,不折叠;点击图片放大,与海报共用 Lightbox 逻辑。
+
+```html
+<div class="slide-fig">
+  <div class="fig-image-container">
+    <img src="figures/panels/fig1_A.png" alt="Figure 1A">
+  </div>
+  <div class="fig-caption" data-lang="en">Caption.</div>
+  <div class="fig-caption" data-lang="zh">图注。</div>
+</div>
+```
+
+```css
+.slide-fig {
+  text-align: center;
+  margin: 0.5rem 0;
+}
+.slide-fig .fig-image-container {
+  max-width: 85%;
+  margin: 0 auto;
+  border: 1px solid #E0E4E8;
+  border-radius: 0.25rem;
+  overflow: hidden;
+}
+.slide-fig .fig-image-container img {
+  width: 100%;
+  height: auto;
+  cursor: zoom-in;
+}
+.slide-fig .fig-caption {
+  font-size: 0.85rem;
+  color: var(--text-muted);
+  margin-top: 0.35rem;
+}
+```
+
+Lightbox 的 HTML/CSS/JS 与 [poster-components.md](poster-components.md) 中一致,选择器仍为 `.fig-image-container img`。
+
+---
+
+## 双语切换
+
+与海报相同:`data-lang="en"` / `data-lang="zh"`,右上角 `.lang-switch`,默认英文。
+
+```css
+.lang-switch {
+  position: fixed;
+  top: 0.75rem;
+  right: 1rem;
+  z-index: 100;
+  display: flex;
+  gap: 2px;
+  background: rgba(255,255,255,0.95);
+  border-radius: 0.25rem;
+  box-shadow: 0 2px 12px rgba(0,0,0,0.15);
+  border: 1px solid #D8DEE4;
+}
+.lang-btn {
+  border: none;
+  background: transparent;
+  padding: 0.35rem 0.75rem;
+  font-size: 0.9rem;
+  font-weight: 700;
+  color: var(--text-muted);
+  cursor: pointer;
+}
+.lang-btn:hover { color: var(--secondary); }
+.lang-btn.active { background: var(--secondary); color: white; }
+```
+
+JS 切换逻辑与 poster-components 中相同(根据 `data-lang` 显示/隐藏)。
+
+---
+
+## Slide 类型模板
+
+### Title slide
+
+```html
+<section class="slide slide-title" data-slide="1">
+  <h1 class="title" data-lang="en">Paper Title</h1>
+  <h1 class="title" data-lang="zh">论文标题</h1>
+  <p class="authors">Author A, Author B</p>
+  <p class="affiliation">Affiliation</p>
+</section>
+```
+
+```css
+.slide-title {
+  text-align: center;
+  justify-content: center;
+}
+.slide-title .title { font-size: 2rem; margin-bottom: 0.5rem; }
+.slide-title .authors { font-size: 1.1rem; color: var(--text-muted); }
+.slide-title .affiliation { font-size: 0.95rem; color: var(--text-muted); }
+```
+
+### Content slide(文字 + panel)
+
+```html
+<section class="slide" data-slide="2">
+  <h2 data-lang="en">Introduction</h2>
+  <h2 data-lang="zh">研究背景</h2>
+  <p data-lang="en">...</p>
+  <p data-lang="zh">...</p>
+  <div class="slide-fig">
+    <div class="fig-image-container">
+      <img src="figures/panels/fig1_A.png" alt="Figure 1A">
+    </div>
+    <div class="fig-caption" data-lang="en">Caption.</div>
+    <div class="fig-caption" data-lang="zh">图注。</div>
+  </div>
+</section>
+```
+
+### Figure slide(全幅 panel + 图注)
+
+```html
+<section class="slide slide-figure" data-slide="3">
+  <div class="slide-fig">
+    <div class="fig-image-container">
+      <img src="figures/panels/fig1_BC.png" alt="Figure 1B-C">
+    </div>
+    <div class="fig-caption" data-lang="en">Caption.</div>
+    <div class="fig-caption" data-lang="zh">图注。</div>
+  </div>
+</section>
+```
+
+```css
+.slide-figure .slide-fig { flex: 1; display: flex; flex-direction: column; justify-content: center; }
+.slide-figure .fig-image-container { max-width: 90%; }
+```
+
+### Summary slide(编号结论)
+
+```html
+<section class="slide slide-summary" data-slide="N">
+  <h2 data-lang="en">Conclusions</h2>
+  <h2 data-lang="zh">结论</h2>
+  <ol class="concl-list">
+    <li>
+      <span data-lang="en">First conclusion.</span>
+      <span data-lang="zh">结论一。</span>
+    </li>
+    <li>
+      <span data-lang="en">Second conclusion.</span>
+      <span data-lang="zh">结论二。</span>
+    </li>
+  </ol>
+</section>
+```
+
+```css
+.slide-summary .concl-list { font-size: 1.1rem; line-height: 1.6; }
+```
+
+---
+
+## 打印
+
+每张 slide 一页,隐藏导航与语言切换。
+
+```css
+@media print {
+  .lang-switch,
+  .slide-nav {
+    display: none !important;
+  }
+  .slides-root { overflow: visible; }
+  .slide {
+    display: flex !important;
+    height: auto;
+    min-height: 100vh;
+    page-break-after: always;
+  }
+  .slide:last-child { page-break-after: auto; }
+}
+```
+
+---
+
+## 预览
+
+在论文子目录下启动本地服务,例如:
+
+```bash
+cd papers/paper-short-name
+python3 -m http.server 8765
+# 打开 http://localhost:8765/slides.html
+```