From 645fae43114b17aef8697dfb4f170998103b870f Mon Sep 17 00:00:00 2001 From: Rebill Date: Thu, 29 Jan 2026 17:23:19 +0800 Subject: [PATCH 1/3] Fix word breaking issues in cover and styles --- assets/cover.html | 3 ++- assets/styles.css | 9 ++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/assets/cover.html b/assets/cover.html index 96735ce..c1ceb10 100644 --- a/assets/cover.html +++ b/assets/cover.html @@ -58,7 +58,8 @@ flex: 1; display: flex; align-items: flex-start; - word-break: break-all; + word-break: normal; + overflow-wrap: break-word; } .cover-subtitle { diff --git a/assets/styles.css b/assets/styles.css index 7134fee..1f2fb12 100644 --- a/assets/styles.css +++ b/assets/styles.css @@ -70,7 +70,8 @@ body { -webkit-text-fill-color: transparent; background-clip: text; margin-bottom: auto; - word-break: break-all; + word-break: normal; + overflow-wrap: break-word; } .cover-subtitle { @@ -199,7 +200,9 @@ body { overflow-x: visible; overflow-wrap: break-word; word-wrap: break-word; - word-break: break-all; + overflow-wrap: break-word; + word-wrap: break-word; + word-break: normal; white-space: pre-wrap; font-size: 36px; line-height: 1.5; @@ -315,4 +318,4 @@ body { .bg-gradient-8 { background: linear-gradient(135deg, #a8edea 0%, #fed6e3 100%); -} +} \ No newline at end of file From 55594c6e4f49812eee70e4cae99374e1e4a0eb28 Mon Sep 17 00:00:00 2001 From: neo-cloud-ai Date: Thu, 29 Jan 2026 17:52:32 +0800 Subject: [PATCH 2/3] Fix conflicts and word break issues in v2 script --- package.json | 10 +++++----- scripts/render_xhs_v2.py | 6 ++++-- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 079c7de..43ae0a9 100644 --- a/package.json +++ b/package.json @@ -2,9 +2,9 @@ "name": "md2redbook", "version": "2.0.0", "description": "小红书笔记素材创作工具 - 支持多种排版样式和智能分页", - "main": "scripts/render_xhs.js", + "main": "scripts/render_xhs_v2.js", "scripts": { - "render": "node scripts/render_xhs.js", + "render": "node scripts/render_xhs_v2.js", "install-browsers": "npx playwright install chromium" }, "keywords": [ @@ -16,8 +16,8 @@ "author": "", "license": "MIT", "dependencies": { + "js-yaml": "^4.1.0", "marked": "^11.0.0", - "yaml": "^2.3.0", - "playwright": "^1.40.0" + "playwright": "^1.58.0" } -} +} \ No newline at end of file diff --git a/scripts/render_xhs_v2.py b/scripts/render_xhs_v2.py index b9469d7..cacd898 100644 --- a/scripts/render_xhs_v2.py +++ b/scripts/render_xhs_v2.py @@ -342,7 +342,8 @@ def generate_cover_html(metadata: dict, style_key: str = "purple") -> str: background-clip: text; flex: 1; display: flex; align-items: flex-start; - word-break: break-all; + word-break: normal; + overflow-wrap: break-word; }} .cover-subtitle {{ font-weight: 350; font-size: 72px; line-height: 1.4; @@ -463,7 +464,8 @@ def generate_card_html(content: str, page_number: int = 1, total_pages: int = 1, overflow-x: visible; overflow-wrap: break-word; word-wrap: break-word; - word-break: break-all; + word-break: normal; + overflow-wrap: break-word; white-space: pre-wrap; font-size: 36px; line-height: 1.5; }} From 065a1ad3e2d8777c8efff9e0524eaa76c53861ee Mon Sep 17 00:00:00 2001 From: neo-cloud-ai Date: Fri, 30 Jan 2026 14:35:17 +0800 Subject: [PATCH 3/3] feat: optimize cover title font size dynamic adjustment --- scripts/render_xhs.py | 20 ++++++++++++++------ scripts/render_xhs_v2.py | 20 ++++++++++++++------ 2 files changed, 28 insertions(+), 12 deletions(-) diff --git a/scripts/render_xhs.py b/scripts/render_xhs.py index 952bd0f..1c5c048 100644 --- a/scripts/render_xhs.py +++ b/scripts/render_xhs.py @@ -148,12 +148,20 @@ def generate_cover_html(metadata: dict, theme: str, width: int, height: int) -> title = metadata.get('title', '标题') subtitle = metadata.get('subtitle', '') - # 限制标题和副标题长度 - if len(title) > 15: - title = title[:15] - if len(subtitle) > 15: - subtitle = subtitle[:15] + # 动态调整标题字体大小 + title_len = len(title) + if title_len <= 6: + title_size = int(width * 0.14) # 极大 + elif title_len <= 10: + title_size = int(width * 0.12) # 大 + elif title_len <= 18: + title_size = int(width * 0.09) # 中 + elif title_len <= 30: + title_size = int(width * 0.07) # 小 + else: + title_size = int(width * 0.055) # 极小 + # 获取主题背景色 theme_backgrounds = { 'default': 'linear-gradient(180deg, #f3f3f3 0%, #f9f9f9 100%)', @@ -231,7 +239,7 @@ def generate_cover_html(metadata: dict, theme: str, width: int, height: int) -> .cover-title {{ font-weight: 900; - font-size: {int(width * 0.12)}px; + font-size: {title_size}px; line-height: 1.4; background: {title_bg}; -webkit-background-clip: text; diff --git a/scripts/render_xhs_v2.py b/scripts/render_xhs_v2.py index cacd898..75f42f8 100644 --- a/scripts/render_xhs_v2.py +++ b/scripts/render_xhs_v2.py @@ -295,12 +295,20 @@ def generate_cover_html(metadata: dict, style_key: str = "purple") -> str: title = metadata.get('title', '标题') subtitle = metadata.get('subtitle', '') - # 限制标题和副标题长度 - if len(title) > 15: - title = title[:15] - if len(subtitle) > 15: - subtitle = subtitle[:15] + # 动态调整标题字体大小 + title_len = len(title) + if title_len <= 6: + title_size = 150 # 极大 (width * 0.14) + elif title_len <= 10: + title_size = 130 # 大 (width * 0.12) + elif title_len <= 18: + title_size = 100 # 中 (width * 0.09) + elif title_len <= 30: + title_size = 80 # 小 (width * 0.07) + else: + title_size = 60 # 极小 (width * 0.055) + # 暗黑模式特殊处理 is_dark = style_key == "dark" text_color = "#ffffff" if is_dark else "#000000" @@ -335,7 +343,7 @@ def generate_cover_html(metadata: dict, style_key: str = "purple") -> str: }} .cover-emoji {{ font-size: 180px; line-height: 1.2; margin-bottom: 50px; }} .cover-title {{ - font-weight: 900; font-size: 130px; line-height: 1.4; + font-weight: 900; font-size: {title_size}px; line-height: 1.4; background: {title_gradient}; -webkit-background-clip: text; -webkit-text-fill-color: transparent;