$npx -y skills add OpenRaiser/PaperFit --skill space-util-fixer本技能专门处理 Category A:空间利用缺陷,包括:
| 1 | # Space Utilization Fixer Skill |
| 2 | |
| 3 | ## 概述 |
| 4 | |
| 5 | 本技能专门处理 **Category A:空间利用缺陷**,包括: |
| 6 | |
| 7 | - **A1**:孤行/寡行(Widow/Orphan Lines) |
| 8 | - **A2**:末页大面积留白(Excessive Trailing Whitespace) |
| 9 | - **A3**:页数预算违反(Page Budget Violation) |
| 10 | - **A4**:双栏末页左右栏高度不齐(Unbalanced Column Heights) |
| 11 | - **A5**:双栏页内列竖向空洞(栏内中段大块无图无表空白,常与 `figure*`/`[H]`/不当断页有关) |
| 12 | |
| 13 | 该技能由 `code-surgeon-agent` 或 `semantic-polish-agent` 调用,通过对段落级排版控制、浮动体调度和最小语义改写的组合运用,优化页面空间分配,使文档达到专业级的视觉均衡。 |
| 14 | |
| 15 | 空间利用问题的修复常常需要多轮迭代,因为局部调整会影响全局分页。因此,每次修改后必须重新编译并审查页图。 |
| 16 | |
| 17 | --- |
| 18 | |
| 19 | ## 适用场景 |
| 20 | |
| 21 | | 缺陷 ID | 描述 | 优先级 | 是否允许语义修改 | |
| 22 | |---------|------|--------|-----------------| |
| 23 | | A1 | 孤行/寡行 | High | 是(最后手段) | |
| 24 | | A2 | 末页大面积留白 | High | 是(最后手段) | |
| 25 | | A3 | 页数预算违反 | Critical | 是(最后手段) | |
| 26 | | A4 | 双栏末页左右栏高度不齐 | Medium | 否 | |
| 27 | | A5 | 双栏页内列竖向空洞(非末页、栏内大块无正文空白) | High | 视情况 | |
| 28 | |
| 29 | --- |
| 30 | |
| 31 | ## 输入规范 |
| 32 | |
| 33 | | 输入项 | 来源 | 说明 | |
| 34 | |--------|------|------| |
| 35 | | 主 `.tex` 文件路径 | 项目上下文 | 需修改的源文件 | |
| 36 | | 排版侦探报告 | `layout-detective-agent` 输出 | 包含 A 类缺陷的页码和描述 | |
| 37 | | 目标页数(若适用) | 用户约束 | A3 修复必须提供 | |
| 38 | | 模板类型 | `templates.yaml` 或上下文 | 单栏/双栏 | |
| 39 | |
| 40 | --- |
| 41 | |
| 42 | ## 输出规范 |
| 43 | |
| 44 | ```json |
| 45 | { |
| 46 | "skill": "space-util-fixer", |
| 47 | "status": "success | partial | failed", |
| 48 | "modified_files": ["main.tex"], |
| 49 | "changes": [ |
| 50 | { |
| 51 | "defect_id": "A1", |
| 52 | "object": "第4页顶部孤行", |
| 53 | "action": "在段落前添加 \\looseness=-1", |
| 54 | "before_snippet": "The proposed method achieves...", |
| 55 | "after_snippet": "{\\looseness=-1 The proposed method achieves...}" |
| 56 | } |
| 57 | ], |
| 58 | "unresolved": [] |
| 59 | } |
| 60 | ``` |
| 61 | |
| 62 | --- |
| 63 | |
| 64 | ## 修复策略 |
| 65 | |
| 66 | ### 通用原则 |
| 67 | |
| 68 | 1. **先排版,后语义**:优先使用 LaTeX 原生的排版控制命令,仅在无效时才考虑语义级改写。 |
| 69 | 2. **局部修改,全局验证**:改动一段可能影响后续多页分页,必须完整编译并检查全文档。 |
| 70 | 3. **避免硬性分页**:禁止滥用 `\newpage` 或 `\clearpage` 来“凑页数”,这会破坏文档结构的自然性。 |
| 71 | |
| 72 | --- |
| 73 | |
| 74 | ### A1:孤行/寡行修复 |
| 75 | |
| 76 | **问题特征**: |
| 77 | - 段落最后一行单独出现在下一页顶部(孤行)。 |
| 78 | - 段落第一行单独留在上一页底部(寡行)。 |
| 79 | - 段落末尾仅含 1-3 个单词的短行(段尾小尾巴)。 |
| 80 | |
| 81 | **修复策略(严格按优先级顺序尝试)**: |
| 82 | |
| 83 | #### 策略 1:段落级收紧 (`\looseness=-1`) |
| 84 | |
| 85 | 通过在段落前设置 `\looseness=-1`,指示 TeX 引擎尝试将段落收缩一行,从而消除孤行或小尾巴。 |
| 86 | |
| 87 | ```latex |
| 88 | % 修改前 |
| 89 | The proposed method achieves state-of-the-art performance on several |
| 90 | benchmarks, demonstrating the effectiveness of our approach. |
| 91 | |
| 92 | % 修改后 |
| 93 | {\looseness=-1 The proposed method achieves state-of-the-art performance on several |
| 94 | benchmarks, demonstrating the effectiveness of our approach.} |
| 95 | ``` |
| 96 | |
| 97 | *注意*: |
| 98 | - 必须将整个段落用花括号 `{ }` 括起,以限制 `\looseness` 的作用范围。 |
| 99 | - 若段落本身很短,收缩可能导致过紧的行距,需在页图上确认可接受。 |
| 100 | |
| 101 | #### 策略 2:段落级扩张 (`\looseness=1`) |
| 102 | |
| 103 | 若段落太紧,可尝试扩张一行,使段末行变长。 |
| 104 | |
| 105 | ```latex |
| 106 | {\looseness=1 This paragraph will be typeset with one more line...} |
| 107 | ``` |
| 108 | |
| 109 | #### 策略 3:调整段落间胶水 (`\emergencystretch`) |
| 110 | |
| 111 | 为特定段落增加紧急拉伸量,允许行间略微拉伸以调整断行。 |
| 112 | |
| 113 | ```latex |
| 114 | {\emergencystretch=1em This paragraph content...} |
| 115 | ``` |
| 116 | |
| 117 | #### 策略 4:微调上下文句长分布(需 `semantic-polish-agent`) |
| 118 | |
| 119 | 若排版控制无效,则进行最小语义改写: |
| 120 | - 在段落中增删 3-8 个单词(如将 `in order to` 改为 `to`,或将 `demonstrate` 改为 `show`)。 |
| 121 | - 调整从句结构,但不改变学术原意。 |
| 122 | |
| 123 | ```latex |
| 124 | % 修改前 |
| 125 | The proposed method achieves state-of-the-art performance on several |
| 126 | benchmarks, demonstrating the effectiveness of our approach. |
| 127 | |
| 128 | % 修改后 |
| 129 | The proposed method achieves state-of-the-art results on several |
| 130 | benchmarks, showing the effectiveness of our approach. |
| 131 | ``` |
| 132 | |
| 133 | *语义改写必须由 `semantic-polish-agent` 执行,本技能仅提出请求。* |
| 134 | |
| 135 | #### 策略 5:全局调整 widow/orphan 惩罚 |
| 136 | |
| 137 | 在导言区增加以下设置(通常模板已包含,可作为兜底): |
| 138 | |
| 139 | ```latex |
| 140 | \widowpenalty=10000 |
| 141 | \clubpenalty=10000 |
| 142 | \displaywidowpenalty=10000 |
| 143 | ``` |
| 144 | |
| 145 | *注意*:此设置影响全局,需谨慎。若模板已设置,则无需重复。 |
| 146 | |
| 147 | --- |
| 148 | |
| 149 | ### A2:末页大面积留白修复 |
| 150 | |
| 151 | **问题特征**: |
| 152 | - 最后一页(参考文献前或后)空白区域超过页面高度的 20%。 |
| 153 | |
| 154 | **修复策略(按优先级)**: |
| 155 | |
| 156 | #### 策略 1:前移浮动体 |
| 157 | |
| 158 | 检查倒数第二、第三页是否有可前移的图表。调整其位置参数 `[htbp]`,使其占据末页空白区域。 |
| 159 | |
| 160 | ```latex |
| 161 | % 将原本放在倒数第二页的图强制前移 |
| 162 | \begin{figure}[t] → \begin{figure}[ht] |
| 163 | ``` |
| 164 | |
| 165 | #### 策略 2:调整局部垂直间距 |
| 166 | |
| 167 | 在不影响整体美观的前提下,微调末页前的某些垂直间距(如 `\vspace`、章节间距)。 |
| 168 | |
| 169 | ```latex |
| 170 | % 轻微缩小最后一节前的间距 |
| 171 | \vspace{-0.5em} |
| 172 | \section{Conclusion} |
| 173 | ``` |
| 174 | |
| 175 | *注意*:不要制造新的视觉不协调。 |
| 176 | |
| 177 | #### 策略 3:适当扩写结论或讨论部分(需语义润色) |
| 178 | |
| 179 | 在结论、讨论或分析段落中增加有实质内容的 2-4 行文本(约 30-60 词),以自然填充空白。 |
| 180 | |
| 181 | *此操作必须由 `semantic-polish-agent` 执行。* |
| 182 | |
| 183 | #### 策略 4:增加附录或致谢(最后手段) |
| 184 | |
| 185 | 若用户同意,可将部分非核心内容(如额外消融实验)从正文移至附录,或在末页后增加致谢部分。 |
| 186 | |
| 187 | --- |
| 188 | |
| 189 | ### A3:页数预算修复 |
| 190 | |
| 191 | **问题特征**: |
| 192 | - 实际总页数与目标页数不符(如会议要求 9 页,实际 8 页或 10 页)。 |
| 193 | |
| 194 | **修复策略**: |
| 195 | |
| 196 | 本缺陷修复需要系统性操作,通常结合多种手段。 |
| 197 | |
| 198 | #### 情况 1:超页(实际页数 > 目标页数) |
| 199 | |
| 200 | **优先级从高到低**: |
| 201 | |
| 202 | 1. **压缩浮动体** |
| 203 | - 缩小超大图片(`width=0.95\linewidth` 代替 `\linewidth`)。 |
| 204 | - 将跨页长表格改为 `longtable`(可跨页,避免独占一页)。 |
| 205 | - 调整浮动体位置,使其更紧凑地填充页面。 |
| 206 | |
| 207 | 2. **缩减垂直间距** |
| 208 | - 使用 `\vspace{-0.2cm}` 微调节标题、图表与正文的间距。 |
| 209 | - 检查是否有冗余的 `\newline` 或空行。 |
| 210 | |
| 211 | 3. **精炼文字(语义级)** |
| 212 | 在非核心段落(Related Work、Introduction 末尾)进行精简: |
| 213 | - 删除冗余修饰词。 |
| 214 | - 合并短句。 |
| 215 | - 将被动语态改为主动语态(通常更短)。 |
| 216 | |
| 217 | 4. **压缩参考文献** |
| 218 | 若参考文献过多,使用 `\bibliographystyle{abbrv}` 或类似缩写样式,或使用 `biblatex` 的压缩选项。 |
| 219 | |
| 220 | 5. **缩小页边距(谨慎)** |
| 221 | 若模板允许,使用 `\usepackage[margin=...]{geometry}` 微调边距。*必须在模板允许范围内。* |
| 222 | |
| 223 | #### 情况 2:缺页(实际页数 < 目标页数) |
| 224 | |
| 225 | **优先级从高到低**: |
| 226 | |
| 227 | 1. **检查浮动体堆积** |
| 228 | 是否因 `\FloatBarrier` 或 `[H]` 导致页面空白?若是,先按 B 类缺陷修复。 |
| 229 | |
| 230 | 2. **适当扩写结论、讨论或分析段落** |
| 231 | 增加 5-10 行有实质内容的分析,例如: |
| 232 | - 深入解释某个实验结果的含义。 |
| 233 | - 补充一个简短的局限性讨论。 |
| 234 | - 强化与相关工作的对比。 |
| 235 | |
| 236 | 3. **增加附录或补充材料** |
| 237 | 若会议允许附录且不计入页数限制,可将部分内容移至附录,使正文恰好满页。 |
| 238 | |
| 239 | 4. **微调图表尺寸** |
| 240 | 将部分图片略微放大(`width=1.0\linewidth` 代替 `0.95\linewidth`),使其占据更多空间但不溢出。 |
| 241 | |
| 242 | 5. **增加分页点** |
| 243 | 在合适位置(如章节末尾)添加 `\newpage` 迫使内容分页,但必须确保不产生孤页。 |
| 244 | |
| 245 | --- |
| 246 | |
| 247 | ### A4:双栏末页左右栏高度不齐 |
| 248 | |
| 249 | **问题特征**: |
| 250 | - 双栏模板最后一页,左栏和右栏底部高度差超过 2 行。 |
| 251 | |
| 252 | **修复策略**: |
| 253 | |
| 254 | #### 策略 1:使用 `\balance` 或 `flushend` 宏包 |
| 255 | |
| 256 | 在导言区加载 `flushend` 宏包,自动平衡末页两栏高度。 |
| 257 | |
| 258 | ```latex |
| 259 | \usepackage{flushend} |
| 260 | ``` |
| 261 | |
| 262 | *注意*:`flushend` 与某些宏包(如 `multicol`)可能冲突,需在特定模板下测 |