research-copilot 0.2.8 → 0.2.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/README.md +42 -34
  2. package/app/out/main/index.mjs +6167 -2491
  3. package/app/out/preload/index.js +31 -0
  4. package/app/out/renderer/assets/{MilkdownMarkdownEditor-wtbKgEbm.js → MilkdownMarkdownEditor-De2Q1dek.js} +50 -50
  5. package/app/out/renderer/assets/{arc-BqLtjO5D.js → arc-C6EUFV_N.js} +1 -1
  6. package/app/out/renderer/assets/{blockDiagram-c4efeb88-CHtvWbUe.js → blockDiagram-c4efeb88-DPxImKGD.js} +8 -8
  7. package/app/out/renderer/assets/{c4Diagram-c83219d4-CGorl4p_.js → c4Diagram-c83219d4-VnazgZ1X.js} +3 -3
  8. package/app/out/renderer/assets/{channel-C4dnKIdE.js → channel-DC2lk7Hf.js} +1 -1
  9. package/app/out/renderer/assets/{classDiagram-beda092f-CcVq8zgL.js → classDiagram-beda092f-CH4Xea-4.js} +6 -6
  10. package/app/out/renderer/assets/{classDiagram-v2-2358418a-C1T7WzEm.js → classDiagram-v2-2358418a-DQAT-8KP.js} +10 -10
  11. package/app/out/renderer/assets/{clone-DxlJpy1a.js → clone-DmzuvEez.js} +1 -1
  12. package/app/out/renderer/assets/{createText-1719965b-C0d2kD0r.js → createText-1719965b-DipiQz-3.js} +2 -2
  13. package/app/out/renderer/assets/{edges-96097737-CLaP5xIP.js → edges-96097737-DMCNYzh0.js} +3 -3
  14. package/app/out/renderer/assets/{erDiagram-0228fc6a-MUP9rxkZ.js → erDiagram-0228fc6a-BCYmzg3a.js} +5 -5
  15. package/app/out/renderer/assets/{flowDb-c6c81e3f-BPAie9_m.js → flowDb-c6c81e3f-Dd2eD_J_.js} +1 -1
  16. package/app/out/renderer/assets/{flowDiagram-50d868cf-wPPnXbEC.js → flowDiagram-50d868cf-Cm_pVS1l.js} +12 -12
  17. package/app/out/renderer/assets/{flowDiagram-v2-4f6560a1-Bla11wXJ.js → flowDiagram-v2-4f6560a1-DmnPUt4m.js} +12 -12
  18. package/app/out/renderer/assets/{flowchart-elk-definition-6af322e1-D05H4IzP.js → flowchart-elk-definition-6af322e1-CWmjyrNl.js} +6 -6
  19. package/app/out/renderer/assets/{ganttDiagram-a2739b55-_HXvgcdj.js → ganttDiagram-a2739b55-zezz97ZG.js} +3 -3
  20. package/app/out/renderer/assets/{gitGraphDiagram-82fe8481-qK3Q1wq5.js → gitGraphDiagram-82fe8481-B8AuyyHK.js} +2 -2
  21. package/app/out/renderer/assets/{graph-C5ywDmPQ.js → graph-CeW0ZYF_.js} +1 -1
  22. package/app/out/renderer/assets/{index-5325376f-D3a5ZZZz.js → index-5325376f-ytL7PjAX.js} +6 -6
  23. package/app/out/renderer/assets/{index-Cvn9cLQy.js → index-Ay1x5fGf.js} +5 -5
  24. package/app/out/renderer/assets/{index-Bnopm9R6.js → index-B0IaCM06.js} +2162 -659
  25. package/app/out/renderer/assets/{index-0RdJfTuz.js → index-B0uWkIRD.js} +4 -4
  26. package/app/out/renderer/assets/{index-DkxwQySh.js → index-B75z0HLs.js} +3 -3
  27. package/app/out/renderer/assets/{index-CsIY4rv7.js → index-BKsFANZc.js} +3 -3
  28. package/app/out/renderer/assets/{index-Ct5-4eln.js → index-Bvn-V7yR.js} +6 -6
  29. package/app/out/renderer/assets/{index-CAV5KrKz.js → index-BvnI1484.js} +3 -3
  30. package/app/out/renderer/assets/{index-BD3NNxzl.js → index-C-qLsVVB.js} +3 -3
  31. package/app/out/renderer/assets/{index-CUhOSCxv.js → index-C6pCLMcd.js} +6 -6
  32. package/app/out/renderer/assets/{index-CJfHLqJM.js → index-C776N_wX.js} +1 -1
  33. package/app/out/renderer/assets/{index-BWngX05Q.js → index-C7QDCbIv.js} +3 -3
  34. package/app/out/renderer/assets/{index-CsvJ1nbq.js → index-C9i71nBq.js} +6 -6
  35. package/app/out/renderer/assets/{index-CviTrzVQ.js → index-CH0Tw6y0.js} +3 -3
  36. package/app/out/renderer/assets/{index-CTYjTyUA.js → index-CtSJ0GcR.js} +3 -3
  37. package/app/out/renderer/assets/{index-eO4trtHi.js → index-CwqgQS0P.js} +3 -3
  38. package/app/out/renderer/assets/{index-BPbilNff.js → index-CxruKWgd.js} +3 -3
  39. package/app/out/renderer/assets/{index-BcyuyYWv.css → index-D4U0VRks.css} +330 -75
  40. package/app/out/renderer/assets/{index-ByTHdZ7D.js → index-DCzv5EHR.js} +4 -4
  41. package/app/out/renderer/assets/{index-MnlXVp99.js → index-DO8xKLcA.js} +3 -3
  42. package/app/out/renderer/assets/{index-NTc0rY_G.js → index-DfC33JyY.js} +3 -3
  43. package/app/out/renderer/assets/{index-DXSYlARx.js → index-Dqp-JFMN.js} +3 -3
  44. package/app/out/renderer/assets/{index-UKpTDcKF.js → index-ETc6uiKn.js} +6 -6
  45. package/app/out/renderer/assets/{index-BlphXQkB.js → index-qA_Cm2qi.js} +6 -6
  46. package/app/out/renderer/assets/{index-DD3Ny6Vp.js → index-rCpjMSg4.js} +6 -6
  47. package/app/out/renderer/assets/{infoDiagram-8eee0895-Y5yOIBzh.js → infoDiagram-8eee0895-C7ulMekA.js} +2 -2
  48. package/app/out/renderer/assets/{journeyDiagram-c64418c1-nxv9KGN2.js → journeyDiagram-c64418c1-B6EiRrRb.js} +4 -4
  49. package/app/out/renderer/assets/{layout-QkNm3OqP.js → layout-BQe3Guvd.js} +2 -2
  50. package/app/out/renderer/assets/{line-CcMLwlNB.js → line-DKt3MOVb.js} +1 -1
  51. package/app/out/renderer/assets/{linear-DZFvfKB-.js → linear-BkgDruk7.js} +1 -1
  52. package/app/out/renderer/assets/{mindmap-definition-8da855dc-BLROjqLP.js → mindmap-definition-8da855dc-B_OxB2wg.js} +3 -3
  53. package/app/out/renderer/assets/{pieDiagram-a8764435-CEwkf3-w.js → pieDiagram-a8764435-Cs6G_wWV.js} +3 -3
  54. package/app/out/renderer/assets/{quadrantDiagram-1e28029f-Wtu-X7yj.js → quadrantDiagram-1e28029f-CBOijGWr.js} +3 -3
  55. package/app/out/renderer/assets/{requirementDiagram-08caed73-BmHzmnoA.js → requirementDiagram-08caed73-BWmZFvbN.js} +5 -5
  56. package/app/out/renderer/assets/{sankeyDiagram-a04cb91d-DR-ZBDLL.js → sankeyDiagram-a04cb91d-Dz86q9nr.js} +2 -2
  57. package/app/out/renderer/assets/{sequenceDiagram-c5b8d532-CvKwzJJS.js → sequenceDiagram-c5b8d532-rgC0xuyv.js} +3 -3
  58. package/app/out/renderer/assets/{stateDiagram-1ecb1508-D9DTeGP_.js → stateDiagram-1ecb1508-CUEUbsGu.js} +6 -6
  59. package/app/out/renderer/assets/{stateDiagram-v2-c2b004d7-CFD8lymK.js → stateDiagram-v2-c2b004d7-CnX14ipk.js} +10 -10
  60. package/app/out/renderer/assets/{styles-b4e223ce-rY8jQLYQ.js → styles-b4e223ce-DoXfPoT8.js} +1 -1
  61. package/app/out/renderer/assets/{styles-ca3715f6-DkM1AvDm.js → styles-ca3715f6-C9YwWiKc.js} +1 -1
  62. package/app/out/renderer/assets/{styles-d45a18b0-Cg53i9fc.js → styles-d45a18b0-BnKt7kQ1.js} +4 -4
  63. package/app/out/renderer/assets/{svgDrawCommon-b86b1483-Dcml1adX.js → svgDrawCommon-b86b1483-Bz6F-KWS.js} +1 -1
  64. package/app/out/renderer/assets/{timeline-definition-faaaa080-Dn53tAu-.js → timeline-definition-faaaa080-Dc1X0wkq.js} +3 -3
  65. package/app/out/renderer/assets/{xychartDiagram-f5964ef8-Dur19n8N.js → xychartDiagram-f5964ef8-DOBthtKy.js} +5 -5
  66. package/app/out/renderer/index.html +2 -2
  67. package/app/package.json +3 -1
  68. package/lib/skills/builtin/marp-slides/SKILL.md +642 -0
  69. package/package.json +1 -1
