$npx -y skills add OpenRaiser/PaperFit --skill overflow-repair本技能专门处理 Category D:溢出与对齐缺陷,包括:
| 1 | # Overflow Repair Skill |
| 2 | |
| 3 | ## 概述 |
| 4 | |
| 5 | 本技能专门处理 **Category D:溢出与对齐缺陷**,包括: |
| 6 | |
| 7 | - **D1**:Overfull hbox(段落文本、表格单元格、公式溢出栏宽) |
| 8 | - **D2**:长公式未合理断行 |
| 9 | - **D3**:URL/长标识符溢出 |
| 10 | |
| 11 | 该技能由 `code-surgeon-agent` 调用,执行对 `.tex` 源码的精确修改,以消除或缓解溢出问题。所有修复遵循 **最小修改原则**,不改变学术内容。 |
| 12 | |
| 13 | --- |
| 14 | |
| 15 | ## 适用场景 |
| 16 | |
| 17 | 当 `layout-detective-agent` 或 `rule-engine-agent` 报告中出现以下缺陷 ID 时,路由至本技能: |
| 18 | |
| 19 | | 缺陷 ID | 描述 | 优先级 | |
| 20 | |---------|------|--------| |
| 21 | | D1 | Overfull hbox(段落/表格/公式) | High | |
| 22 | | D2 | 长公式未断行 | High | |
| 23 | | D3 | URL/长标识符溢出 | Medium | |
| 24 | |
| 25 | --- |
| 26 | |
| 27 | ## 输入规范 |
| 28 | |
| 29 | | 输入项 | 来源 | 说明 | |
| 30 | |--------|------|------| |
| 31 | | 主 `.tex` 文件路径 | 项目上下文 | 需修改的源文件 | |
| 32 | | 规则引擎报告 | `rule-engine-agent` 输出 | 包含溢出位置(行号)、溢出量、对象 | |
| 33 | | 排版侦探报告 | `layout-detective-agent` 输出 | 包含视觉确认的溢出页面和对象 | |
| 34 | | 当前编译日志 | `.log` 文件 | 用于验证修复后溢出是否消除 | |
| 35 | |
| 36 | --- |
| 37 | |
| 38 | ## 输出规范 |
| 39 | |
| 40 | 修改完成后,必须返回以下信息: |
| 41 | |
| 42 | ```json |
| 43 | { |
| 44 | "skill": "overflow-repair", |
| 45 | "status": "success | partial | failed", |
| 46 | "modified_files": ["main.tex", "tables/table1.tex"], |
| 47 | "changes": [ |
| 48 | { |
| 49 | "defect_id": "D1", |
| 50 | "object": "Table 2", |
| 51 | "action": "替换 tabular 为 tabularx,设置列宽比例", |
| 52 | "before": "\\begin{tabular}{|l|c|c|}", |
| 53 | "after": "\\begin{tabularx}{\\linewidth}{|l|X|X|}" |
| 54 | } |
| 55 | ], |
| 56 | "unresolved": [] |
| 57 | } |
| 58 | ``` |
| 59 | |
| 60 | --- |
| 61 | |
| 62 | ## 修复策略 |
| 63 | |
| 64 | ### 策略选择流程 |
| 65 | |
| 66 | 1. 根据日志和视觉报告定位溢出位置与类型(段落/表格/公式/URL)。 |
| 67 | 2. 按照下文各类型的修复策略依次尝试,从最不侵入的方案开始。 |
| 68 | 3. 每次修改后,通知 `orchestrator-agent` 触发重新编译以验证效果。 |
| 69 | 4. 若当前策略无效,回退并尝试下一策略。 |
| 70 | |
| 71 | --- |
| 72 | |
| 73 | ### D1:段落文本溢出 |
| 74 | |
| 75 | **问题特征**: |
| 76 | - 日志:`Overfull \hbox (Xpt too wide) in paragraph at lines A--B` |
| 77 | - 视觉:某行文本伸出右边界 |
| 78 | |
| 79 | **修复策略(按优先级)**: |
| 80 | |
| 81 | 1. **引入断词点** |
| 82 | 在溢出单词的合适位置添加 `\-` 连字符,使 LaTeX 能在该处断行。 |
| 83 | ```latex |
| 84 | % 修改前 |
| 85 | This is a verylongwordthatdoesnotbreak. |
| 86 | % 修改后 |
| 87 | This is a very\-long\-word\-that\-does\-not\-break. |
| 88 | ``` |
| 89 | |
| 90 | 2. **调整段落级容差** |
| 91 | 在段落前临时增加 `\emergencystretch` 或调整 `\tolerance`。 |
| 92 | ```latex |
| 93 | {\emergencystretch=1em % 允许额外拉伸 1em |
| 94 | This is the problematic paragraph content... |
| 95 | } |
| 96 | ``` |
| 97 | *注意:修改后需恢复默认值,避免影响全局。* |
| 98 | |
| 99 | 3. **局部微调措辞**(需 `semantic-polish-agent` 介入) |
| 100 | 若排版手段无法解决,可替换为稍短的近义词或调整语序。 |
| 101 | ```latex |
| 102 | % 修改前 |
| 103 | the implementation of the proposed methodology |
| 104 | % 修改后 |
| 105 | the implementation of our method |
| 106 | ``` |
| 107 | |
| 108 | --- |
| 109 | |
| 110 | ### D1:表格单元格溢出 |
| 111 | |
| 112 | **问题特征**: |
| 113 | - 日志:`Overfull \hbox (Xpt too wide) in alignment at lines A--B` |
| 114 | - 视觉:表格某单元格内容超出列宽,与相邻列重叠或伸出表格边界 |
| 115 | |
| 116 | **修复策略(按优先级)**: |
| 117 | |
| 118 | 1. **改用 `tabularx` 环境** |
| 119 | 将 `tabular` 替换为 `tabularx`,并为文本列分配 `X` 列类型以允许自动换行。 |
| 120 | ```latex |
| 121 | % 修改前 |
| 122 | \begin{tabular}{|l|c|c|} |
| 123 | \hline |
| 124 | Method & Description & Score \\ |
| 125 | \hline |
| 126 | Ours & A very long description that causes overflow & 0.95 \\ |
| 127 | \hline |
| 128 | \end{tabular} |
| 129 | |
| 130 | % 修改后 |
| 131 | \usepackage{tabularx} % 确保导言区已引入 |
| 132 | ... |
| 133 | \begin{tabularx}{\linewidth}{|l|X|X|} |
| 134 | \hline |
| 135 | Method & Description & Score \\ |
| 136 | \hline |
| 137 | Ours & A very long description that causes overflow & 0.95 \\ |
| 138 | \hline |
| 139 | \end{tabularx} |
| 140 | ``` |
| 141 | *规则*:多个文本列应共同使用 `X` 列,避免单列过宽。 |
| 142 | |
| 143 | 2. **手动设置列宽** |
| 144 | 使用 `p{宽度}` 列类型固定文本列宽度。 |
| 145 | ```latex |
| 146 | \begin{tabular}{|l|p{4cm}|c|} |
| 147 | ``` |
| 148 | |
| 149 | 3. **精简表头或内容** |
| 150 | 若表头过长导致溢出,可缩写表头或使用换行。 |
| 151 | ```latex |
| 152 | % 修改前 |
| 153 | \textbf{Mean Average Precision at IoU 0.5} |
| 154 | % 修改后 |
| 155 | \textbf{mAP@0.5} |
| 156 | ``` |
| 157 | |
| 158 | 4. **调整字号(谨慎使用)** |
| 159 | 在表格环境内使用 `\small` 或 `\footnotesize`,但需确保与全篇表格风格一致。 |
| 160 | ```latex |
| 161 | \begin{table} |
| 162 | \small |
| 163 | \begin{tabular}{...} |
| 164 | ... |
| 165 | \end{tabular} |
| 166 | \end{table} |
| 167 | ``` |
| 168 | |
| 169 | 5. **旋转表格** |
| 170 | 对于列数过多的宽表,使用 `\rotatebox` 或 `sidewaystable` 环境。 |
| 171 | ```latex |
| 172 | \usepackage{rotating} |
| 173 | ... |
| 174 | \begin{sidewaystable} |
| 175 | ... |
| 176 | \end{sidewaystable} |
| 177 | ``` |
| 178 | |
| 179 | --- |
| 180 | |
| 181 | ### D2:长公式未断行 |
| 182 | |
| 183 | **问题特征**: |
| 184 | - 视觉:公式长度接近或超过栏宽,未在运算符处断行 |
| 185 | - 日志:可能伴随 `Overfull \hbox` 在公式环境 |
| 186 | |
| 187 | **修复策略(按优先级)**: |
| 188 | |
| 189 | 1. **替换为多行公式环境** |
| 190 | - 单行公式 → `multline`:首行左对齐,末行右对齐,中间行居中。 |
| 191 | - 多行对齐公式 → `align` 或 `aligned`:在等号或运算符处对齐。 |
| 192 | ```latex |
| 193 | % 修改前(equation 环境) |
| 194 | \begin{equation} |
| 195 | f(x) = a_1 x^1 + a_2 x^2 + a_3 x^3 + a_4 x^4 + a_5 x^5 + a_6 x^6 |
| 196 | \end{equation} |
| 197 | |
| 198 | % 修改后(multline 环境) |
| 199 | \begin{multline} |
| 200 | f(x) = a_1 x^1 + a_2 x^2 + a_3 x^3 \\ |
| 201 | + a_4 x^4 + a_5 x^5 + a_6 x^6 |
| 202 | \end{multline} |
| 203 | |
| 204 | % 或 align 环境(在等号处对齐) |
| 205 | \begin{align} |
| 206 | f(x) &= a_1 x^1 + a_2 x^2 + a_3 x^3 \nonumber \\ |
| 207 | &\quad + a_4 x^4 + a_5 x^5 + a_6 x^6 |
| 208 | \end{align} |
| 209 | ``` |
| 210 | |
| 211 | 2. **使用 `split` 环境嵌套在 `equation` 中** |
| 212 | 保留单个公式编号,但内部换行。 |
| 213 | ```latex |
| 214 | \begin{equation} |
| 215 | \begin{split} |
| 216 | f(x) &= a_1 x^1 + a_2 x^2 + a_3 x^3 \\ |
| 217 | &\quad + a_4 x^4 + a_5 x^5 + a_6 x^6 |
| 218 | \end{split} |
| 219 | \end{equation} |
| 220 | ``` |
| 221 | |
| 222 | 3. **引入中间变量简化表达式** |
| 223 | 若公式过长且无明显断点,可拆分为多个子公式。 |
| 224 | ```latex |
| 225 | % 修改前 |
| 226 | P(y|x) = \frac{\exp(\sum_i w_i f_i(x,y))}{\sum_{y'}\exp(\sum_i w_i f_i(x,y'))} |
| 227 | |
| 228 | % 修改后 |
| 229 | Let $S(x,y) = \sum_i w_i f_i(x,y)$, then |
| 230 | \begin{equation} |
| 231 | P(y|x) = \frac{\exp(S(x,y))}{\sum_{y'}\exp(S(x,y'))} |
| 232 | \end{equation} |
| 233 | ``` |
| 234 | |
| 235 | --- |
| 236 | |
| 237 | ### D3:URL/长标识符溢出 |
| 238 | |
| 239 | **问题特征**: |
| 240 | - 视觉:参考文献中的 URL 或 DOI 伸出右边界 |
| 241 | - 日志:`Overfull \hbox` 在参考文献区域 |
| 242 | |
| 243 | **修复策略(按优先级)**: |
| 244 | |
| 245 | 1. **使用 `\url` 命令** |
| 246 | `\url` 命令(由 `hyperref` 或 `url` 宏包提供)能自动在合适位置断行。 |
| 247 | ```latex |
| 248 | % 修改前 |
| 249 | https://github.com/very/long/url/that/overflows/the/margin |
| 250 | % 修改后 |
| 251 | \url{https://github.com/very/long/url/that/overflows/the/margin} |
| 252 | ``` |
| 253 | |
| 254 | 2. **启用参考文献断行** |
| 255 | 在导言区添加: |
| 256 | ```latex |
| 257 | \usepackage{url} |
| 258 | \def\UrlBreaks{\do\/\do-} % 允许在 / 和 - 处断行 |
| 259 | ``` |
| 260 | 或对于 `bib |