diff --git a/.claude/skills/ubisam-ppt-make/SKILL.md b/.claude/skills/ubisam-ppt-make/SKILL.md index 5c0eba8..d4d3262 100644 --- a/.claude/skills/ubisam-ppt-make/SKILL.md +++ b/.claude/skills/ubisam-ppt-make/SKILL.md @@ -132,3 +132,6 @@ for n in z.namelist() if re.match(r'ppt/slides/slide\\d+',n)]" - Logo asset: `assets/Ubisam_logo_transparent.png`. On dark divider/closing the colored logo has lower contrast but matches the user's original placement. - Keep `.md` files under 200 lines (project rule 4); split if it grows. +- **`table` 높이 상한**: 표는 `_TABLE_MAX_H = 5.3"` (y 1.7" ~ 7.0")로 자동 제한. + 행이 많아도 푸터(`Ubisam | `, y=7.05")를 절대 침범하지 않는다. + 행 높이는 `min(0.5×rows, 5.3) / rows`로 균등 압축된다. diff --git a/.claude/skills/ubisam-ppt-make/build_deck.py b/.claude/skills/ubisam-ppt-make/build_deck.py index 13a0dae..9169cca 100644 --- a/.claude/skills/ubisam-ppt-make/build_deck.py +++ b/.claude/skills/ubisam-ppt-make/build_deck.py @@ -395,6 +395,9 @@ def _fill_cell(cell, text, size, bold, color, center=False): _set_font(r, size=size, bold=bold, color=color) +_TABLE_TOP = 1.7 # table body starts here (inches) +_TABLE_MAX_H = 5.3 # max table height: footer y(7.05) - table top(1.7) - margin(0.05) + def L_table(prs, d): s = blank_slide(prs) header(s, d.get("no", "06."), d.get("title", ""), d.get("subtitle")) @@ -403,8 +406,9 @@ def L_table(prs, d): data = d.get("rows", []) center_cols = set(d.get("center_cols", [])) rows = len(data) + 1 - tbl = s.shapes.add_table(rows, len(headers), Inches(0.55), Inches(1.7), - Inches(11.4), Inches(0.5 * rows)).table + tbl_h = min(0.5 * rows, _TABLE_MAX_H) + tbl = s.shapes.add_table(rows, len(headers), Inches(0.55), Inches(_TABLE_TOP), + Inches(11.4), Inches(tbl_h)).table for c, w in enumerate(widths): tbl.columns[c].width = Inches(w) for c, hd in enumerate(headers):