@@ -0,0 +1,642 @@
1
+ ---
2
+ name: marp-slides
3
+ description: "Create polished research presentation slides in Markdown using Marp. Use when the user needs conference talk slides, lab meeting decks, thesis defense presentations, research seminars, or poster-style overviews. Converts research artifacts (papers, notes, data) into visual narratives. For written documents use paper-writing or scientific-writing; for individual figures use scientific-visualization."
4
+ category: Presentation
5
+ tags: [Marp, Slides, Presentation, Conference Talk, Lab Meeting, Thesis Defense, Seminar, Research Talk, Markdown Slides, 做PPT, 演示文稿, 学术报告, 幻灯片]
6
+ triggers: [make slides, create presentation, conference talk, lab meeting slides, thesis defense, research presentation, seminar slides, marp, slide deck, 做幻灯片, 做报告, 学术演讲, PPT]
7
+ depends: [scientific-visualization]
8
+ license: MIT
9
+ metadata:
10
+ skill-author: K-Dense Inc.
11
+ based-on: robonuggets/marp-slides
12
+ ---
13
+
14
+ # Research Presentation Slides with Marp
15
+
16
+ Expert guidance for creating effective research presentation slides using **Marp** — a Markdown-to-slides pipeline that exports to HTML, PDF, and PPTX. This skill focuses on academic and research contexts: conference talks, lab meetings, thesis defenses, seminars, and internal research reviews.
17
+
18
+ ## Overview
19
+
20
+ Marp converts standard Markdown files into presentation slides. You write Markdown, separate slides with `---`, control appearance through YAML directives, and export via CLI. This skill provides research-specific design systems, slide templates, and composition strategies that turn complex research into clear visual narratives.
21
+
22
+ **Philosophy**: Research slides are not documents. They are visual aids for a spoken narrative. Every slide should answer one question, support one claim, or show one result. If a slide requires more than 15 seconds to parse visually, it has too much content.
23
+
24
+ ## When to Use This Skill
25
+
26
+ - The user needs slides for a conference talk, invited talk, or workshop presentation.
27
+ - The user wants to present research findings at a lab meeting, group meeting, or seminar.
28
+ - The user is preparing a thesis defense or qualifying exam presentation.
29
+ - The user wants to convert a paper draft or research artifacts into a slide deck.
30
+ - The user explicitly asks for Marp slides or a Markdown presentation.
31
+
32
+ ## When NOT to Use This Skill
33
+
34
+ - The user needs a **written document** (paper, report, grant proposal) — use `paper-writing`, `scientific-writing`, or `research-grants`.
35
+ - The user needs a **single publication figure** — use `scientific-visualization`, `matplotlib`, or `seaborn`.
36
+ - The user needs a **diagram or schematic** only — use `scientific-schematics`.
37
+ - The user needs a **poster** (static large-format) — while Marp can produce poster-like outputs, dedicated poster tools are better. Ask the user before proceeding.
38
+ - The user is still **running experiments** — finish the research first, then present it.
39
+
40
+ ### Differentiation from Other Skills
41
+
42
+ | Need | Use This Skill | Use Instead |
43
+ |------|---------------|-------------|
44
+ | Conference talk slides | **marp-slides** | — |
45
+ | Written conference paper | — | `paper-writing` |
46
+ | Journal manuscript | — | `scientific-writing` |
47
+ | Individual data figure | — | `scientific-visualization` |
48
+ | Diagram / flowchart | — | `scientific-schematics` |
49
+ | Grant proposal | — | `research-grants` |
50
+
51
+ ---
52
+
53
+ ## Marp Syntax Quick Reference
54
+
55
+ ### Document Structure
56
+
57
+ Every Marp file starts with YAML front matter and uses `---` to separate slides:
58
+
59
+ ```markdown
60
+ ---
61
+ marp: true
62
+ theme: default
63
+ paginate: true
64
+ style: |
65
+ /* CSS customizations here */
66
+ ---
67
+
68
+ # Slide 1: Title
69
+
70
+ Content here.
71
+
72
+ ---
73
+
74
+ # Slide 2: Next Topic
75
+
76
+ More content.
77
+ ```
78
+
79
+ ### Essential Directives
80
+
81
+ **Global** (front matter — apply to entire deck):
82
+
83
+ | Directive | Purpose | Example |
84
+ |-----------|---------|---------|
85
+ | `marp: true` | Enable Marp rendering | Required |
86
+ | `theme` | Base theme | `default`, `gaia`, `uncover` |
87
+ | `paginate: true` | Show slide numbers | Usually enabled |
88
+ | `style` | Custom CSS block | See theme section below |
89
+ | `math: mathjax` | Enable math typesetting | For equations |
90
+ | `headingDivider: 2` | Auto-split at h2 headings | Useful for long content |
91
+ | `size: 16:9` | Slide aspect ratio | Default is 16:9 (1280x720) |
92
+
93
+ **Per-slide** (in HTML comments — inherited by subsequent slides):
94
+
95
+ ```markdown
96
+ <!-- backgroundColor: #1a1a2e -->
97
+ <!-- color: #e0e0e0 -->
98
+ <!-- class: lead -->
99
+ <!-- header: "Section Name" -->
100
+ <!-- footer: "Author — Conference 2026" -->
101
+ ```
102
+
103
+ **Single-slide only** (underscore prefix — no inheritance):
104
+
105
+ ```markdown
106
+ <!-- _paginate: false -->
107
+ <!-- _backgroundColor: #000 -->
108
+ <!-- _header: "" -->
109
+ <!-- _class: lead -->
110
+ ```
111
+
112
+ ### Image Syntax
113
+
114
+ ```markdown
115
+ ![w:400](figure.png) <!-- fixed width -->
116
+ ![h:300](figure.png) <!-- fixed height -->
117
+ ![bg](image.jpg) <!-- full background -->
118
+ ![bg right:40%](image.jpg) <!-- split layout: image right 40% -->
119
+ ![bg left:35%](image.jpg) <!-- split layout: image left 35% -->
120
+ ![bg contain](image.jpg) <!-- fit without cropping -->
121
+ ![bg brightness:0.3](image.jpg) <!-- darkened background -->
122
+ ```
123
+
124
+ ### Math
125
+
126
+ ```markdown
127
+ Inline: $E = mc^2$
128
+
129
+ Block:
130
+ $$
131
+ \nabla \cdot \mathbf{E} = \frac{\rho}{\epsilon_0}
132
+ $$
133
+ ```
134
+
135
+ ### Code Blocks
136
+
137
+ ````markdown
138
+ ```python
139
+ def train(model, data):
140
+ for batch in data:
141
+ loss = model(batch)
142
+ loss.backward()
143
+ ```
144
+ ````
145
+
146
+ ---
147
+
148
+ ## Design Principles for Research Slides
149
+
150
+ ### Axiom: One Idea Per Slide
151
+
152
+ Marp clips overflowing content **silently** — there is no warning. If text overflows the slide boundary, the audience never sees it and you get no error. This makes "one idea per slide" not just good practice but a survival rule.
153
+
154
+ **Practical limits per slide:**
155
+ - Max 6 bullet points (prefer 3-4)
156
+ - Max 1 figure + 3 lines of explanation
157
+ - Max 1 table with 5 rows
158
+ - Max 1 code block of 12 lines
159
+
160
+ ### Visual Hierarchy
161
+
162
+ | Element | Role | Styling |
163
+ |---------|------|---------|
164
+ | h1 | Slide title | Large, bold, accent or white |
165
+ | h2 | Subtitle or section | Lighter weight, grey |
166
+ | h3 | Label or category | Small, uppercase, muted |
167
+ | Body text | Supporting narrative | `#999` on dark, `#666` on light |
168
+ | Accent color | Key data, highlights | Used sparingly — 1-2 elements per slide |
169
+
170
+ ### Color Discipline
171
+
172
+ - Body text should never be full black or full white — use `#999` (dark theme) or `#666` (light theme).
173
+ - Reserve the accent color for data highlights, key metrics, and important callouts. Not headings, not body text.
174
+ - Use semantic colors consistently: green for positive/improvement, red for negative/decline, yellow for caution/neutral.
175
+
176
+ ### Typography for Research
177
+
178
+ Research presentations need legibility from a distance. Font size guidelines:
179
+ - Title: 2.5-3em
180
+ - Subtitle: 1.2-1.5em
181
+ - Body: 1-1.1em (Marp default is fine for most rooms)
182
+ - Code: 0.8-0.9em
183
+ - Footnotes/citations: 0.6-0.7em
184
+
185
+ ---
186
+
187
+ ## Theme System
188
+
189
+ ### Dark Theme (Conference Talks, Invited Talks)
190
+
191
+ Dark backgrounds work well in conference halls, auditoriums, and dimmed rooms. High contrast makes figures and data pop.
192
+
193
+ ```yaml
194
+ style: |
195
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;600;700&family=JetBrains+Mono:wght@400&display=swap');
196
+ :root {
197
+ --accent: #60a5fa;
198
+ --dark: #0f172a;
199
+ --card: #1e293b;
200
+ --border: #334155;
201
+ --body: #94a3b8;
202
+ --label: #64748b;
203
+ --muted: #475569;
204
+ --light: #f1f5f9;
205
+ --green: #4ade80;
206
+ --red: #f87171;
207
+ --yellow: #fbbf24;
208
+ }
209
+ section {
210
+ background: var(--dark);
211
+ color: var(--light);
212
+ font-family: 'Inter', sans-serif;
213
+ font-weight: 300;
214
+ padding: 48px 64px;
215
+ }
216
+ section.lead {
217
+ display: flex;
218
+ flex-direction: column;
219
+ justify-content: center;
220
+ text-align: center;
221
+ }
222
+ h1 { font-weight: 700; font-size: 2.8em; color: var(--light); margin-bottom: 0.2em; }
223
+ h2 { font-weight: 300; font-size: 1.3em; color: var(--body); margin-top: 0; }
224
+ h3 { font-weight: 600; font-size: 0.75em; color: var(--label); text-transform: uppercase; letter-spacing: 0.1em; }
225
+ p, li { color: var(--body); line-height: 1.6; }
226
+ strong { color: var(--light); font-weight: 600; }
227
+ em { color: var(--accent); font-style: normal; }
228
+ code { font-family: 'JetBrains Mono', monospace; font-size: 0.85em; background: var(--card); padding: 2px 6px; border-radius: 4px; }
229
+ pre { background: var(--card); border: 1px solid var(--border); border-radius: 8px; padding: 16px; }
230
+ table { width: 100%; border-collapse: collapse; }
231
+ th { color: var(--label); font-weight: 600; text-transform: uppercase; font-size: 0.75em; letter-spacing: 0.05em; border-bottom: 1px solid var(--border); padding: 8px 12px; text-align: left; }
232
+ td { color: var(--body); border-bottom: 1px solid var(--border); padding: 8px 12px; }
233
+ a { color: var(--accent); text-decoration: none; }
234
+ blockquote { border-left: 3px solid var(--accent); padding-left: 16px; color: var(--muted); font-style: italic; }
235
+ footer { color: var(--muted); font-size: 0.6em; }
236
+ ```
237
+
238
+ ### Light Theme (Lab Meetings, Seminars, Printed Handouts)
239
+
240
+ Light backgrounds work better in well-lit rooms, on printed handouts, and for casual internal presentations.
241
+
242
+ ```yaml
243
+ style: |
244
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;600;700&family=JetBrains+Mono:wght@400&display=swap');
245
+ :root {
246
+ --accent: #2563eb;
247
+ --dark: #f8fafc;
248
+ --card: #ffffff;
249
+ --border: #e2e8f0;
250
+ --body: #64748b;
251
+ --label: #94a3b8;
252
+ --muted: #cbd5e1;
253
+ --light: #0f172a;
254
+ --green: #16a34a;
255
+ --red: #dc2626;
256
+ --yellow: #ca8a04;
257
+ }
258
+ section {
259
+ background: var(--dark);
260
+ color: var(--light);
261
+ font-family: 'Inter', sans-serif;
262
+ font-weight: 300;
263
+ padding: 48px 64px;
264
+ }
265
+ section.lead {
266
+ display: flex;
267
+ flex-direction: column;
268
+ justify-content: center;
269
+ text-align: center;
270
+ }
271
+ h1 { font-weight: 700; font-size: 2.8em; color: var(--light); margin-bottom: 0.2em; }
272
+ h2 { font-weight: 300; font-size: 1.3em; color: var(--body); margin-top: 0; }
273
+ h3 { font-weight: 600; font-size: 0.75em; color: var(--label); text-transform: uppercase; letter-spacing: 0.1em; }
274
+ p, li { color: var(--body); line-height: 1.6; }
275
+ strong { color: var(--light); font-weight: 600; }
276
+ em { color: var(--accent); font-style: normal; }
277
+ code { font-family: 'JetBrains Mono', monospace; font-size: 0.85em; background: var(--card); padding: 2px 6px; border-radius: 4px; border: 1px solid var(--border); }
278
+ pre { background: var(--card); border: 1px solid var(--border); border-radius: 8px; padding: 16px; }
279
+ table { width: 100%; border-collapse: collapse; }
280
+ th { color: var(--label); font-weight: 600; text-transform: uppercase; font-size: 0.75em; letter-spacing: 0.05em; border-bottom: 2px solid var(--border); padding: 8px 12px; text-align: left; }
281
+ td { color: var(--body); border-bottom: 1px solid var(--border); padding: 8px 12px; }
282
+ a { color: var(--accent); text-decoration: none; }
283
+ blockquote { border-left: 3px solid var(--accent); padding-left: 16px; color: var(--muted); font-style: italic; }
284
+ footer { color: var(--label); font-size: 0.6em; }
285
+ ```
286
+
287
+ ### Recommended Font Pairings for Research
288
+
289
+ | Heading / Body | Best For | Notes |
290
+ |----------------|----------|-------|
291
+ | Inter 700 / Inter 300 | General research talks | Clean, highly legible, safe default |
292
+ | Outfit 800 / Raleway 200 | Data-heavy dashboards | High contrast weight difference |
293
+ | DM Serif Display / DM Sans 300 | Humanities, social science | Warmer, editorial feel |
294
+ | Space Grotesk 700 / IBM Plex Mono 300 | CS/Systems talks | Technical, monospace body for code-heavy content |
295
+ | Plus Jakarta Sans 800 / Plus Jakarta Sans 200 | Internal team presentations | Friendly, modern |
296
+
297
+ ---
298
+
299
+ ## Workflow: From Research to Slides
300
+
301
+ ### Phase 1: Outline the Narrative Arc
302
+
303
+ Before writing any slides, determine the **story** you are telling. A research presentation is not a paper read aloud — it is a narrative with tension, evidence, and resolution.
304
+
305
+ **Standard research talk structure** (20-25 minute conference talk):
306
+
307
+ | Slide Group | Slides | Purpose |
308
+ |-------------|--------|---------|
309
+ | Title + Motivation | 1-3 | Hook the audience. What problem? Why care? |
310
+ | Background | 2-4 | What does the audience need to know? Only essentials. |
311
+ | Approach / Method | 3-5 | What did you do? High-level, visual. |
312
+ | Results | 4-8 | What happened? One result per slide. |
313
+ | Analysis / Discussion | 2-3 | What does it mean? Compare, interpret. |
314
+ | Conclusion + Future Work | 1-2 | Takeaways. What's next? |
315
+ | Thank You / Questions | 1 | Contact info, key references. |
316
+
317
+ **Shorter formats:**
318
+
319
+ | Format | Duration | Total Slides | Strategy |
320
+ |--------|----------|-------------|----------|
321
+ | Lightning talk | 5 min | 5-8 | Problem → Approach → One key result → Takeaway |
322
+ | Short paper | 10-12 min | 10-15 | Cut background to 1 slide, 2-3 results max |
323
+ | Full talk | 20-25 min | 18-25 | Full arc as above |
324
+ | Thesis defense | 45-60 min | 35-50 | Extended motivation, comprehensive results, deeper discussion |
325
+ | Lab meeting | 15-30 min | 10-20 | Flexible — can include preliminary/negative results |
326
+
327
+ ### Phase 2: Draft Slides
328
+
329
+ Start with the Marp file structure. Use the title slide template, then fill in each group from the outline.
330
+
331
+ **Rules during drafting:**
332
+ 1. Write the **slide title as a claim**, not a topic label. "Our method reduces latency by 40%" beats "Latency Results".
333
+ 2. For every data slide, state the **takeaway** in the title or as a bold line. The audience should know what to conclude without reading the axes.
334
+ 3. Use `<!-- _class: lead -->` for section divider slides (just a centered heading).
335
+ 4. Put figure citations in a small footer: `<!-- _footer: "Figure adapted from Smith et al., 2024" -->`.
336
+ 5. Never put a figure on a slide without at least one sentence explaining what the audience should see.
337
+
338
+ ### Phase 3: Add Figures and Data
339
+
340
+ For research figures, you have two options:
341
+
342
+ **Option A: Pre-generated figures** (recommended for publication-quality plots)
343
+ - Use the `scientific-visualization` skill to create figures separately.
344
+ - Export as PNG/SVG and embed: `![w:600](./figures/result_comparison.png)`
345
+ - This gives full control over styling, annotations, and publication quality.
346
+
347
+ **Option B: Inline SVG** (for simple charts, diagrams, metrics)
348
+ - For metric cards, simple bar charts, or status indicators, inline SVG directly in the Markdown.
349
+ - Keeps everything in one file, no external dependencies.
350
+ - See the Component Library section below for reusable SVG patterns.
351
+
352
+ **For equations:**
353
+ - Use MathJax/KaTeX: `$\mathcal{L} = \sum_i \ell(f(x_i), y_i)$`
354
+ - For complex derivations, show only the key steps. Put full derivations in backup slides.
355
+
356
+ ### Phase 4: Polish and Preview
357
+
358
+ 1. **Preview** in VS Code with the Marp extension or convert with CLI:
359
+ ```bash
360
+ npx @marp-team/marp-cli slides.md --html --allow-local-files
361
+ ```
362
+ 2. **Check overflow** — scan every slide visually. Marp clips silently.
363
+ 3. **Test projector mode** — open the HTML file full-screen. Check contrast and readability.
364
+ 4. **Add speaker notes** (HTML comments after slide content):
365
+ ```markdown
366
+ <!-- This slide: emphasize the 40% improvement, mention baseline is SOTA from 2024 -->
367
+ ```
368
+ 5. **Export final format:**
369
+ ```bash
370
+ npx @marp-team/marp-cli slides.md --pdf --allow-local-files
371
+ npx @marp-team/marp-cli slides.md --pptx --allow-local-files
372
+ ```
373
+
374
+ ---
375
+
376
+ ## Slide Templates
377
+
378
+ ### Title Slide
379
+
380
+ ```markdown
381
+ ---
382
+ marp: true
383
+ theme: default
384
+ paginate: true
385
+ math: mathjax
386
+ style: |
387
+ /* paste dark or light theme CSS here */
388
+ ---
389
+
390
+ <!-- _class: lead -->
391
+ <!-- _paginate: false -->
392
+
393
+ # Your Paper Title Here
394
+ ## Subtitle or Conference Name
395
+
396
+ **Author Name**, Co-Author Name
397
+ *University / Lab Affiliation*
398
+
399
+ Conference Name 2026
400
+ ```
401
+
402
+ ### Section Divider
403
+
404
+ ```markdown
405
+ ---
406
+
407
+ <!-- _class: lead -->
408
+ <!-- _paginate: false -->
409
+
410
+ # Methodology
411
+
412
+ ```
413
+
414
+ ### Key Result Slide
415
+
416
+ ```markdown
417
+ ---
418
+
419
+ # Our method achieves 40% lower latency than the baseline
420
+
421
+ ![w:700](./figures/latency_comparison.png)
422
+
423
+ - Measured on **benchmark-X** across 1000 trials
424
+ - Baseline: best published result from Smith et al. (2024)
425
+ ```
426
+
427
+ ### Comparison Slide (Two-Column)
428
+
429
+ ```markdown
430
+ ---
431
+
432
+ # Before vs. After: Query Processing Pipeline
433
+
434
+ <div style="display: flex; gap: 40px;">
435
+ <div style="flex: 1;">
436
+
437
+ ### Before
438
+ - Sequential processing
439
+ - *120ms* average latency
440
+ - No caching layer
441
+
442
+ </div>
443
+ <div style="flex: 1;">
444
+
445
+ ### After
446
+ - Parallel pipeline
447
+ - *72ms* average latency (40% reduction)
448
+ - LRU cache with 94% hit rate
449
+
450
+ </div>
451
+ </div>
452
+ ```
453
+
454
+ ### Data Table Slide
455
+
456
+ ```markdown
457
+ ---
458
+
459
+ # Comparison across all benchmarks
460
+
461
+ | Method | Accuracy | Latency (ms) | Memory (GB) |
462
+ |--------|----------|--------------|-------------|
463
+ | Baseline A | 78.2% | 120 | 4.2 |
464
+ | Baseline B | 81.5% | 95 | 6.1 |
465
+ | **Ours** | **86.3%** | **72** | **3.8** |
466
+
467
+ - Bold values indicate best in column
468
+ - All measurements averaged over 5 runs with std < 0.3%
469
+ ```
470
+
471
+ ### Equation Slide
472
+
473
+ ```markdown
474
+ ---
475
+
476
+ # Loss Function: Contrastive Objective
477
+
478
+ Our training objective combines supervised and self-supervised losses:
479
+
480
+ $$
481
+ \mathcal{L} = \underbrace{\mathcal{L}_{\text{CE}}(f(x), y)}_{\text{supervised}} + \lambda \underbrace{\mathcal{L}_{\text{CL}}(z_i, z_j)}_{\text{contrastive}}
482
+ $$
483
+
484
+ - $\lambda = 0.1$ selected via validation
485
+ - $z_i, z_j$ are augmented representations of the same input
486
+ ```
487
+
488
+ ### Thank You / Questions Slide
489
+
490
+ ```markdown
491
+ ---
492
+
493
+ <!-- _class: lead -->
494
+ <!-- _paginate: false -->
495
+
496
+ # Thank You
497
+
498
+ Questions?
499
+
500
+ **your.email@university.edu** | github.com/yourname
501
+
502
+ Paper: arxiv.org/abs/2026.xxxxx
503
+ Code: github.com/yourname/project
504
+ ```
505
+
506
+ ---
507
+
508
+ ## Component Library
509
+
510
+ ### Metric Card (Inline SVG)
511
+
512
+ Use for highlighting key results on a summary slide:
513
+
514
+ ```html
515
+ <div style="display: flex; gap: 24px; margin-top: 24px;">
516
+ <div style="flex: 1; background: var(--card); border: 1px solid var(--border); border-top: 3px solid var(--accent); border-radius: 8px; padding: 20px;">
517
+ <div style="color: var(--label); font-size: 0.7em; text-transform: uppercase; letter-spacing: 0.1em;">Accuracy</div>
518
+ <div style="font-size: 2.2em; font-weight: 700; color: var(--light); margin: 4px 0;">86.3%</div>
519
+ <div style="color: var(--green); font-size: 0.8em;">+4.8% vs baseline</div>
520
+ </div>
521
+ <div style="flex: 1; background: var(--card); border: 1px solid var(--border); border-top: 3px solid var(--green); border-radius: 8px; padding: 20px;">
522
+ <div style="color: var(--label); font-size: 0.7em; text-transform: uppercase; letter-spacing: 0.1em;">Latency</div>
523
+ <div style="font-size: 2.2em; font-weight: 700; color: var(--light); margin: 4px 0;">72ms</div>
524
+ <div style="color: var(--green); font-size: 0.8em;">-40% vs baseline</div>
525
+ </div>
526
+ <div style="flex: 1; background: var(--card); border: 1px solid var(--border); border-top: 3px solid var(--yellow); border-radius: 8px; padding: 20px;">
527
+ <div style="color: var(--label); font-size: 0.7em; text-transform: uppercase; letter-spacing: 0.1em;">Memory</div>
528
+ <div style="font-size: 2.2em; font-weight: 700; color: var(--light); margin: 4px 0;">3.8GB</div>
529
+ <div style="color: var(--green); font-size: 0.8em;">-9.5% vs baseline</div>
530
+ </div>
531
+ </div>
532
+ ```
533
+
534
+ ### Simple Bar Chart (Inline SVG)
535
+
536
+ ```html
537
+ <svg viewBox="0 0 500 200" style="width: 100%; max-width: 600px; margin: 20px auto; display: block;">
538
+ <!-- Axis -->
539
+ <line x1="60" y1="170" x2="480" y2="170" stroke="var(--border)" stroke-width="1"/>
540
+ <!-- Bars -->
541
+ <rect x="80" y="90" width="60" height="80" fill="var(--muted)" rx="4"/>
542
+ <rect x="180" y="60" width="60" height="110" fill="var(--muted)" rx="4"/>
543
+ <rect x="280" y="30" width="60" height="140" fill="var(--accent)" rx="4"/>
544
+ <!-- Labels -->
545
+ <text x="110" y="190" fill="var(--label)" font-size="12" text-anchor="middle">Baseline A</text>
546
+ <text x="210" y="190" fill="var(--label)" font-size="12" text-anchor="middle">Baseline B</text>
547
+ <text x="310" y="190" fill="var(--light)" font-size="12" text-anchor="middle" font-weight="600">Ours</text>
548
+ <!-- Values -->
549
+ <text x="110" y="82" fill="var(--body)" font-size="12" text-anchor="middle">78.2%</text>
550
+ <text x="210" y="52" fill="var(--body)" font-size="12" text-anchor="middle">81.5%</text>
551
+ <text x="310" y="22" fill="var(--accent)" font-size="13" text-anchor="middle" font-weight="600">86.3%</text>
552
+ </svg>
553
+ ```
554
+
555
+ ### Timeline / Roadmap
556
+
557
+ ```html
558
+ <div style="display: flex; align-items: flex-start; gap: 0; margin-top: 32px;">
559
+ <div style="flex: 1; text-align: center; position: relative;">
560
+ <div style="width: 24px; height: 24px; background: var(--green); border-radius: 50%; margin: 0 auto 8px;"></div>
561
+ <div style="color: var(--light); font-weight: 600; font-size: 0.85em;">Phase 1</div>
562
+ <div style="color: var(--body); font-size: 0.75em;">Data Collection</div>
563
+ <div style="color: var(--green); font-size: 0.7em;">Complete</div>
564
+ </div>
565
+ <div style="flex: 1; text-align: center;">
566
+ <div style="width: 24px; height: 24px; background: var(--accent); border-radius: 50%; margin: 0 auto 8px;"></div>
567
+ <div style="color: var(--light); font-weight: 600; font-size: 0.85em;">Phase 2</div>
568
+ <div style="color: var(--body); font-size: 0.75em;">Model Training</div>
569
+ <div style="color: var(--accent); font-size: 0.7em;">In Progress</div>
570
+ </div>
571
+ <div style="flex: 1; text-align: center;">
572
+ <div style="width: 24px; height: 24px; background: var(--muted); border-radius: 50%; margin: 0 auto 8px;"></div>
573
+ <div style="color: var(--light); font-weight: 600; font-size: 0.85em;">Phase 3</div>
574
+ <div style="color: var(--body); font-size: 0.75em;">Evaluation</div>
575
+ <div style="color: var(--muted); font-size: 0.7em;">Planned</div>
576
+ </div>
577
+ </div>
578
+ ```
579
+
580
+ ---
581
+
582
+ ## Common Issues and Solutions
583
+
584
+ ### Overflow / Clipped Content
585
+
586
+ **Problem**: Text or figures extend beyond the slide boundary and are silently clipped.
587
+ **Solution**: Reduce content. Split into two slides. Use smaller font sizes as a last resort (never below 0.7em for body text). Always preview.
588
+
589
+ ### Figures Look Blurry
590
+
591
+ **Problem**: Raster images appear pixelated on high-DPI displays or when projected.
592
+ **Solution**: Use SVG where possible. For raster images, export at 2x resolution (e.g., 300 DPI) and specify display size with `![w:600](figure.png)`.
593
+
594
+ ### Math Not Rendering
595
+
596
+ **Problem**: Equations appear as raw LaTeX.
597
+ **Solution**: Add `math: mathjax` (or `math: katex`) to front matter. Ensure `$` delimiters are correct (no spaces after opening `$` or before closing `$`).
598
+
599
+ ### Fonts Not Loading
600
+
601
+ **Problem**: Google Fonts don't appear in exported PDF.
602
+ **Solution**: Use `--allow-local-files` flag with marp-cli. For offline environments, download fonts and reference them locally. The `--html` flag may also be needed for custom font imports.
603
+
604
+ ### Background Image Fills Wrong
605
+
606
+ **Problem**: `![bg](image.jpg)` stretches or mispositions the image.
607
+ **Solution**: Use sizing keywords: `![bg contain](image.jpg)` to fit without cropping, `![bg cover](image.jpg)` to fill with cropping, or `![bg 80%](image.jpg)` for percentage scaling.
608
+
609
+ ### PPTX Export Looks Different
610
+
611
+ **Problem**: Exported PPTX doesn't match HTML preview.
612
+ **Solution**: PPTX export has limited CSS support. Simplify layouts for PPTX — avoid complex flexbox, inline SVG, and CSS variables. PDF export is more faithful to the HTML rendering.
613
+
614
+ ---
615
+
616
+ ## Integration with Other Skills
617
+
618
+ | Task | Skill to Combine |
619
+ |------|-----------------|
620
+ | Generate publication-quality figures for slides | `scientific-visualization` → export PNG/SVG → embed in Marp |
621
+ | Create diagrams and schematics for slides | `scientific-schematics` → export SVG → embed in Marp |
622
+ | Convert a paper draft into a talk | `paper-writing` for structure context → `marp-slides` for slide creation |
623
+ | Present literature review findings | `literature-search` for gathering → `marp-slides` for presentation |
624
+ | Present data analysis results | `data-analyze` for computation → `marp-slides` for visualization narrative |
625
+
626
+ ---
627
+
628
+ ## Export Reference
629
+
630
+ ```bash
631
+ # HTML (best fidelity, interactive)
632
+ npx @marp-team/marp-cli slides.md --html --allow-local-files
633
+
634
+ # PDF (for sharing, printing)
635
+ npx @marp-team/marp-cli slides.md --pdf --allow-local-files
636
+
637
+ # PPTX (for editing in PowerPoint)
638
+ npx @marp-team/marp-cli slides.md --pptx --allow-local-files
639
+
640
+ # Watch mode (live preview during authoring)
641
+ npx @marp-team/marp-cli slides.md --watch --html --allow-local-files
642
+ ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "research-copilot",
3
- "version": "0.2.8",
3
+ "version": "0.2.10",
4
4
  "description": "AI-powered research assistant for scientists — literature search, data analysis, academic writing, and project management",
5
5
  "type": "module",
6
6
  "bin": {