content-forge/.claude/skills/paper-illustration/references/academic-styles.md

282 lines
8.2 KiB
Markdown

# Academic Styles Reference
> Loaded by Step 3 (Apply Academic Style). Provides venue-specific visual parameters: colors, fonts, sizes, spacing, caption format. Every value is concrete — no "use default".
## Table of Contents
1. [Universal Rules](#1-universal-rules)
2. [NeurIPS Style (Default)](#2-neurips-style-default)
3. [ICML Style](#3-icml-style)
4. [ACL Style](#4-acl-style)
5. [IEEE Style](#5-ieee-style)
6. [Nature Style](#6-nature-style)
7. [Color Palettes Quick Reference](#7-color-palettes-quick-reference)
8. [Font Sizes Quick Reference](#8-font-sizes-quick-reference)
---
## 1. Universal Rules
These apply to ALL venues. Venue-specific sections override where noted.
### Colorblind Safety
- Primary encoding: color + shape/pattern (never color alone)
- Forbidden pairs: pure red (#FF0000) vs pure green (#00FF00)
- Mandatory test: simulate deuteranopia — all series still distinguishable
- Maximum distinct colors per figure: 7 (use hatching/markers beyond 7)
### Grayscale Compatibility
- Figure must remain interpretable when printed in grayscale
- Use varying lightness values, not just hue differences
- Add patterns (hatching, dots) to filled regions as backup encoding
### Typography
- Minimum font size: 8pt at final print size
- Label font size: 9-10pt
- Title font size: 10-12pt (if shown on figure)
- Legend font size: 8-9pt
- All text must survive 50% reduction without becoming illegible
### Resolution
- Raster output: minimum 300 DPI (600 DPI recommended for print)
- Vector output: PDF preferred (no rasterization artifacts)
- Always generate both PNG (300 DPI) and PDF
### Layout
- Margins: sufficient whitespace around all elements (no clipped text)
- Always call `plt.tight_layout()` or equivalent
- Grid lines: light gray (#CCCCCC), thin (0.5pt), behind data
- Axis spines: visible top and right spines optional (NeurIPS removes them)
---
## 2. NeurIPS Style (Default)
**Page width**: 5.5" (single column), 11.0" (full width)
**Figure width**: 5.5" (single), 2.6" (half)
### Color Palette (seaborn "muted" inspired, 7 colors)
| Index | Name | Hex | RGB | Use |
|-------|---------|-----------|-----------------|-----|
| 0 | Blue | `#4878D0` | (72, 120, 208) | Primary / "Ours" |
| 1 | Orange | `#EE854A` | (238, 133, 74) | Secondary / Baseline |
| 2 | Green | `#6ACC64` | (106, 204, 100) | Tertiary |
| 3 | Red | `#D65F5F` | (214, 95, 95) | Alert / Worst |
| 4 | Purple | `#956CB4` | (149, 108, 180) | Additional |
| 5 | Brown | `#8C613C` | (140, 97, 60) | Additional |
| 6 | Pink | `#DC7EC0` | (220, 126, 192) | Additional |
### Fonts
- Family: `serif` (Times New Roman or similar)
- Body: 10pt, Labels: 9pt, Legend: 8pt, Title: 11pt
- matplotlib: `'font.family': 'serif'`
### Axes
- Remove top and right spines: `ax.spines['top'].set_visible(False)`
- Tick direction: `out`
- Tick length: 4pt
- Grid: `alpha=0.3, linestyle='--', linewidth=0.5`
### Caption Format
```
Figure N: <Description>. <Key finding>.
```
---
## 3. ICML Style
**Page width**: 6.75" (single column), 13.5" (full width)
**Figure width**: 6.75" (single), 3.25" (half)
### Color Palette (cooler tones)
| Index | Name | Hex | Use |
|-------|-----------|-----------|-----|
| 0 | Dark Blue | `#1F77B4` | Primary / "Ours" |
| 1 | Orange | `#FF7F0E` | Secondary |
| 2 | Teal | `#2CA02C` | Tertiary |
| 3 | Crimson | `#D62728` | Alert |
| 4 | Violet | `#9467BD` | Additional |
| 5 | Sienna | `#8C564B` | Additional |
| 6 | Gray | `#7F7F7F` | Neutral/Baseline |
### Fonts
- Family: `serif` (Computer Modern / Times)
- Body: 10pt, Labels: 9pt, Legend: 8pt
- matplotlib: `'font.family': 'serif', 'mathtext.fontset': 'cm'`
### Caption Format
```
Figure N. <Description>. <Key finding>.
```
---
## 4. ACL Style
**Page width**: 6.0" (single column)
**Figure width**: 6.0" (single), 2.9" (half)
### Color Palette (warm academic)
| Index | Name | Hex | Use |
|-------|------------|-----------|-----|
| 0 | Royal Blue | `#2166AC` | Primary |
| 1 | Warm Red | `#B2182B` | Secondary |
| 2 | Teal | `#35978F` | Tertiary |
| 3 | Gold | `#DFC27D` | Highlight |
| 4 | Purple | `#762A83` | Additional |
| 5 | Dark Gray | `#525252` | Neutral |
### Fonts
- Family: `serif` (Times New Roman)
- Body: 10pt, Labels: 9pt, Legend: 8pt
- matplotlib: `'font.family': 'serif'`
### Special Notes
- NLP figures often include text examples — ensure text is readable
- Attention heatmaps: use sequential colormap (`Blues` or `YlOrRd`)
- Dependency trees: horizontal layout preferred
### Caption Format
```
Figure N: <Description>.
```
---
## 5. IEEE Style
**Page width**: 3.5" (single column), 7.16" (double column)
**Figure width**: 3.5" (single), 7.16" (full)
### Color Palette (high contrast, traditional)
| Index | Name | Hex | Use |
|-------|----------|-----------|-----|
| 0 | Blue | `#0072B2` | Primary |
| 1 | Orange | `#E69F00` | Secondary |
| 2 | Green | `#009E73` | Tertiary |
| 3 | Red | `#CC79A7` | Alert (pink-red, colorblind-safe) |
| 4 | Sky Blue | `#56B4E9` | Additional |
| 5 | Vermilion| `#D55E00` | Additional |
| 6 | Black | `#000000` | Baseline/Reference |
**Note**: This is the Wong colorblind-safe palette, recommended for all IEEE publications.
### Fonts
- Family: `sans-serif` (Helvetica / Arial)
- Body: 8pt, Labels: 8pt, Legend: 7pt, Title: 9pt
- matplotlib: `'font.family': 'sans-serif'`
### Special Notes
- IEEE is stricter on figure size due to two-column format
- Single-column figures: max 3.5" wide — everything must be readable at this size
- Prefer subfigure grids over wide panoramic figures
- Line width: minimum 1pt (thin lines disappear in print)
### Caption Format
```
Fig. N. <Description>.
```
---
## 6. Nature Style
**Page width**: 3.5" (single column), 7.2" (double column)
**Figure width**: 3.5" (single), 7.2" (full)
### Color Palette (Nature-inspired, elegant)
| Index | Name | Hex | Use |
|-------|-----------|-----------|-----|
| 0 | Nature Blue | `#3B4CC0` | Primary |
| 1 | Nature Red | `#B40426` | Secondary |
| 2 | Nature Green| `#1B7837` | Tertiary |
| 3 | Gold | `#F2C14E` | Highlight |
| 4 | Teal | `#008080` | Additional |
| 5 | Dark Gray | `#404040` | Neutral |
### Fonts
- Family: `sans-serif` (Helvetica / Arial)
- Body: 7pt, Labels: 7pt, Legend: 6pt, Title: 8pt
- matplotlib: `'font.family': 'sans-serif', 'font.size': 7`
### Special Notes
- Nature has the strictest size limits — maximize information density
- Prefer panel layouts (a, b, c, d) with lowercase bold letters
- Panel labels: **a**, **b**, **c** at top-left of each subfigure
- Color: used sparingly, key data only — backgrounds always white
### Caption Format
```
Figure N | <Title in bold>. <Description>. a, <Panel a description>. b, <Panel b description>.
```
---
## 7. Color Palettes Quick Reference
### matplotlib Code Snippets
```python
# NeurIPS (default)
COLORS_NEURIPS = ['#4878D0', '#EE854A', '#6ACC64', '#D65F5F', '#956CB4', '#8C613C', '#DC7EC0']
# ICML
COLORS_ICML = ['#1F77B4', '#FF7F0E', '#2CA02C', '#D62728', '#9467BD', '#8C564B', '#7F7F7F']
# ACL
COLORS_ACL = ['#2166AC', '#B2182B', '#35978F', '#DFC27D', '#762A83', '#525252']
# IEEE (Wong colorblind-safe)
COLORS_IEEE = ['#0072B2', '#E69F00', '#009E73', '#CC79A7', '#56B4E9', '#D55E00', '#000000']
# Nature
COLORS_NATURE = ['#3B4CC0', '#B40426', '#1B7837', '#F2C14E', '#008080', '#404040']
```
### Choosing "Ours" Color
Convention: the first color in each palette (index 0, a shade of blue) is used for "our method". This creates visual prominence and is consistent with reader expectations.
---
## 8. Font Sizes Quick Reference
| Venue | Body | Labels | Legend | Title | Min |
|---------|------|--------|--------|-------|-----|
| NeurIPS | 10pt | 9pt | 8pt | 11pt | 8pt |
| ICML | 10pt | 9pt | 8pt | 10pt | 8pt |
| ACL | 10pt | 9pt | 8pt | 10pt | 8pt |
| IEEE | 8pt | 8pt | 7pt | 9pt | 7pt |
| Nature | 7pt | 7pt | 6pt | 8pt | 6pt |
**Rule of thumb**: If in doubt, use larger font sizes. Reviewers complain about unreadable figures far more often than oversized text.
---
*Cross-reference: SKILL.md §Step 3, §NEVER Rules #2 #3 #6*